They were once part of a special Java target profile, but this is no longer used today.
EXTRA_DISTFILES = \
Novell.Directory.Ldap.Rfc2251/RfcLdapURL.cs \
- Novell.Directory.Ldap.Security.jvm/AuthenticationCallbackHandler.cs \
- Novell.Directory.Ldap.Security.jvm/ChangeLog \
- Novell.Directory.Ldap.Security.jvm/CreateContextPrivilegedAction.cs \
- Novell.Directory.Ldap.Security.jvm/ExchangeTokenPrivilegedAction.cs \
- Novell.Directory.Ldap.Security.jvm/Krb5Helper.cs \
- Novell.Directory.Ldap.Security.jvm/SecureStream.cs \
- Novell.Directory.Ldap.Security.jvm/UnwrapPrivilegedAction.cs \
- Novell.Directory.Ldap.Security.jvm/WrapPrivilegedAction.cs \
Novell.Directory.Ldap.Utilclass/ExceptionMessages.resx \
Novell.Directory.Ldap.Utilclass/ExceptionMessages.txt \
Novell.Directory.Ldap.Utilclass/ResultCodeMessages.resx \
+++ /dev/null
-/AuthenticationCallbackHandler.cs -crlf
-/CreateContextPrivilegedAction.cs -crlf
-/ExchangeTokenPrivilegedAction.cs -crlf
-/Krb5Helper.cs -crlf
-/SecureStream.cs -crlf
-/UnwrapPrivilegedAction.cs -crlf
-/WrapPrivilegedAction.cs -crlf
+++ /dev/null
-//
-// Novell.Directory.Ldap.Security.AuthenticationCallbackHandler.cs
-//
-// Authors:
-// Boris Kirzner <borsk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-\r
-using javax.security.auth.callback;\r
-using java.io;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class AuthenticationCallbackHandler : CallbackHandler\r
- {\r
-\r
- #region Fields\r
-\r
- private readonly string _username;\r
- private readonly string _password;\r
-\r
- #endregion //Fields\r
-\r
- #region Constructors\r
-\r
- public AuthenticationCallbackHandler(string username, string password)\r
- {\r
- _username = username;\r
- _password = password;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public void handle(Callback [] callbacks)\r
- {\r
- for (int i = 0; i < callbacks.Length; i++) {\r
- if (callbacks [i] is NameCallback) {\r
- NameCallback nc = (NameCallback) callbacks [i];\r
- nc.setName (_username);\r
- }\r
- else if (callbacks [i] is PasswordCallback) {\r
- PasswordCallback pc = (PasswordCallback) callbacks [i];\r
- pc.setPassword (_password.ToCharArray ());\r
- }\r
- else {\r
- throw new UnsupportedCallbackException (callbacks [i], "Unrecognized Callback");\r
- }\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-2005-11-06 Konstantin Triger <kostat@mainsoft.com>
-
- * SecureStream.cs, CreateContextPrivilegedAction.cs, Krb5Helper.cs:
- create GSSCredential only once, cleanup
-
-2005-11-03 Konstantin Triger <kostat@mainsoft.com>
-
- * CreateContextPrivilegedAction.cs: always require mutual auth;
- require integrity by default.
- * Krb5Helper.cs: for wrap/unwrap: always create MessageProp with
- pribState set.
-
-2005-14-08 Boris Kirzner <borisk@mainsoft.com>
- * Krb5Helper.cs: ExchangeTokens does proper final handshaking. Wrap/Unwrap
- perform no action if no integrity and encryption accured.
- * SecureStream.cs: Private convertion methods became internal, used by
- Krb5Helper.
-
-2005-28-07 Boris Kirzner <borisk@mainsoft.com>
- * Novell.Directory.Ldap.Security.jvm/ExchangeTokenPrivilegedAction.cs,
- Novell.Directory.Ldap.Security.jvm/CreateContextPrivilegedAction.cs,
- Novell.Directory.Ldap.Security.jvm/SecureStream.cs,
- Novell.Directory.Ldap.Security.jvm/WrapPrivilegedAction.cs,
- Novell.Directory.Ldap.Security.jvm/Krb5Helper.cs,
- Novell.Directory.Ldap.Security.jvm/UnwrapPrivilegedAction.cs,
- Novell.Directory.Ldap.Security.jvm/AuthenticationCallbackHandler.cs: added
- new classes implementing kerberos authntication support.
+++ /dev/null
-//
-// Novell.Directory.Ldap.Security.CreateContextPrivilegedAction.cs
-//
-// Authors:
-// Boris Kirzner <borsk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-\r
-using java.security;\r
-using org.ietf.jgss;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class CreateContextPrivilegedAction : PrivilegedAction\r
- {\r
- #region Fields\r
-\r
- private readonly bool _encryption;\r
- private readonly bool _signing;\r
- private readonly bool _delegation;\r
- private readonly string _name;\r
- private readonly string _clientName;\r
- private readonly string _mech;\r
-\r
- #endregion //Fields\r
-\r
- #region Constructors\r
-\r
- public CreateContextPrivilegedAction(string name, string clientName, string mech, bool encryption, bool signing, bool delegation)\r
- {\r
- _name = name;\r
- _clientName = clientName;\r
- _mech = mech;\r
- _encryption = encryption;\r
- _signing = signing;\r
- _delegation = delegation;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public object run()\r
- {\r
- try { \r
- Oid krb5Oid = new Oid (_mech);\r
- GSSManager manager = GSSManager.getInstance ();\r
- GSSName clientName = \r
- manager.createName(_clientName, GSSName__Finals.NT_USER_NAME);\r
- GSSCredential clientCreds =\r
- manager.createCredential(clientName,\r
- GSSContext__Finals.INDEFINITE_LIFETIME,\r
- krb5Oid,\r
- GSSCredential__Finals.INITIATE_ONLY);\r
-\r
-// try {\r
- GSSName serverName = manager.createName (_name, GSSName__Finals.NT_HOSTBASED_SERVICE, krb5Oid);\r
- GSSContext context = manager.createContext (serverName, krb5Oid, clientCreds, GSSContext__Finals.INDEFINITE_LIFETIME);\r
-\r
- context.requestMutualAuth(true); \r
- context.requestConf (_encryption);\r
- if (!_encryption || _signing)\r
- context.requestInteg (!_encryption || _signing); \r
- context.requestCredDeleg (_delegation);\r
-\r
- return context;\r
-// }\r
-// finally {\r
-// // Calling this throws GSSException: Operation unavailable...\r
-// clientCreds.dispose();\r
-// }\r
- }\r
- catch (GSSException e) {\r
- throw new PrivilegedActionException (e);\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//
-// Novell.Directory.Ldap.Security.ExchangeTokenPrivilegedAction.cs
-//
-// Authors:
-// Boris Kirzner <borsk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-\r
-using org.ietf.jgss;\r
-using java.security;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class ExchangeTokenPrivilegedAction : PrivilegedAction\r
- {\r
- #region Fields\r
-\r
- private readonly sbyte [] _token;\r
- private readonly GSSContext _context;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public ExchangeTokenPrivilegedAction(GSSContext context, sbyte [] token)\r
- {\r
- _token = token;\r
- _context = context;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public object run()\r
- {\r
- try {\r
- sbyte [] token = _context.initSecContext (_token, 0, _token.Length);\r
- return token;\r
- }\r
- catch (GSSException e) {\r
- throw new PrivilegedActionException (e);\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-// \r
-// Novell.Directory.Ldap.Security.Krb5Helper.cs\r
-//\r
-// Authors:\r
-// Boris Kirzner <borsk@mainsoft.com>\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using vmw.common;\r
-\r
-using java.security;\r
-using javax.security.auth;\r
-using org.ietf.jgss;\r
-\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class Krb5Helper : IDisposable\r
- {\r
- enum QOP {\r
- NO_PROTECTION = 1,\r
- INTEGRITY_ONLY_PROTECTION = 2,\r
- PRIVACY_PROTECTION = 4\r
- }\r
-\r
- #region Fields\r
-\r
- internal static readonly sbyte [] EmptyToken = new sbyte [0];\r
- \r
- private readonly bool _encryption;\r
- private readonly bool _signing;\r
- private readonly bool _delegation;\r
-\r
- private readonly GSSContext _context;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public Krb5Helper(string name, string clientName, Subject subject, AuthenticationTypes authenticationTypes, string mech)\r
- {\r
- _encryption = (authenticationTypes & AuthenticationTypes.Sealing) != 0;\r
- _signing = (authenticationTypes & AuthenticationTypes.Signing) != 0;\r
- _delegation = (authenticationTypes & AuthenticationTypes.Delegation) != 0;\r
-\r
- CreateContextPrivilegedAction action = new CreateContextPrivilegedAction (name, clientName, mech,_encryption,_signing,_delegation);\r
- try {\r
- _context = (GSSContext) Subject.doAs (subject,action);\r
- }\r
- catch (PrivilegedActionException e) {\r
- throw new LdapException ("Problem performing token exchange with the server",LdapException.OTHER,"",e.getCause()); \r
- }\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- internal GSSContext Context\r
- {\r
- get { return _context; }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public sbyte [] ExchangeTokens(sbyte [] clientToken)\r
- {\r
- if (Context.isEstablished ()) {\r
- if (clientToken == null || clientToken.Length == 0)\r
- return Krb5Helper.EmptyToken;\r
-\r
- //final handshake\r
- byte [] challengeData = (byte []) TypeUtils.ToByteArray (clientToken);\r
- byte [] gssOutToken = Unwrap (challengeData, 0, challengeData.Length, new MessageProp (false));\r
-\r
- QOP myCop = QOP.NO_PROTECTION;\r
-\r
- if (_encryption)\r
- myCop = QOP.PRIVACY_PROTECTION;\r
- else if (_signing || (((QOP)gssOutToken [0] & QOP.INTEGRITY_ONLY_PROTECTION) != 0))\r
- myCop = QOP.INTEGRITY_ONLY_PROTECTION;\r
-\r
- if ((myCop & (QOP)gssOutToken [0]) == 0)\r
- throw new LdapException ("Server does not support the requested security level", 80, "");\r
-\r
- int srvMaxBufSize = SecureStream.NetworkByteOrderToInt (gssOutToken, 1, 3);\r
-\r
- //int rawSendSize = Context.getWrapSizeLimit(0, _encryption, srvMaxBufSize);\r
-\r
- byte [] gssInToken = new byte [4];\r
- gssInToken [0] = (byte) myCop;\r
-\r
- SecureStream.IntToNetworkByteOrder (srvMaxBufSize, gssInToken, 1, 3);\r
-\r
- gssOutToken = Wrap (gssInToken, 0, gssInToken.Length, new MessageProp (true));\r
-\r
- return TypeUtils.ToSByteArray (gssOutToken);\r
- }\r
-\r
- sbyte [] token = Context.initSecContext (clientToken, 0, clientToken.Length);\r
-\r
- if (Context.isEstablished ()) {\r
- \r
- if (Context.getConfState () != _encryption)\r
- throw new LdapException ("Encryption protocol was not established layer between client and server", 80, "");\r
- \r
- if (Context.getCredDelegState () != _delegation) \r
- throw new LdapException ("Credential delegation was not established layer between client and server", 80, "");\r
- \r
- if (_signing && (Context.getIntegState () != _signing))\r
- throw new LdapException ("Signing protocol was not established layer between client and server", 80, "");\r
- \r
- if (token == null) \r
- return EmptyToken;\r
- }\r
- return token;\r
- }\r
-\r
- public byte [] Wrap(byte [] outgoing, int start, int len) \r
- {\r
- return Wrap (outgoing, start, len, new MessageProp(true));\r
- }\r
-\r
- public byte [] Wrap(byte [] outgoing, int start, int len, MessageProp messageProp)\r
- {\r
- if (!Context.isEstablished ())\r
- throw new LdapException ("GSSAPI authentication not completed",LdapException.OTHER,"");\r
-\r
- if (!(Context.getConfState () || Context.getIntegState ())) {\r
- // in the case no encryption and no integrity required - return the original data\r
- byte [] buff = new byte [len];\r
- Array.Copy (outgoing, start, buff, 0, len);\r
- return buff;\r
- }\r
-\r
- sbyte [] result = Context.wrap (TypeUtils.ToSByteArray (outgoing), start, len, messageProp);\r
- return (byte []) TypeUtils.ToByteArray (result);\r
- }\r
-\r
- public byte [] Unwrap(byte [] incoming, int start, int len) \r
- {\r
- return Unwrap (incoming, start, len, new MessageProp(true));\r
- }\r
-\r
- public byte [] Unwrap(byte [] incoming, int start, int len, MessageProp messageProp)\r
- {\r
- if (!Context.isEstablished ())\r
- throw new LdapException ("GSSAPI authentication not completed",LdapException.OTHER,"");\r
-\r
- if (!(Context.getConfState () || Context.getIntegState ())) {\r
- // in the case no encryption and no integrity required - return the original data\r
- byte [] buff = new byte [len];\r
- Array.Copy (incoming, start, buff, 0, len);\r
- return buff;\r
- }\r
-\r
- sbyte [] result = Context.unwrap (TypeUtils.ToSByteArray (incoming), start, len, messageProp);\r
- return (byte []) TypeUtils.ToByteArray (result);\r
- }\r
-\r
- #endregion // Methods\r
-\r
- #region IDisposable Members\r
-\r
- public void Dispose() {\r
- Context.dispose();\r
- }\r
-\r
- #endregion\r
- }\r
-}\r
+++ /dev/null
-// \r
-// Novell.Directory.Ldap.Security.SecureStream.cs\r
-//\r
-// Authors:\r
-// Boris Kirzner <borsk@mainsoft.com>\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using System.IO;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class SecureStream : Stream\r
- {\r
- #region Fields\r
-\r
- private readonly Stream _stream;\r
- private readonly Krb5Helper _helper;\r
-\r
- private readonly byte [] _lenBuf = new byte [4]; \r
- private byte [] _buffer;\r
- private int _bufferPosition;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public SecureStream(Stream stream, Krb5Helper helper): base () \r
- {\r
- _stream = stream;\r
- _helper = helper;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public override bool CanRead \r
- { \r
- get { return _stream.CanRead; }\r
- }\r
-\r
- public override bool CanSeek \r
- { \r
- get { return _stream.CanSeek; } \r
- }\r
-\r
- public override bool CanWrite \r
- { \r
- get { return _stream.CanWrite; } \r
- }\r
-\r
- public override long Length \r
- { \r
- get { throw new NotSupportedException (); } \r
- }\r
-\r
- public override long Position \r
- { \r
- get { throw new NotSupportedException (); }\r
- set { throw new NotSupportedException (); }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public override void Flush()\r
- {\r
- _stream.Flush ();\r
- }\r
-\r
- public override int Read( byte [] buffer, int offset, int count)\r
- {\r
- if (_buffer == null || _bufferPosition >= _buffer.Length) {\r
- int actual = Fill ();\r
- while (actual == 0)\r
- actual = Fill ();\r
-\r
- if (actual == -1)\r
- return -1; \r
- }\r
-\r
- int available = _buffer.Length - _bufferPosition;\r
- if (count > available) {\r
- Array.Copy (_buffer, _bufferPosition, buffer, offset, available);\r
- _bufferPosition = _buffer.Length;\r
- return available;\r
- }\r
- else {\r
- Array.Copy (_buffer, _bufferPosition, buffer, offset, count);\r
- _bufferPosition += count;\r
- return count;\r
- } \r
- }\r
-\r
- public override void Close() {\r
- _stream.Close();\r
- _helper.Dispose();\r
- }\r
-\r
- private int Fill()\r
- {\r
- int actual = ReadAll (_lenBuf, 4);\r
- \r
- if (actual != 4) \r
- return -1;\r
-\r
- int length = NetworkByteOrderToInt (_lenBuf, 0, 4);\r
-\r
-// if (length > _recvMaxBufSize)\r
-// throw new LdapException(length + " exceeds the negotiated receive buffer size limit: " + _recvMaxBufSize, 80, "");\r
-\r
- byte [] rawBuffer = new byte [length];\r
- actual = ReadAll (rawBuffer, length);\r
-\r
- if (actual != length)\r
- throw new LdapException("Expected to read " + length + " bytes, but get " + actual, 80, "");\r
-\r
- _buffer = _helper.Unwrap (rawBuffer, 0, length);\r
- _bufferPosition = 0;\r
- return _buffer.Length;\r
- }\r
-\r
- private int ReadAll(byte [] buffer, int total)\r
- {\r
- int count = 0;\r
- int pos = 0;\r
- while (total > 0) {\r
- count = _stream.Read (buffer, pos, total);\r
-\r
- if (count == -1)\r
- break;\r
- //return ((pos == 0) ? -1 : pos);\r
-\r
- pos += count;\r
- total -= count;\r
- }\r
- return pos;\r
- }\r
-\r
- public override long Seek(long offset, SeekOrigin loc)\r
- {\r
- return _stream.Seek (offset, loc);\r
- }\r
-\r
- public override void SetLength(long value)\r
- {\r
- _stream.SetLength (value);\r
- }\r
-\r
- public override void Write(byte [] buffer, int offset, int count)\r
- {\r
- // FIXME: use GSSCOntext.getWrapSizeLimit to divide the buffer\r
- // Generate wrapped token \r
- byte [] wrappedToken = _helper.Wrap (buffer, offset, count);\r
- // Write out length\r
- IntToNetworkByteOrder (wrappedToken.Length, _lenBuf, 0, 4);\r
- _stream.Write (_lenBuf, 0, 4);\r
- // Write out wrapped token\r
- _stream.Write (wrappedToken, 0, wrappedToken.Length);\r
- }\r
-\r
- internal static int NetworkByteOrderToInt(byte [] buf, int start, int count) \r
- {\r
- int answer = 0;\r
- for (int i = 0; i < count; i++) {\r
- answer <<= 8;\r
- answer |= ((int)buf [start + i] & 0xff);\r
- }\r
- return answer;\r
- }\r
-\r
- internal static void IntToNetworkByteOrder(int num, byte [] buf, int start, int count) \r
- {\r
- for (int i = count-1; i >= 0; i--) {\r
- buf [start + i] = (byte)(num & 0xff);\r
- num >>= 8;\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//
-// Novell.Directory.Ldap.Security.UnwrapPrivilegedAction.cs
-//
-// Authors:
-// Boris Kirzner <borsk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-using vmw.common;\r
-\r
-using java.security;\r
-using org.ietf.jgss;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class UnwrapPrivilegedAction : PrivilegedAction\r
- {\r
- #region Fields\r
-\r
- private readonly byte [] _buffer;\r
- private readonly int _start;\r
- private readonly int _len;\r
- private readonly GSSContext _context;\r
- private readonly MessageProp _messageProperties;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public UnwrapPrivilegedAction(GSSContext context, byte [] buffer, int start, int len, MessageProp messageProperties)\r
- {\r
- _buffer = buffer;\r
- _start = start;\r
- _len = len;\r
- _context = context;\r
- _messageProperties = messageProperties;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public object run()\r
- {\r
- try { \r
- sbyte [] result = _context.unwrap (TypeUtils.ToSByteArray (_buffer), _start, _len, _messageProperties);\r
- return (byte []) TypeUtils.ToByteArray (result);\r
- }\r
- catch (GSSException e) {\r
- throw new PrivilegedActionException (e);\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//
-// Novell.Directory.Ldap.Security.WrapPrivilegedAction.cs
-//
-// Authors:
-// Boris Kirzner <borsk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-using vmw.common;\r
-\r
-using java.security;\r
-using org.ietf.jgss;\r
-\r
-namespace Novell.Directory.Ldap.Security\r
-{\r
- internal class WrapPrivilegedAction : PrivilegedAction\r
- {\r
- #region Fields\r
-\r
- private readonly byte [] _buffer;\r
- private readonly int _start;\r
- private readonly int _len;\r
- private readonly GSSContext _context;\r
- private readonly MessageProp _messageProperties;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public WrapPrivilegedAction(GSSContext context, byte [] buffer, int start, int len, MessageProp messageProperties)\r
- {\r
- _buffer = buffer;\r
- _start = start;\r
- _len = len;\r
- _context = context;\r
- _messageProperties = messageProperties;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public object run()\r
- {\r
- try {\r
- sbyte [] result = _context.wrap (TypeUtils.ToSByteArray (_buffer), _start, _len, _messageProperties);\r
- return (byte []) TypeUtils.ToByteArray (result);\r
- }\r
- catch (GSSException e) {\r
- throw new PrivilegedActionException (e);\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//\r
-// System.Data.OracleClient.OracleCommand\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Text;\r
-using System.Text.RegularExpressions;\r
-using System.Data;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-using System.Globalization;\r
-\r
-using java.sql;\r
-// Cannot use this because it makes ArrayList ambiguous reference\r
-//using java.util;\r
-#if !USE_DOTNET_REGEXP\r
-using java.util.regex;\r
-#endif\r
-\r
-namespace System.Data.OracleClient {\r
- public sealed class OracleCommand : AbstractDbCommand {\r
-\r
- #region Fields\r
-#if USE_DOTNET_REGEXP \r
- internal static readonly Regex NamedParameterStoredProcedureRegExp = new Regex(@"^\s*{?\s*((?<RETVAL>\:\w+)\s*=\s*)?call\s+(?<PROCNAME>(((\[[^\]]*\])|([^\.\(])*)\s*\.\s*){0,2}(\[[^\]]*\]|((\s*[^\.\(\)\{\}\s])+)))\s*(\(\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)?\s*(,\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)\s*)*\))?\s*}?\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
-#else\r
- internal static readonly Pattern NamedParameterStoredProcedureRegExp = Pattern.compile(@"^\s*\{?\s*(?:(\:\w+)\s*=\s*)?call\s+((?:(?:(?:\[[^\]]*\])|(?:[^\.\(\)\{\}\[\]])*)\s*\.\s*){0,2}(?:\[[^\]]*\]|(?:(?:\s*[^\.\(\)\{\}\[\]])+)))\s*(?:\((.*)\))?\s*\}?\s*$", Pattern.CASE_INSENSITIVE);\r
-#endif\r
- internal static readonly SimpleRegex NamedParameterRegExp = new OracleParamsRegex();\r
-\r
-// internal static readonly int oracleTypeRefCursor = java.sql.Types.OTHER;\r
- \r
- private int _currentParameterIndex = 0;\r
- private ResultSet _currentRefCursor;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- /**\r
- * Initializes a new instance of the OracleCommand class.\r
- * The base constructor initializes all fields to their default values.\r
- * The following table shows initial property values for an instance of SqlCommand.\r
- */\r
- public OracleCommand() : this(null, null, null) {\r
- }\r
-\r
- public OracleCommand(OracleConnection connection) : this(null, connection, null) {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OracleCommand class with the text of the query.\r
- * @param cmdText The text of the query.\r
- */\r
- public OracleCommand(String cmdText) : this(cmdText, null, null) {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OracleCommand class with the text of the query and a SqlConnection.\r
- * @param cmdText The text of the query.\r
- * @param connection A SqlConnection that represents the connection to an instance of SQL Server.\r
- */\r
- public OracleCommand(String cmdText, OracleConnection connection) : this(cmdText, connection, null) {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OracleCommand class with the text of the query, a SqlConnection, and the Transaction.\r
- * @param cmdText The text of the query.\r
- * @param connection A SqlConnection that represents the connection to an instance of SQL Server.\r
- * @param transaction The SqlTransaction in which the OracleCommand executes.\r
- */\r
- public OracleCommand(\r
- String cmdText,\r
- OracleConnection connection,\r
- OracleTransaction transaction)\r
- : base(cmdText, connection, transaction) {\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public new OracleConnection Connection {\r
- get { return (OracleConnection)base.Connection; }\r
- set { base.Connection = (AbstractDBConnection)value; }\r
- }\r
-\r
- public new OracleParameterCollection Parameters {\r
- get { \r
- return (OracleParameterCollection)base.Parameters; \r
- }\r
- }\r
-\r
- public new OracleTransaction Transaction {\r
- get { return (OracleTransaction)base.Transaction; }\r
- set { base.Transaction = (DbTransaction)value; }\r
- }\r
-\r
- protected override bool SkipParameter(DbParameter parameter) {\r
- return ((OracleParameter)parameter).OracleType == OracleType.Cursor;\r
- }\r
-\r
- protected sealed override ResultSet CurrentResultSet {\r
- get { \r
- try {\r
- ResultSet resultSet = base.CurrentResultSet;\r
- \r
- if (resultSet != null) {\r
- return resultSet; \r
- }\r
- return CurrentRefCursor;\r
- }\r
- catch(SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
- }\r
-\r
- private ResultSet CurrentRefCursor {\r
- get {\r
- if (_currentParameterIndex < 0) {\r
- NextRefCursor();\r
- }\r
- if (_currentRefCursor == null && _currentParameterIndex < InternalParameters.Count) {\r
- _currentRefCursor = (ResultSet)((CallableStatement)Statement).getObject(_currentParameterIndex + 1);\r
- }\r
- return _currentRefCursor;\r
- }\r
- }\r
-\r
-#if USE_DOTNET_REGEX\r
- protected override Regex StoredProcedureRegExp\r
-#else\r
- protected override java.util.regex.Pattern StoredProcedureRegExp {\r
-#endif\r
- get { return NamedParameterStoredProcedureRegExp; }\r
- }\r
-\r
- protected override SimpleRegex ParameterRegExp {\r
- get { return NamedParameterRegExp; }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- protected override bool NextResultSet() {\r
- try { \r
- bool hasMoreResults = base.NextResultSet();\r
-\r
- if (hasMoreResults) {\r
- return true;\r
- }\r
- else {\r
- return NextRefCursor();\r
- }\r
- }\r
- catch (SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- private bool NextRefCursor() {\r
- _currentRefCursor = null;\r
- for (_currentParameterIndex++;InternalParameters.Count > _currentParameterIndex;_currentParameterIndex++) {\r
- OracleParameter param = (OracleParameter)InternalParameters[_currentParameterIndex];\r
- if (param.OracleType == OracleType.Cursor && ((param.Direction & ParameterDirection.Output) == ParameterDirection.Output))\r
- return true; \r
- }\r
- return false;\r
- }\r
-\r
- public new OracleDataReader ExecuteReader() {\r
- return (OracleDataReader)ExecuteReader(CommandBehavior.Default);\r
- }\r
-\r
- public new OracleDataReader ExecuteReader(CommandBehavior behavior) {\r
- return (OracleDataReader)base.ExecuteReader(behavior);\r
- }\r
-\r
- public new OracleParameter CreateParameter() {\r
- return (OracleParameter)CreateParameterInternal();\r
- } \r
-\r
- protected sealed override void CheckParameters() {\r
- //TBD\r
- }\r
-\r
- protected override AbstractDbParameter GetUserParameter(string parameterName, IList userParametersList, int userParametersListPosition) {\r
- for(int i=0; i < userParametersList.Count; i++) {\r
- OracleParameter userParameter = (OracleParameter)userParametersList[i];\r
- if (String.Compare(parameterName, userParameter.InternalPlaceholder.Trim(), true, CultureInfo.InvariantCulture) == 0) {\r
- return userParameter;\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- protected override AbstractDbParameter GetReturnParameter (IList userParametersList) {\r
- for(int i=0; i < userParametersList.Count; i++) {\r
- AbstractDbParameter userParameter = (AbstractDbParameter)userParametersList[i];\r
- if (userParameter.Direction == ParameterDirection.ReturnValue) {\r
- return userParameter;\r
- }\r
- }\r
-\r
- return null; \r
- }\r
-\r
- protected sealed override DbParameter CreateParameterInternal() {\r
- return new OracleParameter();\r
- }\r
-\r
- protected sealed override DbParameterCollection CreateParameterCollection(AbstractDbCommand parent) {\r
- return new OracleParameterCollection((OracleCommand)parent);\r
- }\r
-\r
- public override object Clone() {\r
- OracleCommand clone = (OracleCommand)base.Clone();\r
- clone._currentParameterIndex = 0;\r
- clone._currentRefCursor = null;\r
- return clone;\r
- }\r
-\r
- protected override void PrepareInternalParameters() {\r
- InternalParameters.Clear();\r
- _currentParameterIndex = -1;\r
- }\r
-\r
- \r
- protected sealed override DbDataReader CreateReader() {\r
- return new OracleDataReader(this);\r
- }\r
-\r
- protected sealed override SystemException CreateException(SQLException e) {\r
- return new OracleException(e,Connection); \r
- }\r
-\r
- public object ExecuteOracleScalar() {\r
- throw new NotImplementedException();\r
- }\r
-\r
-#if SUPPORT_ORACLE_TYPES\r
- public int ExecuteOracleNonQuery(\r
- out OracleString rowid\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-#endif\r
-\r
- #endregion // Methods\r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.OracleClient.OracleConnection\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-\r
-using System.Data;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-using System.Collections;\r
-\r
-using java.sql;\r
-\r
-using System.Configuration;\r
-using Mainsoft.Data.Configuration;\r
-using Mainsoft.Data.Jdbc.Providers;\r
-\r
-namespace System.Data.OracleClient {\r
- public sealed class OracleConnection : AbstractDBConnection, System.ICloneable {\r
- #region Events\r
-\r
- public event OracleInfoMessageEventHandler InfoMessage;\r
-\r
- #endregion // Events\r
- \r
- #region Constructors\r
-\r
- public OracleConnection() : this(null) {\r
- }\r
-\r
- public OracleConnection(String connectionString) : base(connectionString) { \r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- protected override IConnectionProvider GetConnectionProvider() {\r
- IDictionary conProviderDict = ConnectionStringDictionary.Parse(ConnectionString);\r
- string provider = (string)conProviderDict["Provider"];\r
- if (provider == null)\r
- provider = "ORACLECLIENT";\r
-\r
- return GetConnectionProvider("Mainsoft.Data.Configuration/OracleClientProviders", provider);\r
- }\r
-\r
- public new OracleTransaction BeginTransaction(IsolationLevel level) {\r
- return new OracleTransaction(level, this);\r
- }\r
-\r
- public new OracleTransaction BeginTransaction() {\r
- return BeginTransaction(IsolationLevel.ReadCommitted);\r
- }\r
-\r
- public new OracleCommand CreateCommand() {\r
- return new OracleCommand(this);\r
- }\r
-\r
- protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) {\r
- return BeginTransaction();\r
- }\r
-\r
- protected override DbCommand CreateDbCommand() {\r
- return CreateCommand();\r
- }\r
-\r
- protected sealed override SystemException CreateException(SQLException e) {\r
- return new OracleException(e,this); \r
- }\r
-\r
- protected sealed override SystemException CreateException(string message) {\r
- return new OracleException(message, null, this); \r
- }\r
-\r
- protected sealed override void OnSqlWarning(SQLWarning warning) {\r
- OracleErrorCollection col = new OracleErrorCollection(warning, this);\r
- OnOracleInfoMessage(new OracleInfoMessageEventArgs(col));\r
- }\r
-\r
- private void OnOracleInfoMessage (OracleInfoMessageEventArgs value) {
- if (InfoMessage != null) {
- InfoMessage (this, value);
- }
- }\r
-\r
- #endregion // Methods\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.Oracle.OracleConvert\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.OracleClient {\r
- #region oracle.sql.Types constants\r
-\r
- internal enum JavaSqlTypes {\r
- ARRAY = 2003 ,\r
- BIGINT = -5, \r
- BINARY = -2 ,\r
- BIT = -7 ,\r
- BLOB = 2004, \r
- BOOLEAN = 16, \r
- CHAR = 1, \r
- CLOB = 2005, \r
- DATALINK = 70, \r
- DATE = 91, \r
- DECIMAL = 3, \r
- DISTINCT = 2001, \r
- DOUBLE = 8, \r
- FLOAT = 6, \r
- INTEGER = 4, \r
- JAVA_OBJECT = 2000, \r
- LONGVARBINARY = -4,\r
- LONGVARCHAR = -1, \r
- NULL = 0, \r
- NUMERIC = 2 ,\r
- OTHER = 1111 ,\r
- REAL = 7 ,\r
- REF = 2006 ,\r
- SMALLINT = 5,\r
- STRUCT = 2002, \r
- TIME = 92, \r
- TIMESTAMP = 93, \r
- TINYINT = -6, \r
- VARBINARY = -3, \r
- VARCHAR = 12,\r
-\r
- //ORACLE types, see oracle.jdbc.OracleTypes\r
- BINARY_FLOAT = 100,\r
- BINARY_DOUBLE = 101,\r
- ROWID = -8,\r
- CURSOR = -10,\r
- TIMESTAMPNS = -100,\r
- TIMESTAMPTZ = -101,\r
- TIMESTAMPLTZ = -102,\r
- INTERVALYM = -103,\r
- INTERVALDS = -104,\r
- }\r
-\r
- #endregion\r
- sealed class OracleConvert : DbConvert {\r
-\r
- #region .Net types constants\r
-\r
- internal static readonly Type TypeOfBoolean = typeof(Boolean);\r
- internal static readonly Type TypeOfSByte = typeof(SByte);\r
- internal static readonly Type TypeOfChar = typeof(Char);\r
- internal static readonly Type TypeOfInt16 = typeof(Int16);\r
- internal static readonly Type TypeOfInt32 = typeof(Int32);\r
- internal static readonly Type TypeOfInt64 = typeof(Int64);\r
- internal static readonly Type TypeOfByte = typeof(Byte);\r
- internal static readonly Type TypeOfUInt16 = typeof(UInt16);\r
- internal static readonly Type TypeOfUInt32 = typeof(UInt32);\r
- internal static readonly Type TypeOfUInt64 = typeof(UInt64);\r
- internal static readonly Type TypeOfDouble = typeof(Double);\r
- internal static readonly Type TypeOfSingle = typeof(Single);\r
- internal static readonly Type TypeOfDecimal = typeof(Decimal);\r
- internal static readonly Type TypeOfString = typeof(String);\r
- internal static readonly Type TypeOfDateTime = typeof(DateTime); \r
- internal static readonly Type TypeOfObject = typeof(object);\r
- internal static readonly Type TypeOfGuid = typeof(Guid);\r
- internal static readonly Type TypeOfType = typeof(Type);\r
-\r
- // additional types\r
- internal static readonly Type TypeOfByteArray = typeof(Byte[]);\r
- internal static readonly Type TypeOfCharArray = typeof(Char[]);\r
- internal static readonly Type TypeOfFloat = typeof (float);\r
- internal static readonly Type TypeOfTimespan = typeof (TimeSpan);\r
- static readonly Type TypeOfIDataReader = typeof(IDataReader);\r
-\r
- #endregion\r
-\r
- #region Methods\r
-\r
- internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName) {\r
- return jdbcTypeName.Trim();;\r
- }\r
-\r
- internal static OracleType JdbcTypeToOracleType(int jdbcType) {\r
- switch ((JavaSqlTypes)jdbcType) {\r
- case JavaSqlTypes.ARRAY: return OracleType.Blob;\r
- case JavaSqlTypes.BIGINT: return OracleType.Number;\r
- case JavaSqlTypes.BINARY: return OracleType.Blob;\r
- case JavaSqlTypes.BIT: return OracleType.Byte;\r
- case JavaSqlTypes.BLOB: return OracleType.Blob;\r
- case JavaSqlTypes.BOOLEAN: return OracleType.Byte;\r
- case JavaSqlTypes.CHAR: return OracleType.Char;\r
- case JavaSqlTypes.CLOB: return OracleType.Clob;\r
-// case JavaSqlTypes.DATALINK: return OracleType.IUnknown;\r
- case JavaSqlTypes.DATE: return OracleType.DateTime;\r
- case JavaSqlTypes.DECIMAL: return OracleType.Number;\r
-// case JavaSqlTypes.DISTINCT: return OracleType.IUnknown; \r
- case JavaSqlTypes.DOUBLE: return OracleType.Double;\r
- case JavaSqlTypes.FLOAT: return OracleType.Float;\r
- case JavaSqlTypes.INTEGER: return OracleType.Int32;\r
-// case JavaSqlTypes.JAVA_OBJECT: return OracleType.IUnknown;\r
- case JavaSqlTypes.LONGVARBINARY: return OracleType.LongRaw;\r
- case JavaSqlTypes.LONGVARCHAR: return OracleType.LongVarChar;\r
-// case JavaSqlTypes.NULL: return OracleType.Empty;\r
- case JavaSqlTypes.NUMERIC: return OracleType.Number;\r
-// case JavaSqlTypes.OTHER: return OracleType.IUnknown;\r
-// case JavaSqlTypes.REAL: return OracleType.Single;\r
-// case JavaSqlTypes.REF: return OracleType.IUnknown;\r
- case JavaSqlTypes.SMALLINT: return OracleType.Int16;\r
-// case JavaSqlTypes.STRUCT: return OracleType.IUnknown;\r
- case JavaSqlTypes.TIME: return OracleType.TimestampLocal;\r
- case JavaSqlTypes.TIMESTAMP: return OracleType.Timestamp;\r
- case JavaSqlTypes.TINYINT: return OracleType.Byte;\r
- case JavaSqlTypes.VARBINARY: return OracleType.LongVarChar;\r
- default:\r
- case JavaSqlTypes.VARCHAR: return OracleType.VarChar;\r
-\r
- case JavaSqlTypes.BINARY_FLOAT: return OracleType.Float;\r
- case JavaSqlTypes.BINARY_DOUBLE: return OracleType.Double;\r
- case JavaSqlTypes.ROWID: return OracleType.RowId;\r
- case JavaSqlTypes.CURSOR: return OracleType.Cursor;\r
- case JavaSqlTypes.TIMESTAMPNS: return OracleType.Timestamp;\r
- case JavaSqlTypes.TIMESTAMPTZ: return OracleType.TimestampWithTZ;\r
- case JavaSqlTypes.TIMESTAMPLTZ: return OracleType.TimestampLocal; \r
- case JavaSqlTypes.INTERVALYM: return OracleType.IntervalYearToMonth;\r
- case JavaSqlTypes.INTERVALDS: return OracleType.IntervalDayToSecond;\r
- }\r
- }\r
-\r
- internal static OracleType ValueTypeToOracleType(Type type) {\r
- switch (Type.GetTypeCode(type)) {\r
- case TypeCode.Boolean: return OracleType.Byte;\r
- case TypeCode.Byte: return OracleType.Byte;\r
- case TypeCode.Char: return OracleType.Char;\r
- case TypeCode.DateTime: return OracleType.DateTime;\r
-// case TypeCode.DBNull: return OracleType.Empty;\r
- case TypeCode.Decimal: return OracleType.Number;\r
- case TypeCode.Double: return OracleType.Double;\r
-// case TypeCode.Empty: return OracleType.Empty;\r
- case TypeCode.Int16: return OracleType.Int16;\r
- case TypeCode.Int32: return OracleType.Int32;\r
- case TypeCode.Int64: return OracleType.Number;\r
- default:\r
- case TypeCode.Object: {\r
- if (type.Equals(TypeOfByteArray)) return OracleType.Blob;\r
- if (type.Equals(TypeOfTimespan)) return OracleType.Timestamp;\r
- if (type.IsSubclassOf(TypeOfIDataReader)) return OracleType.Cursor;\r
-// if (type.Equals(DbTypes.TypeOfGuid)) return OracleType.Guid;\r
-//\r
- if (type.IsEnum)\r
- return ValueTypeToOracleType (Enum.GetUnderlyingType (type));\r
-//\r
- return OracleType.VarChar;\r
- }\r
- case TypeCode.SByte: return OracleType.SByte;\r
- case TypeCode.Single: return OracleType.Float;\r
- case TypeCode.String: return OracleType.VarChar;\r
- case TypeCode.UInt16: return OracleType.UInt16;\r
- case TypeCode.UInt32: return OracleType.UInt32;\r
- case TypeCode.UInt64: return OracleType.Number;\r
- }\r
- }\r
-\r
- internal static Type OracleTypeToValueType(OracleType oleDbType) {\r
- switch (oleDbType) {\r
-// case OracleType.BigInt : return DbTypes.TypeOfInt64;// typeof(long);\r
-// case OracleType.Binary : return DbTypes.TypeOfByteArray;\r
-// case OracleType.Boolean : return DbTypes.TypeOfBoolean;\r
-// case OracleType.BSTR : return DbTypes.TypeOfString;\r
- case OracleType.BFile : return TypeOfByteArray;\r
- case OracleType.Blob : return TypeOfByteArray;\r
- case OracleType.Byte : return TypeOfByte;\r
- case OracleType.Char : return TypeOfString;\r
- case OracleType.Clob : return TypeOfCharArray;\r
- case OracleType.Cursor : return TypeOfIDataReader;\r
- case OracleType.DateTime : return TypeOfDateTime;\r
-// case OracleType.Currency : return TypeOfDecimal;\r
-// case OracleType.Date : return TypeOfDateTime;\r
-// case OracleType.DBDate : return TypeOfDateTime;\r
-// case OracleType.DBTime : return TypeOfTimespan;\r
-// case OracleType.DBTimeStamp : return TypeOfDateTime;\r
-// case OracleType.Decimal : return TypeOfDecimal;\r
- case OracleType.Double : return TypeOfDouble;\r
- case OracleType.Float : return TypeOfFloat;\r
- case OracleType.Int16 : return TypeOfInt16;\r
- case OracleType.Int32 : return TypeOfInt32;\r
- case OracleType.IntervalDayToSecond : return TypeOfTimespan;\r
- case OracleType.IntervalYearToMonth : return TypeOfInt32;\r
- case OracleType.LongRaw : return TypeOfByteArray;\r
-// case OracleType.Empty : return null; //typeof(DBNull);\r
-// case OracleType.Error : return typeof(Exception);\r
-// case OracleType.Filetime : return TypeOfDateTime;\r
-// case OracleType.Guid : return TypeOfGuid;\r
-// case OracleType.IDispatch : return TypeOfObject;\r
-// case OracleType.Integer : return TypeOfInt32;\r
-// case OracleType.IUnknown : return TypeOfObject;\r
-// case OracleType.LongVarBinary : return TypeOfByteArray;\r
- case OracleType.LongVarChar : return TypeOfString;\r
- case OracleType.NChar : return TypeOfString;\r
- case OracleType.NClob : return TypeOfString;\r
- case OracleType.Number : return TypeOfDecimal;\r
- case OracleType.NVarChar : return TypeOfString;\r
- case OracleType.Raw : return TypeOfByteArray;\r
-\r
- case OracleType.RowId : return TypeOfString;\r
- case OracleType.SByte : return TypeOfSByte;\r
- case OracleType.Timestamp : return TypeOfTimespan;\r
- case OracleType.TimestampLocal : return TypeOfTimespan;\r
- case OracleType.TimestampWithTZ : return TypeOfTimespan;\r
- case OracleType.UInt16 : return TypeOfUInt16;\r
-\r
- case OracleType.UInt32 : return TypeOfUInt32;\r
- case OracleType.VarChar : return TypeOfString;\r
-// case OracleType.LongVarWChar : return TypeOfString;\r
-// case OracleType.Numeric : return TypeOfDecimal;\r
-// case OracleType.PropVariant : return TypeOfObject;\r
-// case OracleType.Single : return TypeOfFloat;\r
-// case OracleType.SmallInt : return TypeOfInt16;\r
-// case OracleType.TinyInt : return TypeOfSByte;\r
-// case OracleType.UnsignedBigInt : return TypeOfUInt64;\r
-// case OracleType.UnsignedInt : return TypeOfUInt32;\r
-// case OracleType.UnsignedSmallInt : return TypeOfUInt16;\r
-// case OracleType.UnsignedTinyInt : return TypeOfByte;\r
-// case OracleType.VarBinary : return TypeOfByteArray;\r
-// case OracleType.VarChar : return TypeOfString;\r
-// case OracleType.Variant : return TypeOfObject;\r
-// case OracleType.VarNumeric : return TypeOfDecimal;\r
-// case OracleType.VarWChar : return TypeOfString;\r
-// case OracleType.WChar : return TypeOfString;\r
- default : return TypeOfObject;\r
- }\r
- }\r
-\r
- internal static OracleType DbTypeToOracleType(DbType dbType) {\r
- switch (dbType) {\r
- case DbType.AnsiString : return OracleType.VarChar;\r
- case DbType.Binary : return OracleType.Blob;\r
- case DbType.Byte : return OracleType.Byte;\r
- case DbType.Boolean : return OracleType.Byte;\r
- case DbType.Currency : return OracleType.Number;\r
- case DbType.Date : return OracleType.DateTime;\r
- case DbType.DateTime : return OracleType.DateTime;\r
- case DbType.Decimal : return OracleType.Number;\r
- case DbType.Double : return OracleType.Double;\r
- case DbType.Guid : return OracleType.Char;\r
- case DbType.Int16 : return OracleType.Int16;\r
- case DbType.Int32 : return OracleType.Int32;\r
- case DbType.Int64 : return OracleType.Number;\r
- case DbType.Object : return OracleType.Cursor;\r
- case DbType.SByte : return OracleType.SByte;\r
- case DbType.Single : return OracleType.Float;\r
- case DbType.String : return OracleType.VarChar;\r
- case DbType.Time : return OracleType.Timestamp;\r
- case DbType.UInt16 : return OracleType.UInt16;\r
- case DbType.UInt32 : return OracleType.UInt32;\r
- case DbType.UInt64 : return OracleType.Number;\r
- case DbType.VarNumeric : return OracleType.Number;\r
- case DbType.AnsiStringFixedLength : return OracleType.NChar;\r
- case DbType.StringFixedLength : return OracleType.Char;\r
- default : throw ExceptionHelper.InvalidDbType((int)dbType);\r
- }\r
- }\r
-\r
- internal static DbType OracleTypeToDbType(OracleType oleDbType) {\r
- switch (oleDbType) {\r
- case OracleType.BFile : return DbType.Binary;\r
- case OracleType.Blob : return DbType.Binary;\r
- case OracleType.Byte : return DbType.Byte;\r
- case OracleType.Char : return DbType.StringFixedLength;\r
- case OracleType.Clob : return DbType.String;\r
- case OracleType.Cursor : return DbType.Object;\r
- case OracleType.DateTime : return DbType.DateTime;\r
- case OracleType.Double : return DbType.Double;\r
- case OracleType.Float : return DbType.Single;\r
- case OracleType.Int16 : return DbType.Int16;\r
- case OracleType.Int32 : return DbType.Int32;\r
- case OracleType.IntervalDayToSecond : return DbType.Time;\r
- case OracleType.IntervalYearToMonth : return DbType.Int32;\r
- case OracleType.LongRaw : return DbType.Binary;\r
- case OracleType.LongVarChar : return DbType.String;\r
- case OracleType.NChar : return DbType.AnsiStringFixedLength;\r
- case OracleType.NClob : return DbType.AnsiString;\r
- case OracleType.Number : return DbType.VarNumeric;\r
- case OracleType.NVarChar : return DbType.AnsiString;\r
- case OracleType.Raw : return DbType.Binary;\r
-\r
- case OracleType.RowId : return DbType.AnsiStringFixedLength;\r
- case OracleType.SByte : return DbType.SByte;\r
- case OracleType.Timestamp : return DbType.Time;\r
- case OracleType.TimestampLocal : return DbType.Time;\r
- case OracleType.TimestampWithTZ : return DbType.Time;\r
- case OracleType.UInt16 : return DbType.UInt16;\r
-\r
- case OracleType.UInt32 : return DbType.UInt32;\r
- case OracleType.VarChar : return DbType.String;\r
-// case OracleType.Empty : return DbType.Object;\r
-// case OracleType.SmallInt : return DbType.Int16;\r
-// case OracleType.Integer : return DbType.Int32;\r
-// case OracleType.Single : return DbType.Single;\r
-// case OracleType.Double : return DbType.Double;\r
-// case OracleType.Currency : return DbType.Currency;\r
-// case OracleType.Date : return DbType.DateTime;\r
-// case OracleType.BSTR : return DbType.String;\r
-// case OracleType.IDispatch : return DbType.Object;\r
-// case OracleType.Error : return DbType.Object;\r
-// case OracleType.Boolean : return DbType.Boolean;\r
-// case OracleType.Variant : return DbType.Object;\r
-// case OracleType.IUnknown : return DbType.Object;\r
-// case OracleType.Decimal : return DbType.Decimal;\r
-// case OracleType.TinyInt : return DbType.SByte;\r
-// case OracleType.UnsignedTinyInt : return DbType.Byte;\r
-// case OracleType.UnsignedSmallInt : return DbType.UInt16;\r
-// case OracleType.UnsignedInt : return DbType.UInt32;\r
-// case OracleType.BigInt : return DbType.Int64;\r
-// case OracleType.UnsignedBigInt : return DbType.UInt64;\r
-// case OracleType.Filetime : return DbType.DateTime;\r
-// case OracleType.Guid : return DbType.Guid;\r
-// case OracleType.Binary : return DbType.Binary;\r
-// case OracleType.Char : return DbType.AnsiStringFixedLength;\r
-// case OracleType.WChar : return DbType.StringFixedLength;\r
-// case OracleType.Numeric : return DbType.Decimal;\r
-// case OracleType.DBDate : return DbType.Date;\r
-// case OracleType.DBTime : return DbType.Time;\r
-// case OracleType.DBTimeStamp : return DbType.DateTime;\r
-// case OracleType.PropVariant : return DbType.Object;\r
-// case OracleType.VarNumeric : return DbType.VarNumeric;\r
-// case OracleType.VarChar : return DbType.AnsiString;\r
-// case OracleType.LongVarChar : return DbType.AnsiString;\r
-// case OracleType.VarWChar : return DbType.String;\r
-// case OracleType.LongVarWChar : return DbType.String;\r
-// case OracleType.VarBinary : return DbType.Binary;\r
-// case OracleType.LongVarBinary : return DbType.Binary;\r
- default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
- }\r
- }\r
-\r
- internal static int OracleTypeToJdbcType(OracleType oleDbType) {\r
- switch(oleDbType) {\r
- case OracleType.BFile : return (int)JavaSqlTypes.BINARY;\r
- case OracleType.Blob : return (int)JavaSqlTypes.BINARY;\r
- case OracleType.Byte : return (int)JavaSqlTypes.TINYINT;\r
- case OracleType.Char : return (int)JavaSqlTypes.CHAR;\r
- case OracleType.Clob : return (int)JavaSqlTypes.CLOB;\r
- case OracleType.Cursor : return (int)JavaSqlTypes.CURSOR;\r
- case OracleType.DateTime : return (int)JavaSqlTypes.TIMESTAMP;\r
- case OracleType.Double : return (int)JavaSqlTypes.DOUBLE;\r
- case OracleType.Float : return (int)JavaSqlTypes.FLOAT;\r
- case OracleType.Int16 : return (int)JavaSqlTypes.SMALLINT;\r
- case OracleType.Int32 : return (int)JavaSqlTypes.INTEGER;\r
- case OracleType.IntervalDayToSecond : return (int)JavaSqlTypes.INTERVALDS;\r
- case OracleType.IntervalYearToMonth : return (int)JavaSqlTypes.INTERVALYM;\r
- case OracleType.LongRaw : return (int)JavaSqlTypes.LONGVARBINARY;\r
- case OracleType.LongVarChar : return (int)JavaSqlTypes.LONGVARCHAR;\r
- case OracleType.NChar : return (int)JavaSqlTypes.CHAR;\r
- case OracleType.NClob : return (int)JavaSqlTypes.CLOB;\r
- case OracleType.Number : return (int)JavaSqlTypes.NUMERIC;\r
- case OracleType.NVarChar : return (int)JavaSqlTypes.VARCHAR;\r
- case OracleType.Raw : return (int)JavaSqlTypes.BINARY;\r
-\r
- case OracleType.RowId : return (int)JavaSqlTypes.VARCHAR;\r
- case OracleType.SByte : return (int)JavaSqlTypes.TINYINT;\r
- case OracleType.Timestamp : return (int)JavaSqlTypes.TIMESTAMP;\r
- case OracleType.TimestampLocal : return (int)JavaSqlTypes.TIMESTAMP;\r
- case OracleType.TimestampWithTZ : return (int)JavaSqlTypes.TIMESTAMP;\r
- case OracleType.UInt16 : return (int)JavaSqlTypes.SMALLINT;\r
-\r
- case OracleType.UInt32 : return (int)JavaSqlTypes.INTEGER;\r
- case OracleType.VarChar : return (int)JavaSqlTypes.VARCHAR;\r
-// case OracleType.BigInt : return Types.BIGINT;\r
-// case OracleType.Binary : return Types.BINARY;\r
-// case OracleType.Boolean : return Types.BIT;\r
-// case OracleType.BSTR : return Types.VARCHAR;\r
-// case OracleType.Char : return Types.CHAR;\r
-// case OracleType.Currency : return Types.DECIMAL;\r
-// case OracleType.Date : return Types.TIMESTAMP;\r
-// case OracleType.DBDate : return Types.DATE;\r
-// case OracleType.DBTime : return Types.TIME;\r
-// case OracleType.DBTimeStamp : return Types.TIMESTAMP;\r
-// case OracleType.Decimal : return Types.DECIMAL;\r
-// case OracleType.Double : return Types.DOUBLE;\r
-// case OracleType.Empty : return Types.NULL;\r
-// case OracleType.Error : return Types.OTHER;\r
-// case OracleType.Filetime : return Types.TIMESTAMP;\r
-// case OracleType.Guid : return Types.CHAR;\r
-// case OracleType.IDispatch : return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OracleType value is not supported.");\r
-// case OracleType.Integer : return Types.INTEGER;\r
-// case OracleType.IUnknown : return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OracleType value is not supported.");\r
-// case OracleType.LongVarBinary : return Types.LONGVARBINARY;\r
-// case OracleType.LongVarChar : return Types.LONGVARCHAR;\r
-// case OracleType.LongVarWChar : return Types.LONGVARCHAR;\r
-// case OracleType.Numeric : return Types.NUMERIC;\r
-// case OracleType.PropVariant : return Types.OTHER;\r
-// case OracleType.Single : return Types.FLOAT;\r
-// case OracleType.SmallInt : return Types.SMALLINT;\r
-// case OracleType.TinyInt : return Types.TINYINT;\r
-// case OracleType.UnsignedBigInt : return Types.BIGINT;\r
-// case OracleType.UnsignedInt : return Types.INTEGER;\r
-// case OracleType.UnsignedSmallInt : return Types.SMALLINT;\r
-// case OracleType.UnsignedTinyInt : return Types.TINYINT;\r
-// case OracleType.VarBinary : return Types.VARBINARY;\r
-// case OracleType.VarChar : return Types.VARCHAR;\r
-// case OracleType.Variant : return Types.VARCHAR;\r
-// case OracleType.VarNumeric : return Types.DECIMAL;\r
-// case OracleType.VarWChar : return Types.VARCHAR;\r
-// case OracleType.WChar : return Types.VARCHAR;\r
- default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
- }\r
-\r
- #endregion // Methods\r
- }\r
- }\r
-}\r
+++ /dev/null
-//\r
-// System.Data.OracleClient.OracleDataReader\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-//\r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.OracleClient {\r
- public sealed class OracleDataReader : AbstractDataReader {\r
- #region Fields\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- internal OracleDataReader(OracleCommand command) : base(command) {\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- protected sealed override SystemException CreateException(string message, SQLException e) {\r
- return new OracleException(message,e, (OracleConnection)_command.Connection); \r
- }\r
-\r
- protected sealed override SystemException CreateException(java.io.IOException e) {\r
- return new OracleException(e, (OracleConnection)_command.Connection); \r
- }\r
-\r
- public override String GetDataTypeName(int columnIndex) {\r
- try {\r
- string jdbcTypeName = Results.getMetaData().getColumnTypeName(columnIndex + 1);\r
- \r
- return OracleConvert.JdbcTypeNameToDbTypeName(jdbcTypeName);\r
- }\r
- catch (SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- protected override int GetProviderType(int jdbcType) {\r
- return (int)OracleConvert.JdbcTypeToOracleType(jdbcType); \r
- }\r
-\r
- protected override IReaderCacheContainer CreateReaderCacheContainer(int jdbcType, int columnIndex) {\r
- switch ((JavaSqlTypes)jdbcType) {\r
- case JavaSqlTypes.BINARY_FLOAT:\r
- jdbcType = (int)JavaSqlTypes.REAL;\r
- break;\r
- case JavaSqlTypes.BINARY_DOUBLE:\r
- jdbcType = (int)JavaSqlTypes.DOUBLE;\r
- break;\r
- case JavaSqlTypes.ROWID:\r
- jdbcType = (int)JavaSqlTypes.VARCHAR;\r
- break;\r
-// case JavaSqlTypes.CURSOR:\r
-// jdbcType = JavaSqlTypes.OTHER;\r
-// break;\r
- case JavaSqlTypes.TIMESTAMPNS:\r
- jdbcType = (int)JavaSqlTypes.TIMESTAMP;\r
- break;\r
- case JavaSqlTypes.TIMESTAMPTZ:\r
- jdbcType = (int)JavaSqlTypes.TIMESTAMP;\r
- break;\r
- case JavaSqlTypes.TIMESTAMPLTZ: \r
- jdbcType = (int)JavaSqlTypes.TIMESTAMP;\r
- break;\r
- case JavaSqlTypes.INTERVALYM:\r
- jdbcType = (int)JavaSqlTypes.INTEGER;\r
- break;\r
- case JavaSqlTypes.INTERVALDS:\r
- jdbcType = (int)JavaSqlTypes.TIMESTAMP;\r
- break;\r
- }\r
- return base.CreateReaderCacheContainer (jdbcType, columnIndex);\r
- }\r
-\r
-\r
- protected override void SetSchemaType(DataRow schemaRow, ResultSetMetaData metaData, int columnIndex) {\r
- JavaSqlTypes columnType = (JavaSqlTypes)metaData.getColumnType(columnIndex);\r
- switch (columnType) {\r
- case JavaSqlTypes.BINARY_FLOAT:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfFloat;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.BINARY_DOUBLE:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfDouble;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.ROWID:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfString;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.CURSOR:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfDouble;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.TIMESTAMPNS:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfTimespan;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.TIMESTAMPTZ:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfTimespan;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.TIMESTAMPLTZ: \r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfTimespan;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.INTERVALYM:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfUInt32;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- case JavaSqlTypes.INTERVALDS:\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = OracleConvert.TypeOfTimespan;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- default:\r
- base.SetSchemaType(schemaRow, metaData, columnIndex);\r
- break;\r
- }\r
- }\r
-\r
- public override decimal GetDecimal(int i) {\r
- if (IsNumeric(i))\r
- return GetDecimalSafe(i);\r
-\r
- return base.GetDecimal(i);\r
- }\r
-\r
- public override double GetDouble(int i) {\r
- if (IsNumeric(i))\r
- return GetDoubleSafe(i);\r
-\r
- return base.GetDouble(i);\r
- }\r
-\r
- public override float GetFloat(int i) {\r
- if (IsNumeric(i))\r
- return GetFloatSafe(i);\r
-\r
- return base.GetFloat(i);\r
- }\r
-//\r
-// OracleClient does not "excuse" for Int16\r
-//\r
-// public override short GetInt16(int i) {\r
-// if (IsNumeric(i))\r
-// return GetInt16Safe(i);\r
-//\r
-// return base.GetInt16(i);\r
-// }\r
-\r
-\r
- public override int GetInt32(int i) {\r
- if (IsNumeric(i))\r
- return GetInt32Safe(i);\r
-\r
- return base.GetInt32(i);\r
- }\r
-\r
- public override long GetInt64(int i) {\r
- if (IsNumeric(i))\r
- return GetInt64Safe(i);\r
-\r
- return base.GetInt64(i);\r
- }\r
-\r
-#if SUPPORT_ORACLE_TYPES\r
- #region GetOracleXXX\r
-\r
- public OracleBFile GetOracleBFile(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleBinary GetOracleBinary(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleDateTime GetOracleDateTime(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleLob GetOracleLob(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleMonthSpan GetOracleMonthSpan(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleNumber GetOracleNumber(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleString GetOracleString(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public OracleTimeSpan GetOracleTimeSpan(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public object GetOracleValue(\r
- int i\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- public int GetOracleValues(\r
- object[] values\r
- ) {\r
- throw new NotImplementedException();\r
- }\r
-\r
- #endregion\r
-#endif\r
-\r
- #endregion // Methods\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.OleDb.OleDbError\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-namespace System.Data.OracleClient {\r
- using java.sql;\r
- using System.Data.Common;\r
- using System.Data.ProviderBase;\r
-\r
- [Serializable]\r
- internal sealed class OracleError : AbstractDbError {\r
-\r
- internal OracleError(SQLException e, AbstractDBConnection connection) : base(e, connection) {\r
- }\r
- \r
- public String Message {\r
- get {\r
- return DbMessage;\r
- }\r
- }\r
- \r
- public int NativeError {\r
- get {\r
- return DbErrorCode;\r
- }\r
- }\r
- \r
- public String Source {\r
- get {\r
- return DbSource;\r
- }\r
- }\r
- \r
- public String SQLState {\r
- get {\r
- return DbSQLState;\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.OleDb.OleDbErrorCollection\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-namespace System.Data.OracleClient {\r
-\r
-\r
- using System.Collections;\r
- using java.sql;\r
- using System.Data.Common;\r
- using System.Data.ProviderBase;\r
-\r
- [Serializable]\r
- public sealed class OracleErrorCollection : AbstractDbErrorCollection {\r
- internal OracleErrorCollection(SQLException e, AbstractDBConnection connection) : base(e, connection) {\r
- }\r
- /**\r
- * Gets the error at the specified index.\r
- *\r
- * @param index of the error\r
- * @return Error on specified index\r
- */\r
- internal OracleError this[int index] {\r
- get {\r
- return (OracleError)GetDbItem(index);\r
- }\r
- }\r
-\r
- protected override AbstractDbError CreateDbError(SQLException e, AbstractDBConnection connection) {\r
- return new OracleError(e, connection);\r
- }\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.SqlClient.SqlException\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-namespace System.Data.OracleClient {\r
-\r
- using java.sql;\r
-\r
- using System;\r
- using System.Data.ProviderBase;\r
-\r
- /**\r
- * The exception that is thrown when SQL Server returns a warning or error.\r
- * This class cannot be inherited.\r
- */\r
-\r
- /*\r
- * CURRENT LIMITATIONS\r
- * 1. Constructor for serialization SqlException(SerializationInfo info, StreamingContext sc) \r
- * is not supported.\r
- * 2. Method "void GetObjectData(...,...)" is not supported (serialization)\r
- */\r
-\r
- public sealed class OracleException : AbstractDbException {\r
- internal OracleException(Exception cause, OracleConnection connection) : base(cause, connection) {}\r
-\r
- internal OracleException(SQLException cause, OracleConnection connection) : base(cause, connection) {}\r
-\r
- internal OracleException(string message, SQLException cause, OracleConnection connection) : base(message, cause, connection) {}\r
-\r
- protected override AbstractDbErrorCollection DbErrors {\r
- get {\r
- return Errors;\r
- }\r
- }\r
-\r
- \r
-\r
- /**\r
- * Gets the severity level of the error returned from the SQL Server .NET \r
- * Data Provider.\r
- * @return severity level of the first error in the collection.\r
- */\r
-// public byte Class {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].Class : (byte)0;\r
-// }\r
-// }\r
-\r
- /**\r
- * Gets a collection of one or more SqlError objects that give detailed \r
- * information about exceptions generated by the SQL Server .NET Data Provider.\r
- * @return collection of SqlError objects\r
- */\r
- internal OracleErrorCollection Errors {\r
- get {\r
- return new OracleErrorCollection(_cause, _connection);\r
- }\r
- }\r
-\r
- public int Code {\r
- get { return DbErrorCode; }\r
- }\r
-\r
- /**\r
- * Gets the line number within the Transact-SQL command batch or stored \r
- * procedure that generated the error.\r
- * @return line number of the first error in the collection.\r
- */\r
-// public int LineNumber {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].LineNumber : 0;\r
-// }\r
-// }\r
-\r
- /**\r
- * Gets a number that identifies the type of error.\r
- * @return number that identifies the type of first error in the collection\r
- */\r
-// public int Number {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].Number : 0;\r
-// }\r
-// }\r
-\r
- /**\r
- * Gets the name of the stored procedure or remote procedure call (RPC) \r
- * that generated the error.\r
- * @return name of the stored procedure \r
- */\r
-// public String Procedure {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].Procedure : null;\r
-// }\r
-// }\r
-\r
- /**\r
- * Gets the name of the computer running an instance of SQL Server \r
- * that generated the error.\r
- * @return name of the computer where error generated\r
- */\r
-// public String Server {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].Server : null;\r
-// }\r
-// }\r
-\r
-\r
- /**\r
- * Gets a numeric error code from SQL Server that represents an error, \r
- * warning or "no data found" message. \r
- * @return numeric error code from SQL Server\r
- */\r
-// public byte State {\r
-// get {\r
-// SqlErrorCollection errors = Errors;\r
-// return errors.Count > 0 ? errors[0].State : (byte)0;\r
-// }\r
-// }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.OracleClient.OracleParameter\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Text;\r
-using System.Data;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-using System.Globalization;\r
-\r
-using java.sql;\r
-using java.lang;\r
-\r
-namespace System.Data.OracleClient {\r
- public sealed class OracleParameter : AbstractDbParameter, ICloneable {\r
-\r
- #region Fields\r
-\r
- OracleType _oleDbType = OracleType.VarChar;\r
-\r
- #endregion // Fields\r
- \r
- #region Constructors\r
-\r
- public OracleParameter() {\r
- }\r
- \r
- public OracleParameter(String parameterName, Object value)\r
- : this (parameterName, OracleType.VarChar, 0, ParameterDirection.Input,\r
- false, 0, 0, String.Empty, DataRowVersion.Current, value) {\r
- IsDbTypeSet = false;\r
- }\r
- \r
- public OracleParameter(String parameterName, OracleType dbType)\r
- : this (parameterName, dbType, 0, ParameterDirection.Input,\r
- false, 0, 0, String.Empty, DataRowVersion.Current, null) {\r
- }\r
- \r
- public OracleParameter(String parameterName, OracleType dbType, int size)\r
- : this (parameterName, dbType, size, ParameterDirection.Input,\r
- false, 0, 0, String.Empty, DataRowVersion.Current, null) {\r
- }\r
- \r
- public OracleParameter(String parameterName, OracleType dbType, int size,\r
- String sourceColumn)\r
- : this (parameterName, dbType, size, ParameterDirection.Input,\r
- false, 0, 0, sourceColumn, DataRowVersion.Current, null) {\r
- }\r
- \r
- \r
- public OracleParameter(String parameterName, \r
- OracleType dbType, \r
- int size,\r
- ParameterDirection direction, \r
- bool isNullable,\r
- byte precision, \r
- byte scale, \r
- String sourceColumn,\r
- DataRowVersion sourceVersion, \r
- Object value) {\r
- ParameterName = parameterName;\r
- OracleType = dbType;\r
- Size = size;\r
- Direction = direction;\r
- IsNullable = isNullable;\r
- Precision = precision;\r
- Scale = scale;\r
- SourceColumn = sourceColumn;\r
- SourceVersion = sourceVersion;\r
- Value = value;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public override DbType DbType {\r
- get { return OracleConvert.OracleTypeToDbType(_oleDbType); } \r
- set { OracleType = OracleConvert.DbTypeToOracleType(value); }\r
- } \r
- \r
- public OracleType OracleType {\r
- get { return _oleDbType; } \r
- set {\r
- _oleDbType = value;\r
- IsDbTypeSet = true;\r
- }\r
- } \r
- \r
- public new Object Value {\r
- get { return base.Value; }\r
- set {\r
- if (!IsDbTypeSet && (value != null) && (value != DBNull.Value)) {\r
- _oleDbType = OracleConvert.ValueTypeToOracleType(value.GetType());\r
- }\r
- base.Value = value;\r
- }\r
- }\r
-\r
-#if NET_2_0\r
- public new byte Precision {\r
- get { return base.Precision; }\r
- set { base.Precision = value; }\r
- }\r
-\r
- public new byte Scale {\r
- get { return base.Scale; }\r
- set { base.Scale = value; }\r
- }\r
-#endif\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public override String ToString() {\r
- return ParameterName;\r
- }\r
-\r
- protected override string Placeholder {\r
- get {\r
- if (ParameterName.Length == 0 || ParameterName[0] == ':')\r
- return ParameterName;\r
-\r
- return String.Concat(":", ParameterName);\r
- }\r
- }\r
-\r
- internal string InternalPlaceholder {\r
- get {\r
- return Placeholder;\r
- }\r
- }\r
-\r
- protected sealed override object ConvertValue(object value) {\r
- // can not convert null or DbNull to other types\r
- if (value == null || value == DBNull.Value) {\r
- return value;\r
- }\r
-\r
- // TBD : some other way to do this?\r
-// if (OracleType == OracleType.Binary) {\r
-// return value;\r
-// }\r
- // .NET throws an exception to the user.\r
- object convertedValue = value;\r
-\r
- // note : if we set user parameter jdbc type inside prepare interbal, the db type is not set\r
- if (value is IConvertible && (IsDbTypeSet || IsJdbcTypeSet)) {\r
- OracleType oleDbType = (IsDbTypeSet) ? OracleType : OracleConvert.JdbcTypeToOracleType((int)JdbcType);\r
- Type to = OracleConvert.OracleTypeToValueType(oleDbType);\r
- if (!(value is DateTime && to == OracleConvert.TypeOfTimespan)) //anyway will go by jdbc type\r
- convertedValue = Convert.ChangeType(value,to);\r
- }\r
- return convertedValue;\r
- }\r
-\r
- protected sealed override void SetParameterName(ResultSet res) {\r
- ParameterName = res.getString("COLUMN_NAME");\r
- }\r
-\r
- protected sealed override void SetParameterDbType(ResultSet res) {\r
- int jdbcType = res.getInt("DATA_TYPE"); \r
- // FIXME : is that correct?\r
- if (jdbcType == Types.OTHER) {\r
- string typeName = res.getString("TYPE_NAME");\r
- if (String.Compare("REF CURSOR", typeName, true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.CURSOR;\r
- }\r
- else if (String.Compare("BLOB",typeName,true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.BLOB;\r
- }\r
- else if (String.Compare("CLOB",typeName,true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.CLOB;\r
- }\r
- else if(String.Compare("FLOAT",typeName,true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.FLOAT;\r
- }\r
- else if(String.Compare("NVARCHAR2",typeName,true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.VARCHAR;\r
- }\r
- else if(String.Compare("NCHAR",typeName,true, CultureInfo.InvariantCulture) == 0) {\r
- jdbcType = (int)JavaSqlTypes.VARCHAR;\r
- }\r
- }\r
- OracleType = OracleConvert.JdbcTypeToOracleType(jdbcType);\r
- JdbcType = jdbcType;\r
- }\r
-\r
- protected sealed override void SetSpecialFeatures(ResultSet res) {\r
- // do nothing\r
- }\r
-\r
- protected sealed override int JdbcTypeFromProviderType() {\r
- return OracleConvert.OracleTypeToJdbcType(OracleType);\r
- }\r
-\r
- #endregion // Methods\r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.OleDb.OleDbConnection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System;
-using System.Data.Common;
-using System.Data.Configuration;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using Mainsoft.Data.Configuration;
-
-using System.Globalization;
-
-using java.sql;
-using javax.sql;
-using javax.naming;
-
-namespace Mainsoft.Data.Jdbc.Providers
-{
- public class GenericProvider : IConnectionProvider
- {
- #region JdbcUrlConnector
-
- sealed class JdbcUrlConnector {
- #region Consts
-
- private static readonly Regex JdbcUrlPatternRegex= new Regex (@"\$\{(?<VALUE>[^$\{\}]*)\}", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
-
- #endregion // Consts
-
- #region Fields
-
- readonly IConnectionStringDictionary _keyMapper;
- readonly GenericProvider _provider;
- readonly ArrayList _excludedKeys = new ArrayList();
-
- #endregion // Fields
-
- #region Constructors
-
- internal JdbcUrlConnector (GenericProvider provider, IConnectionStringDictionary keyMapper) {
- _provider = provider;
- _keyMapper = keyMapper;
- }
-
- #endregion // Constructors
-
-
- #region Methods
-
- internal java.sql.Connection Connection {
- get {
- java.util.Properties properties = new java.util.Properties ();
-
- string url = (string)_keyMapper["JdbcURL"];
- if (url == null) {
- string jdbcUrlPattern = (string)_provider.ProviderInfo [ConfigurationConsts.JdbcUrlPattern];
- if (jdbcUrlPattern == null || jdbcUrlPattern.Length == 0) {
- //throw ExceptionHelper.JdbcUrlPatternNotFound ((string)_provider.ProviderInfo [ConfigurationConsts.Name]);
- object [] args = new object [] {_provider.ProviderInfo [ConfigurationConsts.Name]};
- throw new ArgumentException (String.Format("Provider '{0}' is not configured with valid JDBC URL pattern.",args));
- }
- MatchEvaluator evaluator = new MatchEvaluator (ReplaceEvaluator);
- url = JdbcUrlPatternRegex.Replace (jdbcUrlPattern, evaluator);
- }
- else {
- // hack for backward comatibility:
- // if the connection string contains 'Provider',
- // the following mapping will hold:
- // 'User', 'User Id' --> 'user'
- // 'Password' --> 'password'
- if (_keyMapper["Provider"] != null) {
-
- const string USER = "User";
- const string USERID = "User Id";
- const string PASSWORD = "Password";
-
- string user = (string)_keyMapper[USER];
- if (user != null) {
- properties.put("user", user);
- _excludedKeys.Add(USER);
- }
- else {
- user = (string)_keyMapper[USERID];
- if (user != null) {
- properties.put("user", user);
- _excludedKeys.Add(USERID);
- }
- }
-
- string password = (string)_keyMapper[PASSWORD];
- if (password != null) {
- properties.put("password", password);
- _excludedKeys.Add(PASSWORD);
- }
- }
- }
-
- if (_provider._excludedKeys != null)
- _excludedKeys.AddRange(_provider._excludedKeys);
-
- foreach(string key in _provider.KeyMapping.Keys) {
- object value = _keyMapper [key];
- if (value == null)
- continue;
- bool contains = false;
- for (int i = 0; i < _excludedKeys.Count; i++) {
- if (String.Compare((string)_excludedKeys[i], key,
- true, CultureInfo.InvariantCulture) == 0) {
- contains = true;
- break;
- }
- }
- if (!contains) {
- properties.put (key, value);
- _excludedKeys.Add(key);
- }
- }
-
- for (int i = 0; i < _excludedKeys.Count; i++) {
- string value = _keyMapper.GetConnectionStringKey((string)_excludedKeys[i]);
- if (value != null)
- _excludedKeys[i] = value;
- }
-
- foreach(string key in _keyMapper.Keys) {
- object value = _keyMapper [key];
- if (value == null)
- continue;
- bool contains = false;
- for (int i = 0; i < _excludedKeys.Count; i++) {
- if (String.Compare((string)_excludedKeys[i], key,
- true, CultureInfo.InvariantCulture) == 0) {
- contains = true;
- break;
- }
- }
- if (!contains) {
- if (_provider._unsupportedKeys != null)
- for (int i = 0; i < _provider._unsupportedKeys.Length; i++)
- if (String.Compare ((string) _provider._unsupportedKeys [i], key,
- true, CultureInfo.InvariantCulture) == 0)
- throw new NotSupportedException (
- String.Format ("The parameter '{0}' is not supported.", key));
-
- properties.put (key, value);
- }
- }
-
- Driver d = ActivateJdbcDriver ();
- // TBD : add DriverManager.setLoginTimeout
- if (d != null)
- return d.connect (url, properties);
-
- return DriverManager.getConnection (url, properties);
- }
- }
-
- private string ReplaceEvaluator (Match m) {
- Group g = m.Groups["VALUE"];
-
- if (!g.Success)
- return String.Empty;
-
- string usedKey = g.Value.Trim();
-
- string value = (string)_keyMapper [usedKey];
- if (value == null)
- throw new ArgumentException(
- String.Format("Missing parameter {0}", g.Value),
- "ConnectionString");
-
- _excludedKeys.Add(usedKey);
- return value;
- }
-
- private Driver ActivateJdbcDriver () {
- string driver = (string) _keyMapper["JdbcDriverClassName"];
- if (driver == null)
- driver = (string) _provider.ProviderInfo [ConfigurationConsts.JdbcDriverClassName];
-
- if (driver != null && driver.Length != 0) {
- try {
- java.lang.ClassLoader contextLoader = (java.lang.ClassLoader) AppDomain.CurrentDomain.GetData ("GH_ContextClassLoader");
- if (contextLoader != null)
- return (Driver) contextLoader.loadClass (driver).newInstance ();
- return (Driver) java.lang.Class.forName (driver).newInstance ();
- }
- catch (java.lang.ClassNotFoundException e) {
- throw new TypeLoadException (e.Message, e);
- }
- catch (java.lang.InstantiationException e) {
- throw new MemberAccessException (e.Message, e);
- }
- catch (java.lang.IllegalAccessException e) {
- throw new MissingMethodException (e.Message, e);
- }
- }
-
- return null;
- }
-
- #endregion // Methods
- }
-
- #endregion // JdbcUrlBuilder
-
- #region DataSourceCache
-
- private sealed class DataSourceCache : AbstractDbMetaDataCache {
- internal DataSource GetDataSource(string dataSourceName,string namingProviderUrl,string namingFactoryInitial) {
- Hashtable cache = Cache;
-
- DataSource ds = cache[dataSourceName] as DataSource;
-
- if (ds != null) {
- return ds;
- }
-
- Context ctx = null;
-
- java.util.Properties properties = new java.util.Properties();
-
- if ((namingProviderUrl != null) && (namingProviderUrl.Length > 0)) {
- properties.put("java.naming.provider.url",namingProviderUrl);
- }
-
- if ((namingFactoryInitial != null) && (namingFactoryInitial.Length > 0)) {
- properties.put("java.naming.factory.initial",namingFactoryInitial);
- }
-
- ctx = new InitialContext(properties);
-
- try {
- ds = (DataSource)ctx.lookup(dataSourceName);
- }
- catch(javax.naming.NameNotFoundException e) {
- // possible that is a Tomcat bug,
- // so try to lookup for jndi datasource with "java:comp/env/" appended
- ds = (DataSource)ctx.lookup("java:comp/env/" + dataSourceName);
- }
-
- cache[dataSourceName] = ds;
- return ds;
- }
- }
-
- #endregion // DatasourceCache
-
- #region Fields
-
- private static DataSourceCache _dataSourceCache = new DataSourceCache();
-
- private readonly IDictionary _providerInfo;
- private NameValueCollection _keyMapping;
- private string[] _excludedKeys;
- private string[] _unsupportedKeys;
-
- #endregion // Fields
-
- #region Constructors
-
- public GenericProvider(IDictionary providerInfo)
- {
- _providerInfo = providerInfo;
- _keyMapping = null;
- }
-
- #endregion // Constructors
-
- #region Properties
-
- protected IDictionary ProviderInfo
- {
- get { return _providerInfo; }
- }
-
- private NameValueCollection KeyMapping
- {
- get
- {
- if (_keyMapping == null)
- InitKeyMapping ();
-
- return _keyMapping;
- }
- }
-
- #endregion // Properties
-
- #region Methods
-
- public virtual java.sql.Connection GetConnection (IConnectionStringDictionary conectionStringBuilder)
- {
- string dataSourceJndi = (string) conectionStringBuilder.GetValue ("jndi-datasource-name");
-
- if (dataSourceJndi != null && dataSourceJndi.Length > 0) {
-
- string namingProviderUrl = (string) conectionStringBuilder.GetValue ("naming-provider-url");
- string namingFactoryInitial = (string) conectionStringBuilder.GetValue ("naming-factory-initial");
- DataSource ds = _dataSourceCache.GetDataSource(dataSourceJndi,namingProviderUrl,namingFactoryInitial);
- return ds.getConnection();
- }
-
- JdbcUrlConnector connector = new JdbcUrlConnector (this, conectionStringBuilder);
- return connector.Connection;
- }
-
- public virtual IConnectionStringDictionary GetConnectionStringBuilder (string connectionString)
- {
- return new ConnectionStringDictionary(connectionString, KeyMapping);
- }
-
- private void InitKeyMapping ()
- {
- lock (this) {
- if (_keyMapping != null)
- return;
-
- _keyMapping = new NameValueCollection (StringComparer.OrdinalIgnoreCase);
-
- // create key mappings collection
- string keyMappingsStr = (string) _providerInfo [ConfigurationConsts.KeyMapping];
- if (keyMappingsStr != null) {
- string [] keyMappings = keyMappingsStr.Split (ConfigurationConsts.SemicolonArr);
- foreach (string keyMapping in keyMappings) {
- if (keyMapping.Length == 0)
- continue;
- int equalsIndex = keyMapping.IndexOf ('=');
- string key = keyMapping.Substring (0, equalsIndex).Trim ();
- string [] mappings = keyMapping.Substring (equalsIndex + 1).Trim ().Split (ConfigurationConsts.CommaArr);
- foreach (string mapping in mappings)
- _keyMapping.Add (key, mapping.Trim ());
- }
- }
-
- string keyMappingExcludesStr = (string) _providerInfo [ConfigurationConsts.KeyMappingExcludes];
- if (keyMappingExcludesStr != null) {
- _excludedKeys = keyMappingExcludesStr.Split (ConfigurationConsts.CommaArr);
- for (int i = 0; i < _excludedKeys.Length; i++)
- _excludedKeys [i] = _excludedKeys [i].Trim ();
- }
-
- string keyMappingUnsupportedStr = (string) _providerInfo [ConfigurationConsts.KeyMappingUnsupported];
- if (keyMappingUnsupportedStr != null) {
- _unsupportedKeys = keyMappingUnsupportedStr.Split (ConfigurationConsts.CommaArr);
- for (int i = 0; i < _unsupportedKeys.Length; i++)
- _unsupportedKeys [i] = _unsupportedKeys [i].Trim ();
- }
- }
- }
-
- #endregion // Methods
- }
-}
+++ /dev/null
-//
-// System.Data.OleDb.OleDbConnection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System;
-using System.Collections;
-using Mainsoft.Data.Configuration;
-
-using java.sql;
-
-namespace Mainsoft.Data.Jdbc.Providers
-{
- sealed class ConfigurationConsts {
- #region Constructors
-
- ConfigurationConsts() {
- }
-
- #endregion // Constructors
-
- #region Consts
-
- public const string Name = "id";
- public const string KeyMapping = "keyMapping";
- public const string KeyMappingExcludes = "keyExclude";
- public const string KeyMappingUnsupported = "keyUnsupported";
- public const string JdbcUrlPattern = "url";
- public const string JdbcDriverClassName = "driverClassName";
- public const string ProviderType = "type";
-
- public static readonly char [] SemicolonArr = new char [] { ';' };
- public static readonly char [] CommaArr = new char [] { ',' };
-
- #endregion // Consts
-
- }
-
- public interface IConnectionProvider
- {
- java.sql.Connection GetConnection (IConnectionStringDictionary connectionStringBuilder);
- IConnectionStringDictionary GetConnectionStringBuilder (string connectionString);
- }
-
- public interface IPreparedStatement : java.sql.PreparedStatement {
- void setBit(int parameterIndex, int value);
- void setChar(int parameterIndex, string value);
- void setNumeric(int parameterIndex, java.math.BigDecimal value);
- void setReal(int parameterIndex, double value);
- }
-}
+++ /dev/null
-//
-// System.Data.OleDb.OleDbConnection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.Data.Common;
-using System.Data.Configuration;
-using System.Data.ProviderBase;
-using Mainsoft.Data.Configuration;
-
-using java.net;
-using System.Globalization;
-
-namespace Mainsoft.Data.Jdbc.Providers
-{
- #region OleDbSqlServerProvider2000
-
- public class OleDbSqlServerProvider2000 : GenericProvider
- {
- #region Consts
-
- private const string Port = "Port";
- private const string DefaultInstanceName = "MSSQLSERVER";
- private const int DefaultTimeout = 15;
-
- #endregion //Consts
-
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- public OleDbSqlServerProvider2000 (IDictionary providerInfo) : base (providerInfo)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- #endregion // Properties
-
- #region Methods
-
- public override IConnectionStringDictionary GetConnectionStringBuilder (string connectionString)
- {
- //TBD: should wrap the IConnectionStringDictionary
- IConnectionStringDictionary conectionStringBuilder = base.GetConnectionStringBuilder (connectionString);
- OleDbSqlHelper.InitConnectionStringBuilder (conectionStringBuilder);
-
- string port = (string) conectionStringBuilder [Port];
- if (port == null || port.Length == 0) {
- port = GetMSSqlPort (OleDbSqlHelper.GetInstanceName (conectionStringBuilder, DefaultInstanceName), OleDbSqlHelper.GetDataSource (conectionStringBuilder), OleDbSqlHelper.GetTimeout (conectionStringBuilder, DefaultTimeout));
- conectionStringBuilder.Add (Port, port);
- }
-
- return conectionStringBuilder;
- }
-
- static string GetMSSqlPort(string instanceName, string dataSource, int timeout) {
- string port = String.Empty;
- try {
- DatagramSocket socket = new DatagramSocket();
-
- // send request
- sbyte[] buf = new sbyte[] {2};
- InetAddress address = InetAddress.getByName(dataSource);
- DatagramPacket packet = new DatagramPacket(buf, buf.Length, address, 1434);
- socket.send(packet);
- sbyte[] recbuf = new sbyte[1024];
- packet = new DatagramPacket(recbuf, recbuf.Length, packet.getAddress(), packet.getPort());
-
- // try to receive from socket while increasing timeouts in geometric progression
- int iterationTimeout = 1;
- int totalTimeout = 0;
- for(;;) {
- socket.setSoTimeout(iterationTimeout);
- try {
- socket.receive(packet);
- break;
- }
- catch (SocketTimeoutException e) {
- totalTimeout += iterationTimeout;
- iterationTimeout *= 2;
- if (totalTimeout >= timeout*1000) {
- throw new java.sql.SQLException(
- String.Format ("Unable to retrieve the port number for {0} using UDP on port 1434. Please see your network administrator to solve this problem or add the port number of your SQL server instance to your connection string (i.e. port=1433).", dataSource)
- );
- }
- }
- }
- sbyte[] rcvdSbytes = packet.getData();
- char[] rcvdChars = new char[rcvdSbytes.Length];
- for(int i=0; i < rcvdSbytes.Length; i++) {
- rcvdChars[i] = (char)rcvdSbytes[i];
- }
- String received = new String(rcvdChars);
-
- java.util.StringTokenizer st = new java.util.StringTokenizer(received, ";");
- String prev = "";
- bool instanceReached = instanceName == null || instanceName.Length == 0;
- while (st.hasMoreTokens()) {
- if (!instanceReached) {
- if (prev.Trim().Equals("InstanceName")) {
- if (String.Compare(instanceName,st.nextToken().Trim(),true, CultureInfo.InvariantCulture) == 0) {
- instanceReached = true;
- }
- }
- }
- else {
- if (prev.Trim().Equals("tcp")) {
- port = st.nextToken().Trim();
- //ensure we got a valid int
- java.lang.Integer.parseInt(port);
- break;
- }
- }
- prev = st.nextToken();
- }
- socket.close();
-
- if (!instanceReached)
- throw new java.sql.SQLException(
- String.Format ("Specified SQL Server '{0}\\{1}' not found.", dataSource, instanceName)
- );
- return port;
-
- }
- catch (java.sql.SQLException) {
- throw;
- }
- catch (Exception e) {
- throw new java.sql.SQLException(e.Message);
- }
- }
-
- #endregion // Methods
- }
-
- #endregion // OleDbSqlServerProvider2000
-
- #region OleDbSqlServerProvider2005
-
- public class OleDbSqlServerProvider2005 : GenericProvider
- {
- #region Consts
-
- #endregion //Consts
-
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- public OleDbSqlServerProvider2005 (IDictionary providerInfo) : base (providerInfo)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- #endregion // Properties
-
- #region Methods
-
- public override IConnectionStringDictionary GetConnectionStringBuilder (string connectionString)
- {
- //TBD: should wrap the IConnectionStringDictionary
- IConnectionStringDictionary conectionStringBuilder = base.GetConnectionStringBuilder (connectionString);
- OleDbSqlHelper.InitConnectionStringBuilder (conectionStringBuilder);
- return conectionStringBuilder;
- }
-
- public override java.sql.Connection GetConnection(IConnectionStringDictionary conectionStringBuilder)
- {
- return new SqlServer2005Connection (base.GetConnection (conectionStringBuilder));
- }
-
- #endregion // Methods
-
- #region SqlServer2005Connection
-
- sealed class SqlServer2005Connection : Connection
- {
- #region Constructors
-
- public SqlServer2005Connection(java.sql.Connection connection) : base (connection)
- {
- }
-
- #endregion
-
- #region Methods
-
- public override java.sql.DatabaseMetaData getMetaData()
- {
- return new SqlServer2005DatabaseMetaData (base.getMetaData ());
- }
-
- #endregion
- }
-
- #endregion
-
- #region SqlServer2005DatabaseMetaData
-
- sealed class SqlServer2005DatabaseMetaData : DatabaseMetaData
- {
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- public SqlServer2005DatabaseMetaData (java.sql.DatabaseMetaData databaseMetaData) : base (databaseMetaData)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- #endregion // Properties
-
- #region Methods
-
- public override java.sql.ResultSet getProcedureColumns(string arg_0, string arg_1, string arg_2, string arg_3)
- {
- return new SqlServer2005DatbaseMetaDataResultSet (Wrapped.getProcedureColumns (arg_0, arg_1, arg_2, arg_3));
- }
-
- #endregion // Methods
- }
-
- #endregion
-
- #region SqlServer2005DatbaseMetaDataResultSet
-
- sealed class SqlServer2005DatbaseMetaDataResultSet : ResultSet
- {
- #region Consts
-
- private const string DataType = "DATA_TYPE";
-
- #endregion
-
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- public SqlServer2005DatbaseMetaDataResultSet (java.sql.ResultSet resultSet) : base (resultSet)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- #endregion // Properties
-
- #region Methods
-
- public override int getInt(int arg_0)
- {
- int res = base.getInt (arg_0);
- if (res == -9) // sql server 2005 jdbc driver value for NVARCHAR
- if (String.CompareOrdinal (getMetaData ().getColumnName (arg_0), DataType) == 0)
- return java.sql.Types.VARCHAR;
- if (res == -8) // sql server 2005 jdbc driver value for NVARCHAR
- if (String.CompareOrdinal (getMetaData ().getColumnName (arg_0), DataType) == 0)
- return java.sql.Types.CHAR;
- return res;
- }
-
- public override int getInt(string arg_0)
- {
- int res = base.getInt (arg_0);
-
- if (res == -9) // sql server 2005 jdbc driver value for NVARCHAR
- if (String.CompareOrdinal (arg_0, DataType) == 0)
- return java.sql.Types.VARCHAR;
-
- if (res == -8) // sql server 2005 jdbc driver value for NVARCHAR
- if (String.CompareOrdinal (arg_0, DataType) == 0)
- return java.sql.Types.CHAR;
- return res;
- }
-
- #endregion // Methods
- }
-
- #endregion
- }
-
- #endregion // OleDbSqlServerProvider2005
-
- #region OleDbSqlHelper
-
- class OleDbSqlHelper
- {
- private const string Database = "Database";
- private const string ServerName = "ServerName";
- private const string Timeout = "Timeout";
-
- internal static void InitConnectionStringBuilder (IConnectionStringDictionary conectionStringBuilder)
- {
- if (!conectionStringBuilder.Contains("jndi-datasource-name")) {
-
- string database = (string) conectionStringBuilder [Database];
- if (database == null)
- conectionStringBuilder.Add (Database, String.Empty);
-
- string dataSource = GetDataSource (conectionStringBuilder);
- string instanceName = GetInstanceName (conectionStringBuilder, null);
-
- if (instanceName != null)
- conectionStringBuilder [ServerName] = dataSource + "\\" + instanceName;
- else
- conectionStringBuilder [ServerName] = dataSource;
- }
- }
-
- // TBD : refactor GetInstanceName and GetDataSource to single method
- internal static string GetInstanceName (IDictionary keyMapper, string defaultInstanceName)
- {
- string dataSource = (string) keyMapper [ServerName];
- string instanceName = String.Empty;
- int instanceIdx;
- if (dataSource == null || (instanceIdx = dataSource.IndexOf ("\\")) == -1)
- // no named instance specified - use a default name
- return defaultInstanceName;
- else
- // get named instance name
- return dataSource.Substring (instanceIdx + 1);
- }
-
- internal static string GetDataSource (IDictionary keyMapper)
- {
- string dataSource = (string) keyMapper [ServerName];
- int instanceIdx;
- if (dataSource != null && (instanceIdx = dataSource.IndexOf ("\\")) != -1)
- // throw out named instance name
- dataSource = dataSource.Substring (0,instanceIdx);
-
- if (dataSource != null && dataSource.StartsWith ("(") && dataSource.EndsWith (")"))
- dataSource = dataSource.Substring (1,dataSource.Length - 2);
-
- if (String.Empty.Equals (dataSource) || (String.Compare ("local", dataSource, true, CultureInfo.InvariantCulture) == 0) || (String.CompareOrdinal (".", dataSource) == 0))
- dataSource = "localhost";
-
- return dataSource;
- }
-
- internal static int GetTimeout (IDictionary keyMapper, int defaultTimeout)
- {
- string timeoutStr = (string) keyMapper [Timeout];
- if ((timeoutStr != null) && (timeoutStr.Length != 0)) {
- try {
- return Convert.ToInt32(timeoutStr);
- }
- catch(FormatException e) {
- throw ExceptionHelper.InvalidValueForKey("connect timeout");
- }
- catch (OverflowException e) {
- throw ExceptionHelper.InvalidValueForKey("connect timeout");
- }
- }
- return defaultTimeout;
- }
- }
-
- #endregion // OleDbSqlHelper
-
-}
+++ /dev/null
-/*\r
- * Copyright (c) 2002-2004 Mainsoft Corporation.\r
- *\r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- *\r
- * The above copyright notice and this permission notice shall be included in\r
- * all copies or substantial portions of the Software.\r
- *\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
- * DEALINGS IN THE SOFTWARE.\r
- */\r
-\r
-using System;\r
-using System.Collections;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.Common\r
-{\r
- #region AbstractDbMetaDataCache\r
-\r
- internal abstract class AbstractDbMetaDataCache\r
- {\r
- Hashtable _cache;\r
- const int MINUTES_TIMEOUT = 10;\r
- private long _timestamp;\r
-\r
- protected AbstractDbMetaDataCache()\r
- {\r
- _cache = Hashtable.Synchronized(new Hashtable());\r
- }\r
-\r
- protected Hashtable Cache \r
- {\r
- get\r
- {\r
- long now = DateTime.Now.Ticks;\r
- if (now - _timestamp > MINUTES_TIMEOUT * TimeSpan.TicksPerMinute)\r
- {\r
- _timestamp = now;\r
- _cache.Clear();\r
- }\r
-\r
- return _cache;\r
- }\r
- }\r
- }\r
-\r
- #endregion\r
-}\r
+++ /dev/null
-//\r
-// System.Data.OleDb.OleDbCommand\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Text;\r
-using System.Text.RegularExpressions;\r
-using System.Data;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-\r
-using java.sql;\r
-// Cannot use this because it makes ArrayList ambiguous reference\r
-//using java.util;\r
-\r
-namespace System.Data.OleDb\r
-{\r
- public sealed class OleDbCommand : AbstractDbCommand\r
- {\r
-\r
- #region Fields\r
-\r
- internal static readonly int oracleTypeRefCursor = java.sql.Types.OTHER;\r
- private static readonly int _oracleRefCursor = -10; // oracle.jdbc.OracleTypes.CURSOR\r
- private int _currentParameterIndex = 0;\r
- private ResultSet _currentRefCursor;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- static OleDbCommand()\r
- {\r
- try {\r
- java.lang.Class OracleTypesClass = java.lang.Class.forName("oracle.jdbc.OracleTypes");\r
- _oracleRefCursor = OracleTypesClass.getField("CURSOR").getInt(null);\r
- }\r
- catch(java.lang.ClassNotFoundException e) {\r
- // oracle driver is not in classpath - just continue\r
- }\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OleDbCommand class.\r
- * The base constructor initializes all fields to their default values.\r
- * The following table shows initial property values for an instance of SqlCommand.\r
- */\r
- public OleDbCommand() : this(null, null, null)\r
- {\r
- }\r
-\r
- public OleDbCommand(OleDbConnection connection) : this(null, connection, null)\r
- {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OleDbCommand class with the text of the query.\r
- * @param cmdText The text of the query.\r
- */\r
- public OleDbCommand(String cmdText) : this(cmdText, null, null)\r
- {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OleDbCommand class with the text of the query and a SqlConnection.\r
- * @param cmdText The text of the query.\r
- * @param connection A SqlConnection that represents the connection to an instance of SQL Server.\r
- */\r
- public OleDbCommand(String cmdText, OleDbConnection connection) : this(cmdText, connection, null)\r
- {\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the OleDbCommand class with the text of the query, a SqlConnection, and the Transaction.\r
- * @param cmdText The text of the query.\r
- * @param connection A SqlConnection that represents the connection to an instance of SQL Server.\r
- * @param transaction The SqlTransaction in which the OleDbCommand executes.\r
- */\r
- public OleDbCommand(\r
- String cmdText,\r
- OleDbConnection connection,\r
- OleDbTransaction transaction)\r
- : base(cmdText, connection, transaction)\r
- {\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public new OleDbConnection Connection\r
- {\r
- get { return (OleDbConnection)base.Connection; }\r
- set { base.Connection = (AbstractDBConnection)value; }\r
- }\r
-\r
- public new OleDbParameterCollection Parameters\r
- {\r
- get { \r
- return (OleDbParameterCollection)base.Parameters; \r
- }\r
- }\r
-\r
- public new OleDbTransaction Transaction\r
- {\r
- get { return (OleDbTransaction)base.Transaction; }\r
- set { base.Transaction = (DbTransaction)value; }\r
- }\r
-\r
- protected internal sealed override ResultSet CurrentResultSet\r
- {\r
- get { \r
- try {\r
- ResultSet resultSet = base.CurrentResultSet;\r
- \r
- if (resultSet != null) {\r
- return resultSet; \r
- }\r
- return CurrentRefCursor;\r
- }\r
- catch(SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
- }\r
-\r
- private ResultSet CurrentRefCursor\r
- {\r
- get {\r
- if (_currentParameterIndex < 0) {\r
- NextRefCursor();\r
- }\r
- if (_currentRefCursor == null && _currentParameterIndex < InternalParameters.Count) {\r
- _currentRefCursor = (ResultSet)((CallableStatement)Statement).getObject(_currentParameterIndex + 1);\r
- }\r
- return _currentRefCursor;\r
- }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public new OleDbDataReader ExecuteReader()\r
- {\r
- return (OleDbDataReader)ExecuteReader(CommandBehavior.Default);\r
- }\r
-\r
- public new OleDbDataReader ExecuteReader(CommandBehavior behavior)\r
- {\r
- return (OleDbDataReader)base.ExecuteReader(behavior);\r
- }\r
-\r
- public new OleDbParameter CreateParameter()\r
- {\r
- return (OleDbParameter)CreateParameterInternal();\r
- } \r
-\r
- protected sealed override void CheckParameters()\r
- {\r
- for(int i = 0; i < Parameters.Count; i++) {\r
- OleDbParameter parameter = (OleDbParameter)Parameters[i];\r
- if ((parameter.OleDbType == OleDbType.Empty) || (parameter.OleDbType == OleDbType.Error)) {\r
- throw ExceptionHelper.ParametersNotInitialized(i,parameter.ParameterName,parameter.OleDbType.ToString());\r
- }\r
-\r
- if (((parameter.OleDbType == OleDbType.Char) || (parameter.OleDbType == OleDbType.Binary) ||\r
- (parameter.OleDbType == OleDbType.VarWChar) || (parameter.OleDbType == OleDbType.VarBinary) ||\r
- (parameter.OleDbType == OleDbType.VarNumeric)) && (parameter.Size == 0)) {\r
- throw ExceptionHelper.WrongParameterSize("OleDb");\r
- }\r
- }\r
- }\r
-\r
- protected sealed override DbParameter CreateParameterInternal()\r
- {\r
- return new OleDbParameter();\r
- }\r
-\r
- protected sealed override DbParameterCollection CreateParameterCollection(AbstractDbCommand parent)\r
- {\r
- return new OleDbParameterCollection((OleDbCommand)parent);\r
- }\r
-\r
- public override object Clone() {\r
- OleDbCommand clone = (OleDbCommand)base.Clone();\r
- clone._currentParameterIndex = 0;\r
- clone._currentRefCursor = null;\r
- return clone;\r
- }\r
-\r
- protected override void PrepareInternalParameters()\r
- {\r
- InternalParameters.Clear();\r
- _currentParameterIndex = -1;\r
- }\r
-\r
- protected override void BindOutputParameter(AbstractDbParameter parameter, int parameterIndex)\r
- {\r
- CallableStatement callableStatement = ((CallableStatement)Statement);\r
- if (((OleDbParameter)parameter).IsOracleRefCursor) {\r
- callableStatement.registerOutParameter(++parameterIndex, _oracleRefCursor);\r
- }\r
- else {\r
- base.BindOutputParameter(parameter, parameterIndex);\r
- }\r
- }\r
-\r
- protected override bool SkipParameter(DbParameter parameter)\r
- {\r
- return ((OleDbParameter)parameter).IsOracleRefCursor;\r
- }\r
-\r
- protected internal override bool NextResultSet()\r
- {\r
- try { \r
- bool hasMoreResults = base.NextResultSet();\r
-\r
- if (hasMoreResults) {\r
- return true;\r
- }\r
- else {\r
- return NextRefCursor();\r
- }\r
- }\r
- catch (SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- private bool NextRefCursor()\r
- {\r
- _currentRefCursor = null;\r
- // FIXME : should we count all parameters or only out ones?\r
- for (_currentParameterIndex++;InternalParameters.Count > _currentParameterIndex;_currentParameterIndex++) {\r
- if (((OleDbParameter)InternalParameters[_currentParameterIndex]).IsOracleRefCursor) {\r
- return true; \r
- }\r
- }\r
- return false;\r
- }\r
-\r
- protected sealed override DbDataReader CreateReader()\r
- {\r
- return new OleDbDataReader(this);\r
- }\r
-\r
- protected internal sealed override SystemException CreateException(SQLException e)\r
- {\r
- return new OleDbException(e,Connection); \r
- }\r
-\r
- #endregion // Methods\r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.OleDb.OleDbConnection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-
-using System.Data;
-using System.Data.Common;
-using System.Collections;
-using System.Data.ProviderBase;
-using System.Globalization;
-
-using java.sql;
-
-using System.Configuration;
-using Mainsoft.Data.Configuration;
-using Mainsoft.Data.Jdbc.Providers;
-
-namespace System.Data.OleDb
-{
- public sealed class OleDbConnection : AbstractDBConnection {
-
- #region Events
-
- public event OleDbInfoMessageEventHandler InfoMessage;
-
- #endregion // Events
-
- #region Constructors
-
- public OleDbConnection() : this(null) {
- }
-
- public OleDbConnection(String connectionString) : base(connectionString) {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public String Provider {
- get {
- IDictionary conDict = ConnectionStringBuilder;
- string provider = (string)conDict["Provider"];
- if (provider == null || provider.Length == 0)
- throw ExceptionHelper.OleDbNoProviderSpecified();
-
- return provider;
- }
- }
-
- protected override IConnectionProvider GetConnectionProvider() {
- IDictionary conProviderDict = ConnectionStringDictionary.Parse(ConnectionString);
- string jdbcUrl = (string)conProviderDict["JdbcUrl"];
- if (jdbcUrl == null) {
- string provider = (string)conProviderDict["Provider"];
- if (provider != null)
- return GetConnectionProvider("Mainsoft.Data.Configuration/OleDbProviders", provider);
- }
-
- return new GenericProvider (conProviderDict);
- }
-
- #endregion // Properties
-
- #region Methods
-
- public new OleDbTransaction BeginTransaction(IsolationLevel level)
- {
- return new OleDbTransaction(level, this);
- }
-
- public new OleDbTransaction BeginTransaction()
- {
- return BeginTransaction(IsolationLevel.ReadCommitted);
- }
-
- public new OleDbCommand CreateCommand()
- {
- return new OleDbCommand(this);
- }
-
- protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) {
- return BeginTransaction();
- }
-
- protected override DbCommand CreateDbCommand() {
- return CreateCommand();
- }
-
- protected sealed override SystemException CreateException(SQLException e)
- {
- return new OleDbException(e,this);
- }
-
- protected sealed override SystemException CreateException(string message)
- {
- return new OleDbException(message, null, this);
- }
-
- [MonoTODO]
- public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)
- {
- if (State != ConnectionState.Open)
- throw ExceptionHelper.ConnectionNotOpened("GetOleDbSchemaTable", State.ToString());
-
- try {
-
- string[] fixedRestrictions = new string[4];
- if (restrictions != null) {
- if (restrictions.Length > 4)
- throw new OleDbException("The parameter is incorrect", null, this);
-
- for (int i = 0, count = restrictions.Length; i < count; i ++) {
- if (restrictions[i] != null) {
- if (!(restrictions[i] is string))
- throw new OleDbException("The parameter is incorrect", null, this);
-
- fixedRestrictions[i] = (string)restrictions[i];
- }
- }
- }
-
- DataTable schemaTable = new DataTable("Tables");
- schemaTable.Columns.Add("TABLE_CATALOG");
- schemaTable.Columns.Add("TABLE_SCHEMA");
- schemaTable.Columns.Add("TABLE_NAME");
- schemaTable.Columns.Add("TABLE_TYPE");
- schemaTable.Columns.Add("TABLE_GUID");
- schemaTable.Columns.Add("DESCRIPTION");
- schemaTable.Columns.Add("TABLE_PROPID");
- schemaTable.Columns.Add("DATE_CREATED");
- schemaTable.Columns.Add("DATE_MODIFIED");
-
- java.sql.ResultSet tableRes = JdbcConnection.getMetaData().getTables(
- fixedRestrictions[0],
- fixedRestrictions[1],
- fixedRestrictions[2],
- new string[]{fixedRestrictions[3]});
-
- try {
- while(tableRes.next()) {
- DataRow row = schemaTable.NewRow();
- row["TABLE_CATALOG"] = tableRes.getString("TABLE_CAT");
- row["TABLE_SCHEMA"] = tableRes.getString("TABLE_SCHEM");
- row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");
- row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");
- row["DESCRIPTION"] = tableRes.getString("REMARKS");
-
- schemaTable.Rows.Add(row);
- }
- }
- finally {
- tableRes.close();
- }
-
- return schemaTable;
- }
- catch (SQLException e) {
- throw CreateException(e);
- }
- }
-
- public static void ReleaseObjectPool()
- {
- // since we're using connection pool from app servet, this is by design
- //throw new NotImplementedException();
- }
-
-#if NET_2_0
- [MonoLimitation ("Empty implementation since State relies on java.sql.Connection.State always returning the correct state")]
- public void ResetState ()
- {
- }
-
-#endif
-
- protected internal sealed override void OnSqlWarning(SQLWarning warning)
- {
- OleDbErrorCollection col = new OleDbErrorCollection(warning, this);
- OnOleDbInfoMessage(new OleDbInfoMessageEventArgs(col));
- }
-
- private void OnOleDbInfoMessage (OleDbInfoMessageEventArgs value)
- {
- if (InfoMessage != null) {
- InfoMessage (this, value);
- }
- }
-
- #endregion // Methods
-
- }
-}
+++ /dev/null
-//\r
-// System.Data.OleDb.OleDbConvert\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.OleDb\r
-{\r
- internal sealed class OleDbConvert : DbConvert\r
- {\r
- #region Fields\r
-\r
- private static Hashtable _typeNamesMap;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- static OleDbConvert()\r
- {\r
- _typeNamesMap = new Hashtable(30,CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);\r
- \r
- // SqlServer types mapping\r
-// _typeNamesMap.Add("numeric(3, 0)1","DBTYPE_I1");\r
- _typeNamesMap.Add("smallint","DBTYPE_I2");\r
- _typeNamesMap.Add("Int","DBTYPE_I4");\r
- _typeNamesMap.Add("bigint","DBTYPE_I8");\r
- _typeNamesMap.Add("tinyint","DBTYPE_UI1");\r
-// _typeNamesMap.Add("numeric(5,0)","DBTYPE_UI2");\r
-// _typeNamesMap.Add("numeric(10,0)","DBTYPE_UI4");\r
-// _typeNamesMap.Add("numeric(20,0)","DBTYPE_UI8");\r
- _typeNamesMap.Add("Float","DBTYPE_R8");\r
- _typeNamesMap.Add("Real","DBTYPE_R4");\r
- _typeNamesMap.Add("numeric","DBTYPE_NUMERIC");\r
- _typeNamesMap.Add("decimal","DBTYPE_NUMERIC");\r
- _typeNamesMap.Add("money","DBTYPE_CY");\r
- _typeNamesMap.Add("smallmoney","DBTYPE_CY");\r
- _typeNamesMap.Add("ntext","DBTYPE_WLONGVARCHAR");\r
- _typeNamesMap.Add("nchar","DBTYPE_WCHAR");\r
- _typeNamesMap.Add("nvarchar","DBTYPE_WVARCHAR");\r
- _typeNamesMap.Add("Bit","DBTYPE_BOOL");\r
-// _typeNamesMap.Add("nvarchar(4000)","DBTYPE_VARIANT");\r
- _typeNamesMap.Add("sql_variant","DBTYPE_VARIANT");\r
- _typeNamesMap.Add("uniqueidentifier","DBTYPE_GUID");\r
- _typeNamesMap.Add("image","DBTYPE_LONGVARBINARY");\r
- _typeNamesMap.Add("timestamp","DBTYPE_BINARY");\r
- _typeNamesMap.Add("binary","DBTYPE_BINARY");\r
- _typeNamesMap.Add("varbinary","DBTYPE_VARBINARY");\r
- _typeNamesMap.Add("char","DBTYPE_CHAR");\r
- _typeNamesMap.Add("varchar","DBTYPE_VARCHAR");\r
- _typeNamesMap.Add("text","DBTYPE_LONGVARCHAR");\r
-// _typeNamesMap.Add("nchar","DBTYPE_WSTR");\r
-// _typeNamesMap.Add("nvarchar","DBTYPE_WSTR");\r
-// _typeNamesMap.Add("ntext","DBTYPE_WSTR");\r
-// _typeNamesMap.Add("datetime","DBTYPE_DATE");\r
- _typeNamesMap.Add("datetime","DBTYPE_DBTIMESTAMP");\r
- _typeNamesMap.Add("smalldatetime","DBTYPE_DBTIMESTAMP");\r
- _typeNamesMap.Add("Ignored","DBTYPE_BYREF");\r
- }\r
-\r
- #endregion //Constructors\r
-\r
- #region Methods\r
-\r
- internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)\r
- {\r
- jdbcTypeName = jdbcTypeName.Trim();\r
- string dbTypeName = (string)_typeNamesMap[jdbcTypeName];\r
-\r
- return (dbTypeName != null) ? dbTypeName : jdbcTypeName;\r
- }\r
-\r
- internal static OleDbType JdbcTypeToOleDbType(int jdbcType)\r
- {\r
- switch ((JavaSqlTypes)jdbcType) {\r
- case JavaSqlTypes.ARRAY: return OleDbType.Binary;\r
- case JavaSqlTypes.BIGINT: return OleDbType.BigInt;\r
- case JavaSqlTypes.BINARY: return OleDbType.Binary;\r
- case JavaSqlTypes.BIT: return OleDbType.Boolean;\r
- case JavaSqlTypes.BLOB: return OleDbType.Binary;\r
- case JavaSqlTypes.BOOLEAN: return OleDbType.Boolean;\r
- case JavaSqlTypes.CHAR: return OleDbType.Char;\r
- case JavaSqlTypes.CLOB: return OleDbType.LongVarWChar;\r
- case JavaSqlTypes.DATALINK: return OleDbType.IUnknown;\r
- case JavaSqlTypes.DATE: return OleDbType.DBDate;\r
- case JavaSqlTypes.DECIMAL: return OleDbType.Decimal;\r
- case JavaSqlTypes.DISTINCT: return OleDbType.IUnknown; \r
- case JavaSqlTypes.DOUBLE: return OleDbType.Double;\r
- case JavaSqlTypes.FLOAT: return OleDbType.Double;\r
- case JavaSqlTypes.INTEGER: return OleDbType.Integer;\r
- case JavaSqlTypes.JAVA_OBJECT: return OleDbType.IUnknown;\r
- case JavaSqlTypes.LONGVARBINARY: return OleDbType.LongVarBinary;\r
- case JavaSqlTypes.LONGVARCHAR: return OleDbType.LongVarWChar;\r
- case JavaSqlTypes.NULL: return OleDbType.Empty;\r
- case JavaSqlTypes.NUMERIC: return OleDbType.Numeric;\r
- default:\r
- case JavaSqlTypes.OTHER: return OleDbType.IUnknown;\r
- case JavaSqlTypes.REAL: return OleDbType.Single;\r
- case JavaSqlTypes.REF: return OleDbType.IUnknown;\r
- case JavaSqlTypes.SMALLINT: return OleDbType.SmallInt;\r
- case JavaSqlTypes.STRUCT: return OleDbType.IUnknown;\r
- case JavaSqlTypes.TIME: return OleDbType.DBTime;\r
- case JavaSqlTypes.TIMESTAMP: return OleDbType.DBTimeStamp;\r
- case JavaSqlTypes.TINYINT: return OleDbType.TinyInt;\r
- case JavaSqlTypes.VARBINARY: return OleDbType.VarBinary;\r
- case JavaSqlTypes.VARCHAR: return OleDbType.VarChar;\r
- }\r
- }\r
-\r
- internal static OleDbType ValueTypeToOleDbType(Type type)\r
- {\r
- switch (Type.GetTypeCode(type)) {\r
- case TypeCode.Boolean: return OleDbType.Boolean;\r
- case TypeCode.Byte: return OleDbType.UnsignedTinyInt;\r
- case TypeCode.Char: return OleDbType.Char;\r
- case TypeCode.DateTime: return OleDbType.Date;\r
- case TypeCode.DBNull: return OleDbType.Empty;\r
- case TypeCode.Decimal: return OleDbType.Decimal;\r
- case TypeCode.Double: return OleDbType.Double;\r
- case TypeCode.Empty: return OleDbType.Empty;\r
- case TypeCode.Int16: return OleDbType.SmallInt;\r
- case TypeCode.Int32: return OleDbType.Integer;\r
- case TypeCode.Int64: return OleDbType.BigInt;\r
- default:\r
- case TypeCode.Object: {\r
- if (type.Equals(DbTypes.TypeOfByteArray)) return OleDbType.Binary;\r
- if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;\r
- if (type.Equals(DbTypes.TypeOfGuid)) return OleDbType.Guid;\r
-\r
- if (type.IsEnum)\r
- return ValueTypeToOleDbType (Enum.GetUnderlyingType (type));\r
-\r
- return OleDbType.IUnknown;\r
- }\r
- case TypeCode.SByte: return OleDbType.TinyInt;\r
- case TypeCode.Single: return OleDbType.Single;\r
- case TypeCode.String: return OleDbType.VarWChar;\r
- case TypeCode.UInt16: return OleDbType.UnsignedSmallInt;\r
- case TypeCode.UInt32: return OleDbType.UnsignedInt;\r
- case TypeCode.UInt64: return OleDbType.UnsignedBigInt;\r
- }\r
- }\r
-\r
- internal static Type OleDbTypeToValueType(OleDbType oleDbType)\r
- {\r
- switch (oleDbType) {\r
- case OleDbType.BigInt : return DbTypes.TypeOfInt64;// typeof(long);\r
- case OleDbType.Binary : return DbTypes.TypeOfByteArray;\r
- case OleDbType.Boolean : return DbTypes.TypeOfBoolean;\r
- case OleDbType.BSTR : return DbTypes.TypeOfString;\r
- case OleDbType.Char : return DbTypes.TypeOfString;\r
- case OleDbType.Currency : return DbTypes.TypeOfDecimal;\r
- case OleDbType.Date : return DbTypes.TypeOfDateTime;\r
- case OleDbType.DBDate : return DbTypes.TypeOfDateTime;\r
- case OleDbType.DBTime : return DbTypes.TypeOfTimespan;\r
- case OleDbType.DBTimeStamp : return DbTypes.TypeOfDateTime;\r
- case OleDbType.Decimal : return DbTypes.TypeOfDecimal;\r
- case OleDbType.Double : return DbTypes.TypeOfDouble;\r
- case OleDbType.Empty : return null; //typeof(DBNull);\r
- case OleDbType.Error : return typeof(Exception);\r
- case OleDbType.Filetime : return DbTypes.TypeOfDateTime;\r
- case OleDbType.Guid : return DbTypes.TypeOfGuid;\r
- case OleDbType.IDispatch : return DbTypes.TypeOfObject;\r
- case OleDbType.Integer : return DbTypes.TypeOfInt32;\r
- case OleDbType.IUnknown : return DbTypes.TypeOfObject;\r
- case OleDbType.LongVarBinary : return DbTypes.TypeOfByteArray;\r
- case OleDbType.LongVarChar : return DbTypes.TypeOfString;\r
- case OleDbType.LongVarWChar : return DbTypes.TypeOfString;\r
- case OleDbType.Numeric : return DbTypes.TypeOfDecimal;\r
- case OleDbType.PropVariant : return DbTypes.TypeOfObject;\r
- case OleDbType.Single : return DbTypes.TypeOfFloat;\r
- case OleDbType.SmallInt : return DbTypes.TypeOfInt16;\r
- case OleDbType.TinyInt : return DbTypes.TypeOfSByte;\r
- case OleDbType.UnsignedBigInt : return DbTypes.TypeOfUInt64;\r
- case OleDbType.UnsignedInt : return DbTypes.TypeOfUInt32;\r
- case OleDbType.UnsignedSmallInt : return DbTypes.TypeOfUInt16;\r
- case OleDbType.UnsignedTinyInt : return DbTypes.TypeOfByte;\r
- case OleDbType.VarBinary : return DbTypes.TypeOfByteArray;\r
- case OleDbType.VarChar : return DbTypes.TypeOfString;\r
- case OleDbType.Variant : return DbTypes.TypeOfObject;\r
- case OleDbType.VarNumeric : return DbTypes.TypeOfDecimal;\r
- case OleDbType.VarWChar : return DbTypes.TypeOfString;\r
- case OleDbType.WChar : return DbTypes.TypeOfString;\r
- default : return DbTypes.TypeOfObject;\r
- }\r
- }\r
-\r
- internal static OleDbType DbTypeToOleDbType(DbType dbType)\r
- {\r
- switch (dbType) {\r
- case DbType.AnsiString : return OleDbType.VarChar;\r
- case DbType.Binary : return OleDbType.VarBinary;\r
- case DbType.Byte : return OleDbType.UnsignedTinyInt;\r
- case DbType.Boolean : return OleDbType.Boolean;\r
- case DbType.Currency : return OleDbType.Currency;\r
- case DbType.Date : return OleDbType.DBDate;\r
- case DbType.DateTime : return OleDbType.DBTimeStamp;\r
- case DbType.Decimal : return OleDbType.Decimal;\r
- case DbType.Double : return OleDbType.Double;\r
- case DbType.Guid : return OleDbType.Guid;\r
- case DbType.Int16 : return OleDbType.SmallInt;\r
- case DbType.Int32 : return OleDbType.Integer;\r
- case DbType.Int64 : return OleDbType.BigInt;\r
- case DbType.Object : return OleDbType.Variant;\r
- case DbType.SByte : return OleDbType.TinyInt;\r
- case DbType.Single : return OleDbType.Single;\r
- case DbType.String : return OleDbType.VarWChar;\r
- case DbType.Time : return OleDbType.DBTime;\r
- case DbType.UInt16 : return OleDbType.UnsignedSmallInt;\r
- case DbType.UInt32 : return OleDbType.UnsignedInt;\r
- case DbType.UInt64 : return OleDbType.UnsignedBigInt;\r
- case DbType.VarNumeric : return OleDbType.VarNumeric;\r
- case DbType.AnsiStringFixedLength : return OleDbType.Char;\r
- case DbType.StringFixedLength : return OleDbType.WChar;\r
- default : throw ExceptionHelper.InvalidDbType((int)dbType);\r
- }\r
- }\r
-\r
- internal static DbType OleDbTypeToDbType(OleDbType oleDbType)\r
- {\r
- switch (oleDbType) {\r
- case OleDbType.Empty : return DbType.Object;\r
- case OleDbType.SmallInt : return DbType.Int16;\r
- case OleDbType.Integer : return DbType.Int32;\r
- case OleDbType.Single : return DbType.Single;\r
- case OleDbType.Double : return DbType.Double;\r
- case OleDbType.Currency : return DbType.Currency;\r
- case OleDbType.Date : return DbType.DateTime;\r
- case OleDbType.BSTR : return DbType.String;\r
- case OleDbType.IDispatch : return DbType.Object;\r
- case OleDbType.Error : return DbType.Object;\r
- case OleDbType.Boolean : return DbType.Boolean;\r
- case OleDbType.Variant : return DbType.Object;\r
- case OleDbType.IUnknown : return DbType.Object;\r
- case OleDbType.Decimal : return DbType.Decimal;\r
- case OleDbType.TinyInt : return DbType.SByte;\r
- case OleDbType.UnsignedTinyInt : return DbType.Byte;\r
- case OleDbType.UnsignedSmallInt : return DbType.UInt16;\r
- case OleDbType.UnsignedInt : return DbType.UInt32;\r
- case OleDbType.BigInt : return DbType.Int64;\r
- case OleDbType.UnsignedBigInt : return DbType.UInt64;\r
- case OleDbType.Filetime : return DbType.DateTime;\r
- case OleDbType.Guid : return DbType.Guid;\r
- case OleDbType.Binary : return DbType.Binary;\r
- case OleDbType.Char : return DbType.AnsiStringFixedLength;\r
- case OleDbType.WChar : return DbType.StringFixedLength;\r
- case OleDbType.Numeric : return DbType.Decimal;\r
- case OleDbType.DBDate : return DbType.Date;\r
- case OleDbType.DBTime : return DbType.Time;\r
- case OleDbType.DBTimeStamp : return DbType.DateTime;\r
- case OleDbType.PropVariant : return DbType.Object;\r
- case OleDbType.VarNumeric : return DbType.VarNumeric;\r
- case OleDbType.VarChar : return DbType.AnsiString;\r
- case OleDbType.LongVarChar : return DbType.AnsiString;\r
- case OleDbType.VarWChar : return DbType.String;\r
- case OleDbType.LongVarWChar : return DbType.String;\r
- case OleDbType.VarBinary : return DbType.Binary;\r
- case OleDbType.LongVarBinary : return DbType.Binary;\r
- default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
- }\r
- }\r
-\r
- internal static int OleDbTypeToJdbcType(OleDbType oleDbType)\r
- {\r
- switch(oleDbType) {\r
- case OleDbType.BigInt : return Types.BIGINT;\r
- case OleDbType.Binary : return Types.BINARY;\r
- case OleDbType.Boolean : return Types.BIT;\r
- case OleDbType.BSTR : return Types.VARCHAR;\r
- case OleDbType.Char : return Types.CHAR;\r
- case OleDbType.Currency : return Types.DECIMAL;\r
- case OleDbType.Date : return Types.TIMESTAMP;\r
- case OleDbType.DBDate : return Types.DATE;\r
- case OleDbType.DBTime : return Types.TIME;\r
- case OleDbType.DBTimeStamp : return Types.TIMESTAMP;\r
- case OleDbType.Decimal : return Types.DECIMAL;\r
- case OleDbType.Double : return Types.DOUBLE;\r
- case OleDbType.Empty : return Types.NULL;\r
- case OleDbType.Error : return Types.OTHER;\r
- case OleDbType.Filetime : return Types.TIMESTAMP;\r
- case OleDbType.Guid : return Types.CHAR;\r
- case OleDbType.IDispatch : return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OleDbType value is not supported.");\r
- case OleDbType.Integer : return Types.INTEGER;\r
- case OleDbType.IUnknown : return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OleDbType value is not supported.");\r
- case OleDbType.LongVarBinary : return Types.LONGVARBINARY;\r
- case OleDbType.LongVarChar : return Types.LONGVARCHAR;\r
- case OleDbType.LongVarWChar : return Types.LONGVARCHAR;\r
- case OleDbType.Numeric : return Types.NUMERIC;\r
- case OleDbType.PropVariant : return Types.OTHER;\r
- case OleDbType.Single : return Types.FLOAT;\r
- case OleDbType.SmallInt : return Types.SMALLINT;\r
- case OleDbType.TinyInt : return Types.TINYINT;\r
- case OleDbType.UnsignedBigInt : return Types.BIGINT;\r
- case OleDbType.UnsignedInt : return Types.INTEGER;\r
- case OleDbType.UnsignedSmallInt : return Types.SMALLINT;\r
- case OleDbType.UnsignedTinyInt : return Types.TINYINT;\r
- case OleDbType.VarBinary : return Types.VARBINARY;\r
- case OleDbType.VarChar : return Types.VARCHAR;\r
- case OleDbType.Variant : return Types.VARCHAR;\r
- case OleDbType.VarNumeric : return Types.DECIMAL;\r
- case OleDbType.VarWChar : return Types.VARCHAR;\r
- case OleDbType.WChar : return Types.VARCHAR;\r
- default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
- }\r
-\r
- #endregion // Methods\r
- }\r
- }\r
-}\r
+++ /dev/null
-//
-// System.Data.OleDb.OleDbDataReader
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Data.Common;
-using System.Data.ProviderBase;
-
-using java.sql;
-
-namespace System.Data.OleDb
-{
- public sealed class OleDbDataReader : AbstractDataReader
- {
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- internal OleDbDataReader(OleDbCommand command) : base(command)
- {
- }
-
- #endregion // Constructors
-
- #region Methods
-
- protected sealed override SystemException CreateException(string message, SQLException e)
- {
- return new OleDbException(message,e, (OleDbConnection)_command.Connection);
- }
-
- protected sealed override SystemException CreateException(java.io.IOException e)
- {
- return new OleDbException(e, (OleDbConnection)_command.Connection);
- }
-
- public override String GetDataTypeName(int columnIndex)
- {
- try {
- string jdbcTypeName = Results.getMetaData().getColumnTypeName(columnIndex + 1);
-
- return OleDbConvert.JdbcTypeNameToDbTypeName(jdbcTypeName);
- }
- catch (SQLException e) {
- throw CreateException(e);
- }
- }
-
- protected override int GetProviderType(int jdbcType)
- {
- return (int)OleDbConvert.JdbcTypeToOleDbType(jdbcType);
- }
-
- [MonoNotSupported("")]
- public OleDbDataReader GetData (int ordinal)
- {
- throw new NotImplementedException ();
- }
-
- #endregion // Methods
- }
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.OleDb.OleDbError
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-namespace System.Data.OleDb
-{
- using java.sql;
- using System.Data.Common;
- using System.Data.ProviderBase;
-
- [Serializable]
- public sealed class OleDbError : AbstractDbError
- {
-
- internal OleDbError(SQLException e, AbstractDBConnection connection) : base(e, connection) {
- }
-
- public String Message
- {
- get
- {
- return DbMessage;
- }
- }
-
- public int NativeError
- {
- get
- {
- return DbErrorCode;
- }
- }
-
- public String Source
- {
- get
- {
- return DbSource;
- }
- }
-
- public String SQLState
- {
- get
- {
- return DbSQLState;
- }
- }
-
- public override string ToString ()
- {
- string toStr;
-
- toStr = String.Format("OleDbError: {0}. {1}", Message, _e.StackTrace);
- return toStr;
-
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.OleDb.OleDbErrorCollection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-namespace System.Data.OleDb
-{
-
-
- using System.Collections;
- using java.sql;
- using System.Data.Common;
- using System.Data.ProviderBase;
-
- [Serializable]
- public sealed class OleDbErrorCollection : AbstractDbErrorCollection
- {
- internal OleDbErrorCollection(SQLException e, AbstractDBConnection connection) : base(e, connection) {
- }
- /**
- * Gets the error at the specified index.
- *
- * @param index of the error
- * @return Error on specified index
- */
- public OleDbError this[int index]
- {
- get
- {
- return (OleDbError)GetDbItem(index);
- }
- }
-
-#if NET_2_0
- public void CopyTo (OleDbError [] array, int index)
- {
- base.CopyTo (array, index);
- }
-
-#endif
-
- protected override AbstractDbError CreateDbError(SQLException e, AbstractDBConnection connection) {
- return new OleDbError(e, connection);
- }
-
- }
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.OleDb.OleDbException\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-\r
-namespace System.Data.OleDb\r
-{\r
-\r
- using java.sql;\r
- using System.Text;\r
- using System.Data.Common;\r
- using System.Data.ProviderBase;\r
-\r
- /*\r
- * CURRENT LIMITATIONS\r
- * 1. Constructor for serialization SqlException(SerializationInfo info, StreamingContext sc) \r
- * is not supported.\r
- * 2. Method "void GetObjectData(...,...)" is not supported (serialization)\r
- */\r
-#if NET_2_0\r
- public sealed class OleDbException : AbstractDbException\r
- {\r
- internal OleDbException (Exception cause, OleDbConnection connection) : base (cause, connection) { }\r
-\r
- internal OleDbException (SQLException cause, OleDbConnection connection) : base (cause, connection) { }\r
-\r
- internal OleDbException (string message, SQLException cause, OleDbConnection connection) : base (message, cause, connection) { }\r
-\r
- protected override AbstractDbErrorCollection DbErrors {\r
- get {\r
- return Errors;\r
- }\r
- }\r
-\r
- public OleDbErrorCollection Errors {\r
- get {\r
- return new OleDbErrorCollection (_cause, _connection);\r
- }\r
- }\r
-\r
- public override int ErrorCode {\r
- get {\r
- return DbErrorCode;\r
- }\r
- }\r
- }\r
-#else\r
- public sealed class OleDbException : System.Runtime.InteropServices.ExternalException\r
- {\r
- private class OleDbExceptionImpl : AbstractDbException {\r
- internal OleDbExceptionImpl(Exception cause, OleDbConnection connection) : base(cause, connection) {}\r
-\r
- internal OleDbExceptionImpl(SQLException cause, OleDbConnection connection) : base(cause, connection) {}\r
-\r
- internal OleDbExceptionImpl(string message, SQLException cause, OleDbConnection connection) : base(message, cause, connection) {}\r
-\r
- protected override AbstractDbErrorCollection DbErrors {\r
- get {\r
- return Errors;\r
- }\r
- }\r
-\r
- public OleDbErrorCollection Errors {\r
- get {\r
- return new OleDbErrorCollection(_cause, _connection);\r
- }\r
- }\r
-\r
- public int ErrorCode {\r
- get {\r
- return DbErrorCode;\r
- }\r
- }\r
- }\r
- \r
- OleDbExceptionImpl _impl;\r
-\r
- internal OleDbException(Exception cause, OleDbConnection connection) : base(null, cause) {\r
- _impl = new OleDbExceptionImpl(cause, connection);\r
- }\r
-\r
- internal OleDbException(SQLException cause, OleDbConnection connection) : base(null, cause) {\r
- _impl = new OleDbExceptionImpl(cause, connection);\r
- }\r
-\r
- internal OleDbException(string message, SQLException cause, OleDbConnection connection) : base(null, cause) {\r
- _impl = new OleDbExceptionImpl(message, cause, connection);\r
- }\r
- /**\r
- * Gets a collection of one or more SqlError objects that give detailed \r
- * information about exceptions generated by the SQL Server .NET Data Provider.\r
- * @return collection of SqlError objects\r
- */\r
- public OleDbErrorCollection Errors\r
- {\r
- get\r
- {\r
- return (OleDbErrorCollection)_impl.Errors;\r
- }\r
- }\r
-\r
- /**\r
- * Gets the error code of the error.\r
- * @return The error code of the error.\r
- */\r
- public override int ErrorCode\r
- {\r
- get\r
- {\r
- return base.HResult;\r
- }\r
- }\r
-\r
- \r
- /**\r
- * Gets the name of the OLE DB provider that generated the error.\r
- * @return the name of the OLE DB provider that generated the error. \r
- */\r
- public override String Source\r
- {\r
- get\r
- {\r
- return _impl.Source;\r
- }\r
- }\r
-\r
- public override string Message {\r
- get {\r
- return _impl.Message;\r
- }\r
- }\r
-\r
- }\r
-#endif\r
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.OleDb.OleDbParameter
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System;
-using System.Text;
-using System.Data;
-using System.Data.Common;
-using System.Data.ProviderBase;
-
-using java.sql;
-using java.lang;
-using System.Globalization;
-
-namespace System.Data.OleDb
-{
- public sealed class OleDbParameter : AbstractDbParameter
- {
-
- #region Fields
-
- private OleDbType _oleDbType = OleDbType.VarWChar;
- private bool _isOracleRefCursor = false;
-
- #endregion // Fields
-
- #region Constructors
-
- public OleDbParameter()
- {
- }
-
- public OleDbParameter(String parameterName, Object value)
- : this (parameterName, OleDbType.VarWChar, 0, ParameterDirection.Input,
- false, 0, 0, String.Empty, DataRowVersion.Current, value)
- {
- IsDbTypeSet = false;
- }
-
- public OleDbParameter(String parameterName, OleDbType dbType)
- : this (parameterName, dbType, 0, ParameterDirection.Input,
- false, 0, 0, String.Empty, DataRowVersion.Current, null)
- {
- }
-
- public OleDbParameter(String parameterName, OleDbType dbType, int size)
- : this (parameterName, dbType, size, ParameterDirection.Input,
- false, 0, 0, String.Empty, DataRowVersion.Current, null)
- {
- }
-
- public OleDbParameter(String parameterName, OleDbType dbType, int size,
- String sourceColumn)
- : this (parameterName, dbType, size, ParameterDirection.Input,
- false, 0, 0, sourceColumn, DataRowVersion.Current, null)
- {
- }
-
-
- public OleDbParameter(String parameterName,
- OleDbType dbType,
- int size,
- ParameterDirection direction,
- bool isNullable,
- byte precision,
- byte scale,
- String sourceColumn,
- DataRowVersion sourceVersion,
- Object value)
- {
- ParameterName = parameterName;
- OleDbType = dbType;
- Size = size;
- Direction = direction;
- IsNullable = isNullable;
- Precision = precision;
- Scale = scale;
- SourceColumn = sourceColumn;
- SourceVersion = sourceVersion;
- Value = value;
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public override DbType DbType
- {
- get { return OleDbConvert.OleDbTypeToDbType(_oleDbType); }
- set { OleDbType = OleDbConvert.DbTypeToOleDbType(value); }
- }
-
- public OleDbType OleDbType
- {
- get { return _oleDbType; }
- set {
- _oleDbType = value;
- IsDbTypeSet = true;
- }
- }
-
-#if NET_2_0
- public new byte Precision
- {
- get { return base.Precision; }
- set { base.Precision = value; }
- }
-
- public new byte Scale
- {
- get { return base.Scale; }
- set { base.Scale = value; }
- }
-#endif
-
- public new Object Value
- {
- get { return base.Value; }
- set {
- if (!IsDbTypeSet && (value != null) && (value != DBNull.Value)) {
- _oleDbType = OleDbConvert.ValueTypeToOleDbType(value.GetType());
- }
- base.Value = value;
- }
- }
-
- protected internal sealed override bool IsSpecial {
- get {
- return (Direction == ParameterDirection.Output) && IsOracleRefCursor;
- }
- }
-
-
- internal bool IsOracleRefCursor
- {
- get { return _isOracleRefCursor; }
- set { _isOracleRefCursor = value; }
- }
-
- #endregion // Properties
-
- #region Methods
-
- protected internal sealed override object ConvertValue(object value)
- {
- // can not convert null or DbNull to other types
- if (value == null || value == DBNull.Value) {
- return value;
- }
-
- // FIXME : some other way to do this?
- if (OleDbType == OleDbType.Binary) {
- return value;
- }
- // .NET throws an exception to the user.
- object convertedValue = value;
-
- // note : if we set user parameter jdbc type inside prepare interbal, the db type is not set
- if (value is IConvertible && (IsDbTypeSet || IsJdbcTypeSet)) {
- OleDbType oleDbType = (IsDbTypeSet) ? OleDbType : OleDbConvert.JdbcTypeToOleDbType((int)JdbcType);
- Type to = OleDbConvert.OleDbTypeToValueType(oleDbType);
- if (!(value is DateTime && to == DbTypes.TypeOfTimespan)) //anyway will go by jdbc type
- convertedValue = Convert.ChangeType(value,to);
- }
- return convertedValue;
- }
-
- protected internal sealed override void SetParameterName(ResultSet res)
- {
- ParameterName = res.getString("COLUMN_NAME");
-
- if (ParameterName.StartsWith("@")) {
- ParameterName = ParameterName.Remove(0,1);
- }
- }
-
- protected internal sealed override void SetParameterDbType(ResultSet res)
- {
- int jdbcType = res.getInt("DATA_TYPE");
- // FIXME : is that correct?
- if (jdbcType == Types.OTHER) {
- string typeName = res.getString("TYPE_NAME");
- if (String.Compare ("BLOB", typeName, true, CultureInfo.InvariantCulture) == 0) {
- jdbcType = Types.BLOB;
- }
- else if (String.Compare ("CLOB", typeName, true, CultureInfo.InvariantCulture) == 0) {
- jdbcType = Types.CLOB;
- }
- else if (String.Compare ("FLOAT", typeName, true, CultureInfo.InvariantCulture) == 0) {
- jdbcType = Types.FLOAT;
- }
- else if (String.Compare ("NVARCHAR2", typeName, true, CultureInfo.InvariantCulture) == 0) {
- jdbcType = Types.VARCHAR;
- }
- else if (String.Compare ("NCHAR", typeName, true, CultureInfo.InvariantCulture) == 0) {
- jdbcType = Types.VARCHAR;
- }
- }
- OleDbType = OleDbConvert.JdbcTypeToOleDbType(jdbcType);
- JdbcType = jdbcType;
- }
-
-#if NET_2_0
- public void ResetOleDbType ()
- {
- IsDbTypeSet = false;
- }
-
- public override void ResetDbType ()
- {
- ResetOleDbType ();
- }
-#endif
-
- protected internal sealed override void SetSpecialFeatures(ResultSet res)
- {
- IsOracleRefCursor = (res.getString("TYPE_NAME") == "REF CURSOR");
- }
-
- protected internal sealed override int JdbcTypeFromProviderType()
- {
- return OleDbConvert.OleDbTypeToJdbcType(OleDbType);
- }
-
- #endregion // Methods
-
- }
-}
+++ /dev/null
-//\r
-// System.Data.ProviderBase.AbstractDbCommand\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Text;\r
-using System.Text.RegularExpressions;\r
-using System.Collections;\r
-using System.Data;\r
-using System.Data.Common;\r
-\r
-using java.sql;\r
-using java.io;\r
-\r
-#if !USE_DOTNET_REGEXP\r
-using java.util.regex;\r
-#endif\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public abstract class AbstractDbCommand : DbCommand, ICloneable\r
- {\r
- #region ProcedureColumnCache\r
-\r
- internal sealed class ProcedureColumnCache : AbstractDbMetaDataCache\r
- {\r
- internal ArrayList GetProcedureColumns(AbstractDBConnection connection, String commandText,AbstractDbCommand command) \r
- {\r
- string connectionCatalog = connection.JdbcConnection.getCatalog();\r
- string key = String.Concat(connection.ConnectionString, connectionCatalog, commandText);\r
- System.Collections.Hashtable cache = Cache;\r
-\r
- ArrayList col = cache[key] as ArrayList;\r
-\r
- if (null != col) {\r
- return col;\r
- }\r
- \r
- col = connection.GetProcedureColumns(commandText,command);\r
- if (col != null)\r
- cache[key] = col;\r
- return col; \r
- }\r
- }\r
-\r
- #endregion\r
-\r
- #region SqlStatementsHelper\r
-\r
- internal sealed class SqlStatementsHelper\r
- {\r
- #region Fields\r
-#if USE_DOTNET_REGEXP \r
- internal static readonly Regex NamedParameterStoredProcedureRegExp = new Regex(@"^\s*{?\s*((?<RETVAL>@\w+)\s*=\s*)?call\s+(?<PROCNAME>(((\[[^\]]*\])|([^\.\(])*)\s*\.\s*){0,2}(\[[^\]]*\]|((\s*[^\.\(\)\{\}\s])+)))\s*(\(\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)?\s*(,\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)\s*)*\))?\s*}?\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- internal static readonly Regex SimpleParameterStoredProcedureRegExp = new Regex(@"^\s*{?\s*((?<RETVAL>\?)\s*=\s*)?call\s+(?<PROCNAME>(((\[[^\]]*\])|([^\.\(])*)\s*\.\s*){0,2}(\[[^\]]*\]|((\s*[^\.\(\)\{\}\s])+)))\s*(\(\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)?\s*(,\s*(?<USERPARAM>((""([^""]|(""""))*"")|('([^']|(''))*')|[^,])*)\s*)*\))?\s*}?\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- internal static readonly Regex ForBrowseStatementReqExp = new Regex(@"\s+FOR\s+BROWSE\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
-#else\r
- internal static readonly Pattern NamedParameterStoredProcedureRegExp = Pattern.compile(@"^\s*\{?\s*(?:(@\w+)\s*=\s*)?call\s+((?:(?:(?:\[[^\]]*\])|(?:[^\.\(\)\{\}\[\]])*)\s*\.\s*){0,2}(?:\[[^\]]*\]|(?:(?:\s*[^\.\(\)\{\}\[\]])+)))\s*(?:\((.*)\))?\s*\}?\s*$", Pattern.CASE_INSENSITIVE);\r
- internal static readonly Pattern SimpleParameterStoredProcedureRegExp = Pattern.compile(@"^\s*\{?\s*(?:(\?)\s*=\s*)?call\s+((?:(?:(?:\[[^\]]*\])|(?:[^\.\(\)\{\}\[\]])*)\s*\.\s*){0,2}(?:\[[^\]]*\]|(?:(?:\s*[^\.\(\)\{\}\[\]])+)))\s*(?:\((.*)\))?\s*\}?\s*$", Pattern.CASE_INSENSITIVE);\r
- internal static readonly Pattern ForBrowseStatementReqExp = Pattern.compile(@"\s+FOR\s+BROWSE\s*$", Pattern.CASE_INSENSITIVE);\r
-#endif\r
-\r
- internal static readonly SimpleRegex NamedParameterRegExp = new SqlParamsRegex();\r
- internal static readonly SimpleRegex SimpleParameterRegExp = new OleDbParamsRegex();\r
-\r
- internal static readonly SimpleRegex CompoundStatementSplitterReqExp = new CharacterSplitterRegex(';');\r
- internal static readonly SimpleRegex ProcedureParameterSplitterReqExp = new CharacterSplitterRegex(',');\r
-\r
- #endregion // Fields\r
- }\r
-\r
- #endregion // SqlStatementsHelper\r
-\r
- #region Fields\r
-\r
- string _commandText;\r
- int _commandTimeout;\r
- CommandType _commandType;\r
- bool _designTimeVisible;\r
- UpdateRowSource _updatedRowSource;\r
-\r
- private DbParameterCollection _parameters;\r
- private java.sql.Statement _statement;\r
- private AbstractDBConnection _connection;\r
- private AbstractTransaction _transaction;\r
- private bool _isCommandPrepared;\r
- private CommandBehavior _behavior;\r
- private ArrayList _internalParameters;\r
- string _javaCommandText;\r
- private int _recordsAffected;\r
- private ResultSet _currentResultSet;\r
- private DbDataReader _currentReader;\r
- private bool _nullParametersInPrepare;\r
- private bool _hasResultSet;\r
- private bool _explicitPrepare;\r
-\r
- static ProcedureColumnCache _procedureColumnCache = new ProcedureColumnCache();\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public AbstractDbCommand(\r
- String cmdText,\r
- AbstractDBConnection connection,\r
- AbstractTransaction transaction)\r
- {\r
- _connection = connection;\r
- _commandText = cmdText;\r
- _transaction = transaction;\r
-\r
- _commandTimeout = 30;\r
- _commandType = CommandType.Text;\r
- _designTimeVisible = true;\r
- _updatedRowSource = UpdateRowSource.Both;\r
-\r
- _isCommandPrepared = false;\r
- _explicitPrepare = false;\r
- _recordsAffected = -1;\r
- if (connection != null) {\r
- connection.AddReference(this);\r
- }\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public override int CommandTimeout {\r
- get { return _commandTimeout; }\r
- set { _commandTimeout = value; }\r
- }\r
-\r
- public override CommandType CommandType {\r
- get { return _commandType; }\r
- set { _commandType = value; }\r
- }\r
-\r
- public override bool DesignTimeVisible {\r
- get { return _designTimeVisible; }\r
- set { _designTimeVisible = value; }\r
- } \r
-\r
- public override UpdateRowSource UpdatedRowSource {\r
- get { return _updatedRowSource; }\r
- set { _updatedRowSource = value; }\r
- }\r
-\r
- protected override DbParameterCollection DbParameterCollection\r
- {\r
- get {\r
- if (_parameters == null) {\r
- _parameters = CreateParameterCollection(this);\r
- }\r
- return _parameters; \r
- }\r
- }\r
-\r
- protected override DbConnection DbConnection\r
- {\r
- get { return (DbConnection)_connection; }\r
- set {\r
- if (value == _connection) {\r
- return;\r
- }\r
-\r
- if (_currentReader != null && !_currentReader.IsClosed) {\r
- throw ExceptionHelper.ConnectionIsBusy(this.GetType().Name,((AbstractDBConnection)_connection).InternalState);\r
- }\r
- if (_connection != null) {\r
- _connection.RemoveReference(this);\r
- }\r
- _connection = (AbstractDBConnection) value;\r
- if (_connection != null) {\r
- _connection.AddReference(this);\r
- }\r
- }\r
- }\r
-\r
- protected override DbTransaction DbTransaction\r
- {\r
- get { return _transaction != null ? _transaction.ActiveTransaction : null; }\r
- set { _transaction = (AbstractTransaction)value; }\r
- }\r
-\r
- public override string CommandText\r
- {\r
- get { return _commandText; }\r
- set { \r
- if (CommandText == null || String.Compare(CommandText, value, true) != 0) {\r
- _commandText = value;\r
- _isCommandPrepared = false;\r
- _explicitPrepare = false;\r
- }\r
- }\r
- }\r
-\r
- protected virtual string InternalCommandText {\r
- get { return CommandText; }\r
- //set { CommandText = value; }\r
- }\r
-\r
- internal CommandBehavior Behavior\r
- {\r
- get { return _behavior; }\r
- set { _behavior = value; }\r
- }\r
-\r
- bool IsCommandPrepared\r
- {\r
- get { return _isCommandPrepared; }\r
- set { _isCommandPrepared = value; }\r
- }\r
-\r
- bool NullParametersInPrepare\r
- {\r
- get { return _nullParametersInPrepare; }\r
- set { _nullParametersInPrepare = value; }\r
- }\r
-\r
- protected ArrayList InternalParameters\r
- {\r
- get {\r
- if (_internalParameters == null) {\r
- _internalParameters = new ArrayList();\r
- }\r
- return _internalParameters;\r
- }\r
- }\r
-\r
- // Number of records affected by execution of batch statement\r
- // -1 for SELECT statements.\r
- internal int RecordsAffected\r
- {\r
- get {\r
- return _recordsAffected;\r
- }\r
- }\r
-\r
- // AbstractDbCommand acts as IEnumerator over JDBC statement\r
- // AbstractDbCommand.CurrentResultSet corresponds to IEnumerator.Current\r
- protected internal virtual ResultSet CurrentResultSet\r
- {\r
- get { \r
- try {\r
- if (_currentResultSet == null && _hasResultSet) {\r
- _currentResultSet = _statement.getResultSet(); \r
- }\r
- return _currentResultSet;\r
- }\r
- catch(SQLException e) {\r
- throw new Exception(e.Message, e);\r
- }\r
- }\r
- }\r
-\r
- protected internal java.sql.Statement Statement\r
- {\r
- get { return _statement; }\r
- }\r
-#if USE_DOTNET_REGEX\r
- protected virtual Regex StoredProcedureRegExp\r
-#else\r
- protected virtual Pattern StoredProcedureRegExp\r
-#endif\r
- {\r
- get { return SqlStatementsHelper.SimpleParameterStoredProcedureRegExp; }\r
- }\r
-\r
- protected virtual SimpleRegex ParameterRegExp\r
- {\r
- get { return SqlStatementsHelper.SimpleParameterRegExp; }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- protected abstract DbParameter CreateParameterInternal();\r
-\r
- protected abstract void CheckParameters();\r
-\r
- protected abstract DbDataReader CreateReader();\r
-\r
- protected abstract DbParameterCollection CreateParameterCollection(AbstractDbCommand parent);\r
-\r
- protected internal abstract SystemException CreateException(SQLException e);\r
-\r
- public override int ExecuteNonQuery ()\r
- {\r
- IDataReader reader = null;\r
- try {\r
- reader = ExecuteReader ();\r
- }\r
- finally {\r
- if (reader != null)\r
- reader.Close (); \r
- }\r
- return reader.RecordsAffected;\r
- }\r
-\r
- public override object ExecuteScalar ()\r
- {\r
- IDataReader reader = ExecuteReader(CommandBehavior.SequentialAccess);\r
- \r
- try {\r
- do {\r
- if (reader.FieldCount > 0 && reader.Read ())\r
- return reader.GetValue (0); \r
- }\r
- while (reader.NextResult ());\r
- return null;\r
- } finally {\r
- reader.Close();\r
- }\r
- }\r
-\r
- public virtual void ResetCommandTimeout ()\r
- {\r
- _commandTimeout = 30;\r
- }\r
-\r
- public override void Cancel()\r
- {\r
- try {\r
- if (_statement != null)\r
- _statement.cancel();\r
- }\r
- catch {\r
- // MSDN says : "If there is nothing to cancel, nothing happens. \r
- // However, if there is a command in process, and the attempt to cancel fails, \r
- // no exception is generated."\r
- }\r
- }\r
- \r
- protected virtual bool SkipParameter(DbParameter parameter)\r
- {\r
- return false;\r
- }\r
-\r
- protected sealed override DbParameter CreateDbParameter()\r
- {\r
- return CreateParameterInternal();\r
- }\r
-\r
- internal ArrayList DeriveParameters(string procedureName, bool throwIfNotExist)\r
- {\r
- try {\r
- ArrayList col = _procedureColumnCache.GetProcedureColumns((AbstractDBConnection)Connection, procedureName, this);\r
- if (col == null) {\r
- if (throwIfNotExist)\r
- throw ExceptionHelper.NoStoredProcedureExists(procedureName);\r
- col = new ArrayList();\r
- }\r
-\r
- return col;\r
- }\r
- catch(SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- string CreateTableDirectCommandText(string tableNames) {\r
- string forBrowse = String.Empty;\r
- if ((Behavior & CommandBehavior.KeyInfo) != 0) {\r
- AbstractDBConnection connection = (AbstractDBConnection)Connection;\r
- if (connection != null) {\r
- string dbname = connection.JdbcConnection.getMetaData().getDatabaseProductName();\r
- if (dbname == "Microsoft SQL Server") //must add "FOR BROWSE" for selects\r
- forBrowse = " FOR BROWSE";\r
- }\r
- }\r
-\r
- string[] names = tableNames.Split(',');\r
- StringBuilder sb = new StringBuilder();\r
-\r
- for(int i = 0; i < names.Length; i++) {\r
- sb.Append("SELECT * FROM ");\r
- sb.Append(names[i]);\r
- sb.Append(forBrowse);\r
- sb.Append(';');\r
- }\r
- \r
- if(names.Length <= 1) {\r
- sb.Remove(sb.Length - 1,1);\r
- }\r
- return sb.ToString();\r
- }\r
-\r
- private string PrepareCommandTextAndParameters()\r
- {\r
- NullParametersInPrepare = false;\r
- switch (CommandType) {\r
- case CommandType.TableDirect :\r
- return CreateTableDirectCommandText(CommandText);\r
- case CommandType.StoredProcedure :\r
- return CreateStoredProcedureCommandTextSimple (InternalCommandText, Parameters, DeriveParameters (InternalCommandText, false));\r
- case CommandType.Text :\r
-\r
- int userParametersPosition = 0;\r
- int charsConsumed = 0;\r
- StringBuilder sb = new StringBuilder(CommandText.Length);\r
-\r
- for (SimpleMatch match = SqlStatementsHelper.CompoundStatementSplitterReqExp.Match(CommandText);\r
- match.Success;\r
- match = match.NextMatch()) {\r
-\r
- int length = match.Length;\r
-\r
- if (length == 0)\r
- continue;\r
-\r
- int start = match.Index;\r
- string value = match.Value;\r
-\r
- sb.Append(CommandText, charsConsumed, start-charsConsumed);\r
- charsConsumed = start + length;\r
-\r
-#if USE_DOTNET_REGEX\r
- Match storedProcMatch = StoredProcedureRegExp.Match(value);\r
- // count parameters for all kinds of simple statements \r
- userParametersPosition +=\r
- (storedProcMatch.Success) ?\r
- // statement is stored procedure call\r
- CreateStoredProcedureCommandText(sb, value, storedProcMatch, Parameters, userParametersPosition) :\r
- // statement is a simple SQL query \r
- PrepareSimpleQuery(sb, value, Parameters, userParametersPosition); \r
-#else\r
- Matcher storedProcMatch = StoredProcedureRegExp.matcher((java.lang.CharSequence)(object)value);\r
- userParametersPosition +=\r
- (storedProcMatch.find()) ?\r
- // statement is stored procedure call\r
- CreateStoredProcedureCommandText(sb, value, storedProcMatch, Parameters, userParametersPosition) :\r
- // statement is a simple SQL query \r
- PrepareSimpleQuery(sb, value, Parameters, userParametersPosition);\r
-#endif\r
- }\r
-\r
- sb.Append(CommandText, charsConsumed, CommandText.Length-charsConsumed);\r
-\r
- return sb.ToString();\r
- }\r
- return null;\r
- }\r
-\r
- string CreateStoredProcedureCommandTextSimple(string procedureName, IDataParameterCollection userParams, IList derivedParams) {\r
- StringBuilder sb = new StringBuilder();\r
-\r
- int curUserPos = 0;\r
- int curDerivedPos = 0;\r
- bool addParas = true;\r
- string trimedProcedureName = (procedureName != null) ? procedureName.TrimEnd() : String.Empty;\r
- if (trimedProcedureName.Length > 0 && trimedProcedureName[trimedProcedureName.Length-1] == ')')\r
- addParas = false;\r
- \r
- AbstractDbParameter derivedParam = (derivedParams.Count > 0) ? (AbstractDbParameter)derivedParams[curDerivedPos] : null;\r
- if (derivedParam != null) {\r
- if (derivedParam.Direction == ParameterDirection.ReturnValue)\r
- curDerivedPos++;\r
- else\r
- derivedParam = null; //play as if there is no retval parameter\r
- }\r
- AbstractDbParameter returnValueParameter = GetReturnParameter (userParams);\r
- if (returnValueParameter != null) {\r
- curUserPos++;\r
- InternalParameters.Add(returnValueParameter);\r
- sb.Append("{? = call ");\r
-\r
- if (derivedParam != null && !returnValueParameter.IsDbTypeSet) {\r
- returnValueParameter.JdbcType = derivedParam.JdbcType;\r
- }\r
- }\r
- else {\r
- sb.Append("{call ");\r
- }\r
-\r
- sb.Append(procedureName);\r
- if (addParas)\r
- sb.Append('(');\r
-\r
- bool needComma = false;\r
- for (int i = curDerivedPos; i < derivedParams.Count; i++) {\r
- AbstractDbParameter derivedParameter = (AbstractDbParameter)derivedParams[curDerivedPos++];\r
- \r
- bool addParam = false;\r
-\r
- if (derivedParameter.IsSpecial) {\r
- // derived parameter is special - never appears in user parameters or user values\r
- InternalParameters.Add((AbstractDbParameter)derivedParameter.Clone());\r
- addParam = true;\r
- }\r
- else {\r
- AbstractDbParameter userParameter = GetUserParameter(derivedParameter.Placeholder, userParams, curUserPos);\r
- if (userParameter != null) {\r
- curUserPos++;\r
- InternalParameters.Add(userParameter);\r
- addParam = true;\r
-\r
- if (derivedParameter != null && !userParameter.IsDbTypeSet) {\r
- userParameter.JdbcType = derivedParameter.JdbcType;\r
- }\r
- }\r
- }\r
-\r
- if (addParam) {\r
- if (needComma)\r
- sb.Append(',');\r
- else\r
- needComma = true;\r
-\r
- sb.Append('?');\r
- }\r
- }\r
-\r
- for (int i = curUserPos; i < userParams.Count; i++) {\r
- if (needComma)\r
- sb.Append(',');\r
- else\r
- needComma = true;\r
-\r
- AbstractDbParameter userParameter = (AbstractDbParameter)userParams[curUserPos++];\r
- InternalParameters.Add(userParameter);\r
-\r
- sb.Append('?');\r
- }\r
-\r
- if (addParas)\r
- sb.Append(')');\r
- sb.Append('}');\r
- return sb.ToString();\r
- }\r
-\r
- /// <summary>\r
- /// We suppose that user parameters are in the same order as devived parameters except the special cases\r
- /// (return value, oracle ref cursors etc.)\r
- /// </summary>\r
- //protected virtual string CreateStoredProcedureCommandText(string procedureName, IList userParametersList, int userParametersListStart/*, int userParametersListCount*/, string[] userValuesList, ArrayList derivedParametersList)\r
-#if USE_DOTNET_REGEX\r
- int CreateStoredProcedureCommandText(StringBuilder sb, string sql, Match match, IDataParameterCollection userParams, int userParamsStartPosition)\r
-#else\r
- int CreateStoredProcedureCommandText(StringBuilder sb, string sql, Matcher match, IDataParameterCollection userParams, int userParamsStartPosition)\r
-#endif\r
- {\r
- int curUserPos = userParamsStartPosition;\r
-#if USE_DOTNET_REGEX\r
- Group procNameGroup = null;\r
-\r
- for (Match procNameMatch = match; procNameMatch.Success; procNameMatch = procNameMatch.NextMatch()){\r
- procNameGroup = match.Groups["PROCNAME"];\r
- if (!procNameGroup.Success) {\r
- continue;\r
- }\r
- }\r
-\r
- if (procNameGroup == null || !procNameGroup.Success)\r
- throw new ArgumentException("Not a stored procedure call: '{0}'", sql);\r
-\r
- ArrayList derivedParameters = DeriveParameters(procNameGroup.Value, false);\r
-#else\r
- ArrayList derivedParameters = DeriveParameters(match.group(2).Trim(), false);\r
-#endif\r
- int curDerivedPos = 0;\r
-\r
- AbstractDbParameter retValderivedParameter = curDerivedPos < derivedParameters.Count ?\r
- (AbstractDbParameter)derivedParameters[curDerivedPos] : null;\r
- if (retValderivedParameter != null && retValderivedParameter.Direction == ParameterDirection.ReturnValue)\r
- curDerivedPos++;\r
-\r
- int queryCurrentPosition = 0;\r
- \r
-#if USE_DOTNET_REGEX\r
- for (Match retValMatch = match; retValMatch.Success; retValMatch = retValMatch.NextMatch()){\r
- Group retval = retValMatch.Groups["RETVAL"];\r
- if (!retval.Success) {\r
- continue;\r
- }\r
-\r
- int retvalIndex = retval.Index;\r
- string retvalValue = retval.Value;\r
- int retvalLength = retval.Length;\r
-#else\r
- int retvalIndex = match.start(1);\r
- for (;retvalIndex >= 0;) {\r
- string retvalValue = match.group(1);\r
- int retvalLength = retvalValue.Length;\r
-#endif\r
-\r
- sb.Append(sql, queryCurrentPosition, retvalIndex);\r
- AbstractDbParameter userParameter = GetUserParameter(retvalValue, userParams, curUserPos);\r
- if (userParameter != null) {\r
- sb.Append('?');\r
- InternalParameters.Add(userParameter);\r
-\r
- if (retValderivedParameter != null && !userParameter.IsDbTypeSet) {\r
- userParameter.JdbcType = retValderivedParameter.JdbcType;\r
- }\r
-\r
- curUserPos++;\r
- }\r
- else {\r
- sb.Append(retvalValue);\r
- }\r
-\r
- queryCurrentPosition = (retvalIndex + retvalLength);\r
-\r
- break;\r
- }\r
-\r
-#if USE_DOTNET_REGEX\r
- sb.Append(sql, queryCurrentPosition, procNameGroup.Index + procNameGroup.Length - queryCurrentPosition);\r
- queryCurrentPosition = procNameGroup.Index + procNameGroup.Length;\r
-#else\r
- sb.Append(sql, queryCurrentPosition, match.end(2) - queryCurrentPosition);\r
- queryCurrentPosition = match.end(2);\r
-#endif\r
-\r
- bool hasUserParams = false;\r
-\r
-#if USE_DOTNET_REGEX\r
- must rewrite the regex to not parse params to have single code with java regex\r
-#else\r
- int paramsStart = match.start(3);\r
- if (paramsStart >= 0) {\r
-#endif\r
-\r
- hasUserParams = true;\r
- sb.Append(sql,queryCurrentPosition,paramsStart - queryCurrentPosition);\r
- queryCurrentPosition = paramsStart;\r
-\r
- for (SimpleMatch m = SqlStatementsHelper.ProcedureParameterSplitterReqExp.Match(match.group(3));\r
- m.Success;m = m.NextMatch()) {\r
-\r
- SimpleCapture parameterCapture = m;\r
- sb.Append(sql,queryCurrentPosition,paramsStart + parameterCapture.Index - queryCurrentPosition);\r
-\r
- // advance in query\r
- queryCurrentPosition = paramsStart + parameterCapture.Index + parameterCapture.Length;\r
-\r
- AbstractDbParameter derivedParameter = curDerivedPos < derivedParameters.Count ?\r
- (AbstractDbParameter)derivedParameters[curDerivedPos++] : null;\r
- \r
- //check for special params\r
- while (derivedParameter != null && derivedParameter.IsSpecial) {\r
- // derived parameter is special - never appears in user parameters or user values\r
- InternalParameters.Add((AbstractDbParameter)derivedParameter.Clone());\r
- sb.Append('?');\r
- sb.Append(',');\r
-\r
- derivedParameter = curDerivedPos < derivedParameters.Count ?\r
- (AbstractDbParameter)derivedParameters[curDerivedPos++] : null;\r
- }\r
-\r
- AbstractDbParameter userParameter = GetUserParameter(parameterCapture.Value.Trim(), userParams, curUserPos);\r
-\r
- if (userParameter != null) {\r
- sb.Append('?');\r
- InternalParameters.Add(userParameter);\r
- if (derivedParameter != null && !userParameter.IsDbTypeSet) {\r
- userParameter.JdbcType = derivedParameter.JdbcType;\r
- }\r
- // advance in user parameters\r
- curUserPos++; \r
- }\r
- else {\r
- sb.Append(parameterCapture.Value);\r
- } \r
- } \r
- }\r
-\r
- bool addedSpecialParams = false;\r
-\r
- for (int i = curDerivedPos; i < derivedParameters.Count;) {\r
- AbstractDbParameter derivedParameter = (AbstractDbParameter)derivedParameters[i++];\r
- if (derivedParameter.IsSpecial) {\r
- // derived parameter is special - never appears in user parameters or user values\r
- if (!hasUserParams && !addedSpecialParams) {\r
- addedSpecialParams = true;\r
- curDerivedPos++;\r
- sb.Append('(');\r
- }\r
-\r
- for (;curDerivedPos < i;curDerivedPos++)\r
- sb.Append(',');\r
-\r
- InternalParameters.Add((AbstractDbParameter)derivedParameter.Clone());\r
- sb.Append('?');\r
- }\r
- }\r
-\r
- if (!hasUserParams && addedSpecialParams)\r
- sb.Append(')');\r
-\r
- sb.Append(sql,queryCurrentPosition,sql.Length - queryCurrentPosition);\r
- return curUserPos - userParamsStartPosition;\r
- }\r
-\r
- protected virtual AbstractDbParameter GetUserParameter(string parameterName, IList userParametersList, int userParametersListPosition)\r
- {\r
- if (userParametersListPosition < userParametersList.Count) {\r
- AbstractDbParameter param = (AbstractDbParameter)userParametersList[userParametersListPosition];\r
- if (param.Placeholder == parameterName)\r
- return param;\r
- }\r
- return null;\r
- }\r
-\r
- protected virtual AbstractDbParameter GetReturnParameter (IList userParametersList)\r
- {\r
- AbstractDbParameter param = GetUserParameter ("?", userParametersList, 0); \r
-\r
- if (param != null && param.Direction == ParameterDirection.ReturnValue)\r
- return param;\r
-\r
- return null;\r
- }\r
-\r
- int PrepareSimpleQuery(StringBuilder sb, string query, IList userParametersList, int userParametersListStart)\r
- {\r
- int queryCurrentPosition = 0;\r
- int userParametersListPosition = userParametersListStart;\r
-\r
- if (userParametersList.Count > 0) {\r
- for (SimpleMatch m = ParameterRegExp.Match(query);\r
- m.Success;m = m.NextMatch()) {\r
-\r
- SimpleCapture parameterCapture = m;\r
- sb.Append(query,queryCurrentPosition,parameterCapture.Index - queryCurrentPosition);\r
-\r
- // advance in query\r
- queryCurrentPosition = parameterCapture.Index + parameterCapture.Length; \r
-\r
- AbstractDbParameter userParameter = GetUserParameter(parameterCapture.Value, userParametersList, userParametersListPosition);\r
-\r
- if (userParameter != null) {\r
- if (IsNullParameter(userParameter)) {\r
- sb.Append("null");\r
- NullParametersInPrepare = true;\r
- }\r
- else {\r
- sb.Append('?');\r
- InternalParameters.Add(userParameter); \r
- } \r
- // advance in user parameters\r
- userParametersListPosition++; \r
- }\r
- else {\r
- sb.Append(parameterCapture.Value);\r
- }\r
- }\r
- }\r
-\r
- sb.Append(query,queryCurrentPosition,query.Length - queryCurrentPosition);\r
- int userParamsConsumed = userParametersListPosition - userParametersListStart;\r
-\r
- if ((Behavior & CommandBehavior.KeyInfo) == 0)\r
- return userParamsConsumed;\r
-\r
- AbstractDBConnection connection = (AbstractDBConnection)Connection;\r
- if (connection == null)\r
- return userParamsConsumed;\r
-\r
- string dbname = connection.JdbcConnection.getMetaData().getDatabaseProductName();\r
- if (dbname == "Microsoft SQL Server") { //must add "FOR BROWSE" for selects\r
-#if USE_DOTNET_REGEX\r
- if (!SqlStatementsHelper.ForBrowseStatementReqExp.IsMatch(query))\r
- sb.Append(" FOR BROWSE");\r
-#else\r
- if (!SqlStatementsHelper.ForBrowseStatementReqExp.matcher ((java.lang.CharSequence)(object)query).find ())\r
- sb.Append (" FOR BROWSE");\r
-#endif\r
- }\r
-\r
- return userParamsConsumed;\r
- }\r
-\r
- protected virtual bool IsNullParameter(AbstractDbParameter parameter)\r
- {\r
- return ((parameter.Value == null || parameter.Value == DBNull.Value) && !parameter.IsDbTypeSet);\r
- }\r
-\r
- protected virtual void PrepareInternalParameters()\r
- {\r
- InternalParameters.Clear();\r
- }\r
- \r
- protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)\r
- {\r
- AbstractDBConnection connection = (AbstractDBConnection)Connection;\r
- if (connection == null) {\r
- throw ExceptionHelper.ConnectionNotInitialized("ExecuteReader");\r
- }\r
-\r
- connection.IsExecuting = true;\r
-\r
- try {\r
- IDbTransaction transaction = Transaction;\r
- if ((transaction != null && transaction.Connection != connection) ||\r
- (transaction == null && !connection.JdbcConnection.getAutoCommit ())) {\r
- throw ExceptionHelper.TransactionNotInitialized ();\r
- }\r
-\r
- Behavior = behavior;\r
-\r
- PrepareInternalParameters(); \r
- PrepareInternal();\r
-\r
- // For SchemaOnly there is no need for statement execution\r
- if (Behavior != CommandBehavior.SchemaOnly) {\r
- _recordsAffected = -1;\r
-\r
- // FIXME: this causes SP in MS Sql Server to create no mor than one row.\r
- if ((Behavior & CommandBehavior.SingleRow) != 0) {\r
- _statement.setMaxRows (1);\r
- }\r
- \r
- if(_statement is PreparedStatement) {\r
- BindParameters(InternalParameters);\r
- _hasResultSet = ((PreparedStatement)_statement).execute();\r
- }\r
- else {\r
- _hasResultSet =_statement.execute(_javaCommandText); \r
- }\r
- \r
- if (!_hasResultSet) {\r
- int updateCount = _statement.getUpdateCount();\r
- if (updateCount >= 0) {\r
- AccumulateRecordsAffected(updateCount);\r
- _hasResultSet = true; //play as if we have resultset\r
- NextResultSet();\r
- }\r
- } \r
- }\r
- connection.IsFetching = true;\r
- try {\r
- _currentReader = CreateReader();\r
- }\r
- catch(Exception e) {\r
- connection.IsFetching = false;\r
- throw e;\r
- }\r
- return _currentReader;\r
- }\r
- catch(SQLException e) { \r
- throw CreateException(e);\r
- }\r
- finally {\r
- connection.IsExecuting = false;\r
- NullParametersInPrepare = false;\r
- }\r
- }\r
-\r
- public override void Prepare()\r
- {\r
- ((AbstractDBConnection)Connection).IsExecuting = true;\r
- try {\r
- CheckParameters();\r
- _explicitPrepare = true;\r
- }\r
- finally {\r
- ((AbstractDBConnection)Connection).IsExecuting = false;\r
- }\r
- }\r
-\r
- private void PrepareInternal()\r
- {\r
- if ((Connection == null) || (Connection.State != ConnectionState.Open)) {\r
- throw ExceptionHelper.ConnectionNotOpened("Prepare",(Connection != null) ? Connection.State.ToString() : "");\r
- }\r
-\r
- if (IsCommandPrepared) {\r
- // maybe we have to prepare the command again\r
- bool hasNullParameters = false;\r
- for(int i = 0; (i < Parameters.Count) && !hasNullParameters; i++) {\r
- AbstractDbParameter parameter = (AbstractDbParameter)Parameters[i];\r
- if (IsNullParameter(parameter)) {\r
- // if we still have null parameters - have to prepare agail\r
- IsCommandPrepared = false;\r
- hasNullParameters = true;\r
- }\r
- }\r
-\r
- if (!NullParametersInPrepare && hasNullParameters) {\r
- // if we prepeared using null parameters and now there is no null parameters - need to prepare again\r
- IsCommandPrepared = false;\r
- }\r
- }\r
-\r
- if (!IsCommandPrepared) {\r
-\r
- _javaCommandText = PrepareCommandTextAndParameters();\r
-\r
- java.sql.Connection jdbcCon = _connection.JdbcConnection;\r
-\r
- // For SchemaOnly we just prepare statement (for future use in GetSchemaTable)\r
- if (Behavior == CommandBehavior.SchemaOnly) {\r
- if (CommandType == CommandType.StoredProcedure)\r
- _statement = jdbcCon.prepareCall(_javaCommandText);\r
- else\r
- _statement = jdbcCon.prepareStatement(_javaCommandText); \r
- return;\r
- }\r
-\r
- if (CommandType == CommandType.StoredProcedure)\r
- _statement = jdbcCon.prepareCall(_javaCommandText);\r
- else {\r
- int internalParametersCount = InternalParameters.Count;\r
- if ( internalParametersCount > 0) {\r
- bool hasOnlyInputParameters = true;\r
- for(int i=0; i < internalParametersCount; i++) {\r
- AbstractDbParameter internalParameter = (AbstractDbParameter)InternalParameters[i];\r
- if (IsNullParameter(internalParameter)) {\r
- NullParametersInPrepare = true;\r
- }\r
-\r
- if ((internalParameter.Direction & ParameterDirection.Output) != 0){\r
- hasOnlyInputParameters = false;\r
- }\r
- }\r
-\r
- if (hasOnlyInputParameters) {\r
- _statement = jdbcCon.prepareStatement(_javaCommandText); \r
- }\r
- else { \r
- _statement = jdbcCon.prepareCall(_javaCommandText);\r
- }\r
- }\r
- else {\r
- if (_explicitPrepare) {\r
- _statement = jdbcCon.prepareStatement(_javaCommandText); \r
- }\r
- else {\r
- _statement = jdbcCon.createStatement(); \r
- }\r
- }\r
- }\r
- IsCommandPrepared = true;\r
- }\r
- }\r
-\r
- protected void BindParameters(ArrayList parameters)\r
- {\r
- for(int parameterIndex = 0; parameterIndex < parameters.Count; parameterIndex++) {\r
- AbstractDbParameter parameter = (AbstractDbParameter)parameters[parameterIndex];\r
- switch (parameter.Direction) {\r
- case ParameterDirection.Input :\r
- BindInputParameter(parameter,parameterIndex);\r
- break;\r
- case ParameterDirection.InputOutput:\r
- BindInputParameter(parameter,parameterIndex);\r
- BindOutputParameter(parameter,parameterIndex);\r
- break;\r
- case ParameterDirection.Output :\r
- BindOutputParameter(parameter,parameterIndex);\r
- break;\r
- case ParameterDirection.ReturnValue :\r
- BindOutputParameter(parameter,parameterIndex);\r
- break;\r
- }\r
- }\r
- }\r
- \r
- protected virtual void BindInputParameter(AbstractDbParameter parameter, int parameterIndex)\r
- {\r
- object value = parameter.ConvertedValue; \r
- // java parameters are 1 based, while .net are 0 based\r
- parameterIndex++; \r
- PreparedStatement preparedStatement = ((PreparedStatement)_statement);\r
-\r
- switch ((DbConvert.JavaSqlTypes)parameter.JdbcType) {\r
- case DbConvert.JavaSqlTypes.DATALINK:\r
- case DbConvert.JavaSqlTypes.DISTINCT:\r
- case DbConvert.JavaSqlTypes.JAVA_OBJECT:\r
- case DbConvert.JavaSqlTypes.OTHER:\r
- case DbConvert.JavaSqlTypes.REF:\r
- case DbConvert.JavaSqlTypes.STRUCT: {\r
- preparedStatement.setObject(parameterIndex, value, (int)parameter.JdbcType);\r
- return;\r
- }\r
- }\r
-\r
- if ((value is DBNull) || (value == null)) {\r
- preparedStatement.setNull(parameterIndex, (int)((AbstractDbParameter)parameter).JdbcType);\r
- }\r
- else if (value is long) {\r
- preparedStatement.setLong(parameterIndex, (long)value);\r
- }\r
- else if (value is byte[]) {\r
- if (((byte[])value).Length <= 4000) {\r
- preparedStatement.setBytes(parameterIndex, vmw.common.TypeUtils.ToSByteArray((byte[]) value));\r
- }\r
- else {\r
- InputStream iStream=new ByteArrayInputStream(vmw.common.TypeUtils.ToSByteArray((byte[]) value));\r
- preparedStatement.setBinaryStream(parameterIndex,iStream,((byte[])value).Length);\r
- }\r
- }\r
- else if (value is byte) {\r
- preparedStatement.setByte(parameterIndex, (sbyte)(byte)value);\r
- }\r
- else if (value is char[]) {\r
- Reader reader = new CharArrayReader((char[])value);\r
- preparedStatement.setCharacterStream(parameterIndex,reader,((char[])value).Length);\r
- }\r
- else if (value is bool) {\r
- preparedStatement.setBoolean(parameterIndex, (bool) value);\r
- }\r
- else if (value is char) {\r
- preparedStatement.setString(parameterIndex, ((char)value).ToString());\r
- }\r
- else if (value is DateTime) {\r
- switch ((DbConvert.JavaSqlTypes)parameter.JdbcType) {\r
- default:\r
- case DbConvert.JavaSqlTypes.TIMESTAMP:\r
- preparedStatement.setTimestamp(parameterIndex,DbConvert.ClrTicksToJavaTimestamp(((DateTime)value).Ticks));\r
- break;\r
- case DbConvert.JavaSqlTypes.TIME:\r
- preparedStatement.setTime(parameterIndex,DbConvert.ClrTicksToJavaTime(((DateTime)value).Ticks));\r
- break;\r
- case DbConvert.JavaSqlTypes.DATE:\r
- preparedStatement.setDate(parameterIndex,DbConvert.ClrTicksToJavaDate(((DateTime)value).Ticks));\r
- break;\r
- }\r
- }\r
- else if (value is TimeSpan) {\r
- if (parameter.JdbcType == (int)DbConvert.JavaSqlTypes.TIMESTAMP)\r
- preparedStatement.setTimestamp(parameterIndex,DbConvert.ClrTicksToJavaTimestamp(((TimeSpan)value).Ticks));\r
- else\r
- preparedStatement.setTime(parameterIndex,DbConvert.ClrTicksToJavaTime(((TimeSpan)value).Ticks));\r
- }\r
- else if (value is Decimal) {\r
- preparedStatement.setBigDecimal(parameterIndex, vmw.common.PrimitiveTypeUtils.DecimalToBigDecimal((Decimal) value));\r
- }\r
- else if (value is double) {\r
- preparedStatement.setDouble(parameterIndex, (double)value);\r
- }\r
- else if (value is float) {\r
- preparedStatement.setFloat(parameterIndex, (float)value);\r
- }\r
- else if (value is int) {\r
- preparedStatement.setInt(parameterIndex, (int)value);\r
- }\r
- else if (value is string) {\r
- //can not be done for inout params, due to Oracle problem with FIXED_CHAR out param fetching\r
- if (parameter.Direction == ParameterDirection.Input && \r
- preparedStatement is Mainsoft.Data.Jdbc.Providers.IPreparedStatement &&\r
- (DbConvert.JavaSqlTypes)parameter.JdbcType == DbConvert.JavaSqlTypes.CHAR) {\r
- ((Mainsoft.Data.Jdbc.Providers.IPreparedStatement)preparedStatement)\r
- .setChar(parameterIndex, (string)value);\r
- }\r
- else\r
- preparedStatement.setString(parameterIndex, (string)value);\r
- }\r
- else if (value is Guid) {\r
- preparedStatement.setString(parameterIndex, value.ToString());\r
- }\r
- else if (value is short) {\r
- preparedStatement.setShort(parameterIndex, (short)value);\r
- }\r
- else if (value is sbyte) {\r
- preparedStatement.setByte(parameterIndex, (sbyte)value);\r
- }\r
- else {\r
- preparedStatement.setObject(parameterIndex, value);\r
- }\r
- }\r
-\r
- protected virtual void BindOutputParameter(AbstractDbParameter parameter, int parameterIndex)\r
- {\r
- parameter.Validate();\r
- int jdbcType = (int)parameter.JdbcType; \r
- // java parameters are 1 based, while .net are 0 based\r
- parameterIndex++;\r
-\r
- CallableStatement callableStatement = ((CallableStatement)_statement);\r
-\r
- // the scale has a meening only in DECIMAL and NUMERIC parameters\r
- if (jdbcType == Types.DECIMAL || jdbcType == Types.NUMERIC) {\r
- if(parameter.DbType == DbType.Currency) {\r
- callableStatement.registerOutParameter(parameterIndex, jdbcType, 4);\r
- }\r
- else {\r
- callableStatement.registerOutParameter(parameterIndex, jdbcType, parameter.Scale);\r
- }\r
- }\r
- else {\r
- callableStatement.registerOutParameter(parameterIndex, jdbcType);\r
- }\r
- }\r
-\r
- private void FillOutputParameters()\r
- { \r
- if (!(_statement is CallableStatement)) {\r
- return;\r
- }\r
- for(int i = 0; i < InternalParameters.Count; i++) {\r
- AbstractDbParameter parameter = (AbstractDbParameter)InternalParameters[i];\r
- ParameterDirection direction = parameter.Direction;\r
- if (((direction & ParameterDirection.Output) != 0) && !SkipParameter(parameter)) { \r
- FillOutputParameter(parameter, i);\r
- }\r
- // drop jdbc type of out parameter, since it possibly was updated in ExecuteReader\r
- parameter.IsJdbcTypeSet = false;\r
- }\r
- }\r
-\r
- protected virtual void FillOutputParameter(DbParameter parameter, int index)\r
- { \r
- CallableStatement callableStatement = (CallableStatement)_statement;\r
- ParameterMetadataWrapper parameterMetadataWrapper = null; \r
- // FIXME wait for other drivers to implement\r
-// try {\r
-// parameterMetadataWrapper = new ParameterMetadataWrapper(callableStatement.getParameterMetaData());\r
-// }\r
-// catch {\r
-// // suppress error : ms driver for sql server does not implement getParameterMetaData\r
-// // suppress exception : ms driver for sql server does not implement getParameterMetaData\r
-// }\r
- DbConvert.JavaSqlTypes javaSqlType = (DbConvert.JavaSqlTypes)((AbstractDbParameter)parameter).JdbcType;\r
- try {\r
- parameter.Value = DbConvert.JavaResultSetToClrWrapper(callableStatement,index,javaSqlType,parameter.Size,parameterMetadataWrapper);\r
- }\r
- catch(java.sql.SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- // AbstractDbCommand acts as IEnumerator over JDBC statement\r
- // AbstractDbCommand.NextResultSet corresponds to IEnumerator.MoveNext\r
- protected internal virtual bool NextResultSet()\r
- {\r
- if (!_hasResultSet)\r
- return false;\r
-\r
- try {\r
- for(;;) {\r
- _hasResultSet = _statement.getMoreResults();\r
- if (_hasResultSet)\r
- return true;\r
- int updateCount = _statement.getUpdateCount();\r
- if (updateCount < 0)\r
- return false;\r
-\r
- AccumulateRecordsAffected(updateCount); \r
- }\r
- }\r
- catch (SQLException e) {\r
- throw CreateException(e);\r
- }\r
- finally {\r
- _currentResultSet = null;\r
- }\r
- }\r
-\r
- private void AccumulateRecordsAffected(int updateCount)\r
- { \r
- if (_recordsAffected < 0) {\r
- _recordsAffected = updateCount;\r
- }\r
- else {\r
- _recordsAffected += updateCount;\r
- }\r
- }\r
-\r
- internal void OnReaderClosed(object reader)\r
- {\r
- CloseInternal();\r
- if (Connection != null) {\r
- ((AbstractDBConnection)Connection).RemoveReference(reader);\r
- ((AbstractDBConnection)Connection).IsFetching = false;\r
- if ((Behavior & CommandBehavior.CloseConnection) != 0) {\r
- Connection.Close();\r
- }\r
- } \r
- }\r
-\r
- internal void CloseInternal()\r
- {\r
- if (Behavior != CommandBehavior.SchemaOnly) {\r
- if (_statement != null) {\r
- while (NextResultSet()) {\r
- } \r
- FillOutputParameters(); \r
- }\r
- }\r
- _currentReader = null;\r
- CleanUp();\r
- }\r
-\r
- protected override void Dispose(bool disposing)\r
- {\r
- if (disposing) {\r
- CleanUp();\r
- }\r
- base.Dispose(disposing);\r
- }\r
-\r
- private void CleanUp()\r
- {\r
- if (_currentReader != null) {\r
- // we must preserve statement object until we have an associated reader object that might access it.\r
- return;\r
- }\r
- if (Connection != null) {\r
- ((AbstractDBConnection)Connection).RemoveReference(this);\r
- }\r
- if (_statement != null) {\r
- _statement.close();\r
- _statement = null;\r
- } \r
- IsCommandPrepared = false;\r
- _internalParameters = null;\r
- _currentResultSet = null;\r
- }\r
-\r
- internal void OnSchemaChanging()\r
- {\r
- }\r
-\r
- #endregion // Methods\r
-\r
- #region ICloneable Members\r
-\r
- public virtual object Clone() {\r
- AbstractDbCommand target = (AbstractDbCommand)MemberwiseClone();\r
- target._statement = null;\r
- target._isCommandPrepared = false;\r
- target._internalParameters = null;\r
- target._javaCommandText = null;\r
- target._recordsAffected = -1;\r
- target._currentResultSet = null;\r
- target._currentReader = null;\r
- target._nullParametersInPrepare = false;\r
- target._hasResultSet = false;\r
- target._explicitPrepare = false;\r
- if (Parameters != null && Parameters.Count > 0) {\r
- target._parameters = CreateParameterCollection(target);\r
- for(int i=0 ; i < Parameters.Count; i++) {\r
- target.Parameters.Add(((AbstractDbParameter)Parameters[i]).Clone());\r
- }\r
- }\r
- return target;\r
- }\r
-\r
- #endregion\r
- }\r
-}\r
+++ /dev/null
-//\r
-// System.Data.Common.AbstractDBConnection\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System.Globalization;\r
-using System.Data;\r
-using System.Data.ProviderBase;\r
-using System.Data.Configuration;\r
-using System.Configuration;\r
-using System.Collections;\r
-using System.Collections.Specialized;\r
-using System.Text;\r
-using System.Text.RegularExpressions;\r
-using Mainsoft.Data.Jdbc.Providers;\r
-using System.Data.Common;\r
-\r
-using java.sql;\r
-using javax.sql;\r
-using javax.naming;\r
-\r
-using Mainsoft.Data.Configuration;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public abstract class AbstractDBConnection : DbConnection, ICloneable\r
- {\r
- #region ObjectNamesHelper\r
-\r
- private sealed class ObjectNamesHelper\r
- {\r
- //static readonly Regex NameOrder = new Regex(@"^\s*((\[(?<NAME>(\s*[^\[\]\s])+)\s*\])|(?<NAME>(\w|!|\#|\$)+(\s*(\w|!|\#|\$)+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- static readonly Regex NameOrder = new Regex(@"^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
-\r
- //static readonly Regex SchemaNameOrder = new Regex(@"^\s*((\[(?<SCHEMA>(\s*[^\[\]\s])+)\s*\])|(?<SCHEMA>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<NAME>(\s*[^\[\]\s])+)\s*\])|(?<NAME>(\w|!|\#|\$)+(\s*(\w|!|\#|\$)+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- static readonly Regex SchemaNameOrder = new Regex(@"^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- //static readonly Regex CatalogSchemaNameOrder = new Regex(@"^\s*((\[\s*(?<CATALOG>(\s*[^\[\]\s])+)\s*\])|(?<CATALOG>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<SCHEMA>(\s*[^\[\]\s])+)\s*\])|(?<SCHEMA>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<NAME>(\s*[^\[\]\s])+)\s*\])|(?<NAME>(\w|!|\#|\$)+(\s*(\w|!|\#|\$)+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- //static readonly Regex CatalogSchemaNameOrder = new Regex(@"^\s*((\[\s*(?<CATALOG>(\s*[^\]\s])+)\s*\])|(?<CATALOG>([^\.\s])*(\s*([^\.\s])+)*))\s*\.\s*((\[(?<SCHEMA>(\s*[^\]\s])+)\s*\])|(?<SCHEMA>([^\.\s])*(\s*([^\.\s])+)*))\s*\.\s*((\[(?<NAME>(\s*[^\]\s])+)\s*\])|(?<NAME>([^\.\s])+(\s*([^\.\s])+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- static readonly Regex CatalogSchemaNameOrder = new Regex(@"^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
-\r
- //static readonly Regex CatalogNameOrder = new Regex(@"^\s*((\[(?<CATALOG>(\s*[^\[\]\s])+)\s*\])|(?<CATALOG>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<NAME>(\s*[^\[\]\s])+)\s*\])|(?<NAME>(\w|!|\#|\$)+(\s*(\w|!|\#|\$)+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- //static readonly Regex CatalogNameOrder = new Regex(@"^\s*((\[(?<CATALOG>(\s*[^\]\s])+)\s*\])|(?<CATALOG>([^\.\s])*(\s*([^\.\s])+)*))\s*\.\s*((\[(?<NAME>(\s*[^\]\s])+)\s*\])|(?<NAME>([^\.\s])+(\s*([^\.\s])+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- static readonly Regex CatalogNameOrder = new Regex(@"^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- //static readonly Regex SchemaCatalogNameOrder = new Regex(@"^\s*((\[\s*(?<SCHEMA>(\s*[^\[\]\s])+)\s*\])|(?<SCHEMA>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<CATALOG>(\s*[^\[\]\s])+)\s*\])|(?<CATALOG>(\w|!|\#|\$)*(\s*(\w|!|\#|\$)+)*))\s*\.\s*((\[(?<NAME>(\s*[^\[\]\s])+)\s*\])|(?<NAME>(\w|!|\#|\$)+(\s*(\w|!|\#|\$)+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- //static readonly Regex SchemaCatalogNameOrder = new Regex(@"^\s*((\[\s*(?<SCHEMA>(\s*[^\]\s])+)\s*\])|(?<SCHEMA>([^\.\s])*(\s*([^\.\s])+)*))\s*\.\s*((\[(?<CATALOG>(\s*[^\]\s])+)\s*\])|(?<CATALOG>([^\.\s])*(\s*([^\.\s])+)*))\s*\.\s*((\[(?<NAME>(\s*[^\]\s])+)\s*\])|(?<NAME>([^\.\s])+(\s*([^\.\s])+)*))\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
- static readonly Regex SchemaCatalogNameOrder = new Regex(@"^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);\r
-\r
- internal static ObjectNameResolver[] GetSyntaxPatterns(AbstractDBConnection connection)\r
- {\r
- ArrayList collection = new ArrayList();\r
- collection.Add(new ObjectNameResolver(NameOrder));\r
-\r
- ObjectNameResolversCollection basic = (ObjectNameResolversCollection) ConfigurationSettings.GetConfig ("Mainsoft.Data.Configuration/objectnameresolution");\r
- \r
- java.sql.DatabaseMetaData metaData = connection.JdbcConnection.getMetaData();\r
- string productName = metaData.getDatabaseProductName();\r
-\r
- foreach(ObjectNameResolver nameResolver in basic) {\r
- if (productName.IndexOf(nameResolver.DbName) != -1) {\r
- collection.Add(nameResolver);\r
- }\r
- }\r
-\r
- //defaults\r
- if (metaData.isCatalogAtStart()) {\r
- collection.Add(new ObjectNameResolver(SchemaNameOrder));\r
- collection.Add(new ObjectNameResolver(CatalogNameOrder));\r
- collection.Add(new ObjectNameResolver(CatalogSchemaNameOrder));\r
- collection.Add(new ObjectNameResolver(SchemaCatalogNameOrder));\r
- }\r
- else {\r
- collection.Add(new ObjectNameResolver(CatalogNameOrder));\r
- collection.Add(new ObjectNameResolver(SchemaNameOrder));\r
- collection.Add(new ObjectNameResolver(SchemaCatalogNameOrder));\r
- collection.Add(new ObjectNameResolver(CatalogSchemaNameOrder));\r
- }\r
-\r
- return (ObjectNameResolver[])collection.ToArray(typeof(ObjectNameResolver)); \r
- }\r
- }\r
-\r
- #endregion // ObjectNamesHelper\r
- \r
- #region Fields\r
-\r
- private const int DEFAULT_TIMEOUT = 15;\r
-\r
- private java.sql.Connection _jdbcConnnection;\r
- private ConnectionState _internalState;\r
- private object _internalStateSync = new object();\r
-\r
- private string _connectionString = String.Empty;\r
- IConnectionStringDictionary _connectionStringBuilder;\r
- IConnectionProvider _connectionProvider;\r
-\r
- private ArrayList _referencedObjects = new ArrayList(); \r
- private ObjectNameResolver[] _syntaxPatterns;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public AbstractDBConnection(string connectionString)\r
- {\r
- _connectionString = connectionString;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public override String ConnectionString\r
- {\r
- get { return _connectionString; }\r
- set {\r
- if (IsOpened) {\r
- throw ExceptionHelper.NotAllowedWhileConnectionOpen("ConnectionString",_internalState);\r
- } \r
- _connectionString = value;\r
- _connectionProvider = null;\r
- _connectionStringBuilder = null;\r
- }\r
- }\r
-\r
- public override int ConnectionTimeout\r
- {\r
- get {\r
- string timeoutStr = (string)ConnectionStringBuilder["loginTimeout"];\r
- if (timeoutStr != null && timeoutStr.Length > 0) {\r
- try {\r
- return Convert.ToInt32(timeoutStr);\r
- }\r
- catch(FormatException) {\r
- throw ExceptionHelper.InvalidValueForKey("connect timeout");\r
- }\r
- catch (OverflowException) {\r
- throw ExceptionHelper.InvalidValueForKey("connect timeout");\r
- }\r
- }\r
- return DEFAULT_TIMEOUT;\r
- }\r
- }\r
-\r
- public override String Database\r
- {\r
- get { \r
- if ((State & ConnectionState.Open) != 0)\r
- return JdbcConnection.getCatalog();\r
-\r
- return (string)ConnectionStringBuilder["DATABASE"];\r
- }\r
- }\r
-\r
- public override ConnectionState State\r
- {\r
- get {\r
- try {\r
- if ((JdbcConnection == null) || JdbcConnection.isClosed()) {\r
- // jdbc connection not initialized or closed\r
- if (_internalState == ConnectionState.Closed ) {\r
- return ConnectionState.Closed;\r
- }\r
- }\r
- else {\r
- // jdbc connection is opened\r
- if ((_internalState & ConnectionState.Open) != 0) {\r
- return ConnectionState.Open;\r
- }\r
- }\r
- return ConnectionState.Broken; \r
- } \r
- catch (SQLException) {\r
- return ConnectionState.Broken;\r
- } \r
- }\r
- }\r
-\r
- internal bool IsExecuting\r
- {\r
- get { \r
- return ((_internalState & ConnectionState.Executing) != 0);\r
- }\r
-\r
- set {\r
- lock(_internalStateSync) {\r
- // to switch to executing, the connection must be in opened\r
- if (value) {\r
- if (_internalState != ConnectionState.Open) {\r
- if (IsFetching) {\r
- throw ExceptionHelper.OpenedReaderExists();\r
- }\r
- throw ExceptionHelper.OpenConnectionRequired("",_internalState);\r
- }\r
- _internalState |= ConnectionState.Executing;\r
- }\r
- else { \r
- if (!IsExecuting) {\r
- throw new InvalidOperationException("Connection : Impossible to tear down from state " + ConnectionState.Executing.ToString() + " while in state " + _internalState.ToString());\r
- }\r
- _internalState &= ~ConnectionState.Executing;\r
- }\r
- }\r
- }\r
- }\r
-\r
- internal bool IsFetching\r
- {\r
- get {\r
- return ((_internalState & ConnectionState.Fetching) != 0);\r
- }\r
-\r
- set {\r
- lock(_internalStateSync) {\r
- if (value) {\r
- // to switch to fetching connection must be in opened, executing\r
- if (((_internalState & ConnectionState.Open) == 0) || ((_internalState & ConnectionState.Executing) == 0)) {\r
- throw ExceptionHelper.OpenConnectionRequired("",_internalState);\r
- }\r
- _internalState |= ConnectionState.Fetching;\r
- }\r
- else {\r
- if (!IsFetching) {\r
- throw new InvalidOperationException("Connection : Impossible to tear down from state " + ConnectionState.Fetching.ToString() + " while in state " + _internalState.ToString());\r
- }\r
- _internalState &= ~ConnectionState.Fetching;\r
- }\r
- }\r
- }\r
- }\r
-\r
- internal bool IsOpened\r
- {\r
- get {\r
- return ((_internalState & ConnectionState.Open) != 0);\r
- }\r
-\r
- set {\r
- lock(_internalStateSync) { \r
- if (value) {\r
- // only connecting connection can be opened\r
- if ((_internalState != ConnectionState.Connecting)) {\r
- throw ExceptionHelper.ConnectionAlreadyOpen(_internalState);\r
- }\r
- _internalState |= ConnectionState.Open;\r
- }\r
- else {\r
- if (!IsOpened) {\r
- throw new InvalidOperationException("Connection : Impossible to tear down from state " + ConnectionState.Open.ToString() + " while in state " + _internalState.ToString());\r
- }\r
- _internalState &= ~ConnectionState.Open;\r
- }\r
- }\r
- }\r
- }\r
-\r
- internal bool IsConnecting\r
- {\r
- get {\r
- return ((_internalState & ConnectionState.Connecting) != 0);\r
- }\r
-\r
- set {\r
- lock(_internalStateSync) { \r
- if (value) {\r
- // to switch to connecting conection must be in closed or in opened\r
- if ((_internalState != ConnectionState.Closed) && (_internalState != ConnectionState.Open)) {\r
- throw ExceptionHelper.ConnectionAlreadyOpen(_internalState);\r
- }\r
- _internalState |= ConnectionState.Connecting;\r
- }\r
- else {\r
- if (!IsConnecting) {\r
- throw new InvalidOperationException("Connection : Impossible to tear down from state " + ConnectionState.Connecting.ToString() + " while in state " + _internalState.ToString());\r
- }\r
- _internalState &= ~ConnectionState.Connecting;\r
- }\r
- }\r
- }\r
- }\r
-\r
- public override string DataSource\r
- {\r
- get {\r
- return (string)ConnectionStringBuilder["SERVERNAME"];\r
- }\r
- }\r
-\r
- internal ConnectionState InternalState\r
- {\r
- get { return _internalState; }\r
- }\r
-\r
-\r
- protected internal java.sql.Connection JdbcConnection\r
- {\r
- get { return _jdbcConnnection; }\r
- set { _jdbcConnnection = value; }\r
- }\r
-\r
- internal ObjectNameResolver[] SyntaxPatterns\r
- {\r
- get {\r
- if (_syntaxPatterns == null) {\r
- _syntaxPatterns = ObjectNamesHelper.GetSyntaxPatterns(this);\r
- }\r
- return _syntaxPatterns;\r
- }\r
- }\r
-\r
- protected internal IConnectionProvider ConnectionProvider { \r
- get {\r
- try {\r
- if (_connectionProvider == null)\r
- _connectionProvider = GetConnectionProvider();\r
-\r
- return _connectionProvider;\r
- }\r
- catch(SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
- }\r
- protected internal IConnectionStringDictionary ConnectionStringBuilder {\r
- get {\r
- try {\r
- if (_connectionStringBuilder == null)\r
- _connectionStringBuilder = ConnectionProvider.GetConnectionStringBuilder(ConnectionString);\r
-\r
- return _connectionStringBuilder;\r
- }\r
- catch(SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
- }\r
- protected abstract IConnectionProvider GetConnectionProvider();\r
-\r
- static protected IConnectionProvider GetConnectionProvider(string sectionMame, string provider) {\r
- if (provider == null)\r
- throw new ArgumentNullException("provider");\r
-\r
- IList providers = (IList) ConfigurationSettings.GetConfig(sectionMame);\r
- if (providers.Count == 0)\r
- throw new ArgumentException("Configuration section is empty.", "sectionName");\r
-\r
- for (int i = 0; i < providers.Count; i++) {\r
- IDictionary providerInfo = (IDictionary) providers[i];\r
- \r
- string curProvider = (string)providerInfo[ConfigurationConsts.Name];\r
- if (String.Compare(provider, 0, curProvider, 0, provider.Length, StringComparison.OrdinalIgnoreCase) == 0) {\r
- string providerType = (string) providerInfo [ConfigurationConsts.ProviderType];\r
- if (providerType == null || providerType.Length == 0)\r
- return new GenericProvider (providerInfo); \r
- else {\r
- Type t = Type.GetType (providerType);\r
- return (IConnectionProvider) Activator.CreateInstance (t , new object[] {providerInfo});\r
- }\r
- }\r
- }\r
-\r
- throw new ArgumentException(\r
- String.Format("Unknown provider name '{0}'", provider), "ConnectionString");\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
- // since WS also does not permits dynamically change of login timeout and tomcat does no implements - do not do it at all\r
- //ds.setLoginTimeout(ConnectionTimeout);\r
-\r
- protected internal abstract void OnSqlWarning(SQLWarning warning);\r
-\r
- protected abstract SystemException CreateException(SQLException e);\r
-\r
- protected abstract SystemException CreateException(string message);\r
-\r
- public override void Close()\r
- {\r
- ConnectionState orig = State;\r
- try {\r
- ClearReferences();\r
- if (JdbcConnection != null && !JdbcConnection.isClosed()) {\r
- if (!JdbcConnection.getAutoCommit())\r
- JdbcConnection.rollback();\r
- JdbcConnection.close();\r
- }\r
- }\r
- catch (Exception e) {\r
- // suppress exception\r
-#if DEBUG\r
- Console.WriteLine("Exception catched at Conection.Close() : {0}\n{1}\n{2}",e.GetType().FullName,e.Message,e.StackTrace);\r
-#endif\r
- }\r
- finally {\r
- JdbcConnection = null;\r
- lock(_internalStateSync) {\r
- _internalState = ConnectionState.Closed;\r
- }\r
- }\r
-\r
- ConnectionState current = State;\r
- if (current != orig)\r
- OnStateChange (new StateChangeEventArgs (orig, current));\r
- }\r
-\r
- internal protected virtual void OnSqlException(SQLException exp)\r
- {\r
- throw CreateException(exp);\r
- }\r
-\r
- internal void AddReference(object referencedObject)\r
- { lock(_referencedObjects.SyncRoot) {\r
- _referencedObjects.Add(new WeakReference(referencedObject));\r
- }\r
- }\r
-\r
- internal void RemoveReference(object referencedObject)\r
- {\r
- lock(_referencedObjects.SyncRoot) {\r
- for(int i = 0; i < _referencedObjects.Count; i++) {\r
- WeakReference wr = (WeakReference) _referencedObjects[i];\r
- if (wr.IsAlive && (wr.Target == referencedObject)) {\r
- _referencedObjects.RemoveAt(i);\r
- }\r
- }\r
- }\r
- }\r
-\r
- private void ClearReferences()\r
- {\r
- ArrayList oldList = _referencedObjects;\r
- _referencedObjects = new ArrayList();\r
-\r
- for(int i = 0; i < oldList.Count; i++) {\r
- WeakReference wr = (WeakReference) oldList[i];\r
- if (wr.IsAlive) {\r
- ClearReference(wr.Target);\r
- }\r
- }\r
- }\r
-\r
- private void ClearReference(object referencedObject)\r
- {\r
- try {\r
- if (referencedObject is AbstractDbCommand) {\r
- ((AbstractDbCommand)referencedObject).CloseInternal();\r
- }\r
- else if (referencedObject is AbstractDataReader) {\r
- ((AbstractDataReader)referencedObject).CloseInternal();\r
- }\r
- }\r
- catch (SQLException) {\r
- // suppress exception since it's possible that command or reader are in inconsistent state\r
- }\r
- }\r
-\r
- public override void Open()\r
- {\r
- if (_connectionString == null || _connectionString.Length == 0) {\r
- throw ExceptionHelper.ConnectionStringNotInitialized();\r
- }\r
-\r
- IsConnecting = true;\r
- try { \r
- if (JdbcConnection != null && !JdbcConnection.isClosed()) {\r
- throw ExceptionHelper.ConnectionAlreadyOpen(_internalState);\r
- }\r
-\r
- JdbcConnection = ConnectionProvider.GetConnection (ConnectionStringBuilder);\r
-\r
- IsOpened = true;\r
-\r
- OnStateChange (new StateChangeEventArgs (ConnectionState.Closed, ConnectionState.Open));\r
- }\r
- catch (SQLWarning warning) {\r
- OnSqlWarning(warning);\r
- }\r
- catch (SQLException exp) {\r
- OnSqlException(exp);\r
- }\r
- finally {\r
- IsConnecting = false;\r
- }\r
- }\r
-\r
- public override void ChangeDatabase(String database)\r
- {\r
- IsConnecting = true;\r
- try {\r
- ClearReferences();\r
- java.sql.Connection con = JdbcConnection; \r
- con.setCatalog(database);\r
-// ConnectionStringHelper.UpdateValue(UserParameters,StringManager.GetStringArray("CON_DATABASE"),database);\r
- }\r
- catch (SQLWarning warning) {\r
- OnSqlWarning(warning);\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- finally {\r
- IsConnecting = false;\r
- }\r
- }\r
-\r
- public override string ServerVersion {\r
- get {\r
- // only if the driver support this methods\r
- try {\r
- if (JdbcConnection == null)\r
- return String.Empty;\r
-\r
- java.sql.DatabaseMetaData metaData = JdbcConnection.getMetaData();\r
- return metaData.getDatabaseProductVersion();\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
- }\r
-\r
- internal string JdbcProvider {\r
- get {\r
- // only if the driver support this methods\r
- try {\r
- if (JdbcConnection == null)\r
- return String.Empty;\r
-\r
- java.sql.DatabaseMetaData metaData = JdbcConnection.getMetaData();\r
- return metaData.getDriverName() + " " + metaData.getDriverVersion();\r
- }\r
- catch (SQLException exp) {\r
- return String.Empty; //suppress\r
- }\r
- }\r
- }\r
-\r
- protected override void Dispose(bool disposing)\r
- {\r
- if (disposing) {\r
- try {\r
- if (JdbcConnection != null && !JdbcConnection.isClosed()) {\r
- JdbcConnection.close();\r
- } \r
- JdbcConnection = null;\r
- }\r
- catch (java.sql.SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
- base.Dispose(disposing);\r
- }\r
-\r
- internal void ValidateBeginTransaction()\r
- {\r
- if (State != ConnectionState.Open) {\r
- throw new InvalidOperationException(String.Format("{0} requires an open and available Connection. The connection's current state is {1}.", new object[] {"BeginTransaction", State}));\r
- }\r
-\r
- if (!JdbcConnection.getAutoCommit()) {\r
- throw new System.InvalidOperationException("Parallel transactions are not supported.");\r
- }\r
- }\r
-\r
- internal ArrayList GetProcedureColumns(String procedureString, AbstractDbCommand command)\r
- {\r
- ArrayList col = new ArrayList();\r
- try {\r
- ObjectNameResolver[] nameResolvers = SyntaxPatterns;\r
- java.sql.ResultSet res = null;\r
- string catalog = null;\r
- string schema = null;\r
- string spname = null;\r
- \r
- java.sql.DatabaseMetaData metadata = JdbcConnection.getMetaData(); \r
- bool storesUpperCaseIdentifiers = false;\r
- bool storesLowerCaseIdentifiers = false;\r
- try {\r
- storesUpperCaseIdentifiers = metadata.storesUpperCaseIdentifiers();\r
- storesLowerCaseIdentifiers = metadata.storesLowerCaseIdentifiers();\r
- }\r
- catch (SQLException e) {\r
- // suppress\r
- }\r
-\r
- for(int i=0; i < nameResolvers.Length; i++) {\r
- ObjectNameResolver nameResolver = nameResolvers[i];\r
- Match match = nameResolver.Match(procedureString);\r
-\r
- if (match.Success) {\r
- spname = ObjectNameResolver.GetName(match); \r
- schema = ObjectNameResolver.GetSchema(match); \r
- catalog = ObjectNameResolver.GetCatalog(match); \r
-\r
- // make all identifiers uppercase or lowercase according to database metadata\r
- if (storesUpperCaseIdentifiers) {\r
- spname = (spname.Length > 0) ? spname.ToUpper() : null;\r
- schema = (schema.Length > 0) ? schema.ToUpper() : null;\r
- catalog = (catalog.Length > 0) ? catalog.ToUpper() : null;\r
- }\r
- else if (storesLowerCaseIdentifiers) {\r
- spname = (spname.Length > 0) ? spname.ToLower() : null;\r
- schema = (schema.Length > 0) ? schema.ToLower() : null;\r
- catalog = (catalog.Length > 0) ? catalog.ToLower() : null;\r
- }\r
- else {\r
- spname = (spname.Length > 0) ? spname : null;\r
- schema = (schema.Length > 0) ? schema : null;\r
- catalog = (catalog.Length > 0) ? catalog : null;\r
- }\r
-\r
- // catalog from db is always in correct caps\r
- if (catalog == null) {\r
- catalog = JdbcConnection.getCatalog();\r
- }\r
-\r
- try {\r
- // always get the first procedure that db returns\r
- res = metadata.getProcedures(catalog, schema, spname); \r
- if (res.next()) {\r
- catalog = res.getString(1);\r
- schema = res.getString(2);\r
- spname = res.getString(3);\r
- break;\r
- }\r
-\r
- spname = null;\r
- }\r
- catch { // suppress exception\r
- return null;\r
- }\r
- finally {\r
- if (res != null) {\r
- res.close();\r
- }\r
- }\r
- }\r
- } \r
- \r
- if (spname == null || spname.Length == 0) {\r
- return null;\r
- }\r
- \r
- try {\r
- // get procedure columns based o procedure metadata\r
- res = metadata.getProcedureColumns(catalog, schema, spname, null); \r
- while (res.next()) {\r
- // since there is still a possibility that some of the parameters to getProcedureColumn were nulls, \r
- // we need to filter the results with strict matching\r
- if ((res.getString(1) != catalog ) || (res.getString(2) != schema) || (res.getString(3) != spname)) {\r
- continue;\r
- }\r
-\r
- AbstractDbParameter parameter = (AbstractDbParameter)command.CreateParameter();\r
- \r
- parameter.SetParameterName(res);\r
- parameter.SetParameterDbType(res);\r
- parameter.SetSpecialFeatures(res);\r
-\r
- //get parameter direction\r
- short direction = res.getShort("COLUMN_TYPE");\r
- if(direction == 1) //DatabaseMetaData.procedureColumnIn\r
- parameter.Direction = ParameterDirection.Input;\r
- else if(direction == 2) //DatabaseMetaData.procedureColumnInOut\r
- parameter.Direction = ParameterDirection.InputOutput;\r
- else if(direction == 4) //DatabaseMetaData.procedureColumnOut\r
- parameter.Direction = ParameterDirection.Output;\r
- else if(direction == 5) //DatabaseMetaData.procedureColumnReturn\r
- parameter.Direction = ParameterDirection.ReturnValue;\r
- \r
- //get parameter precision and scale\r
- parameter.SetParameterPrecisionAndScale(res);\r
-\r
- parameter.SetParameterSize(res);\r
- parameter.SetParameterIsNullable(res);\r
-\r
- col.Add(parameter);\r
- }\r
- }\r
- finally {\r
- if (res != null) {\r
- res.close();\r
- }\r
- } \r
- }\r
- catch(Exception e) {\r
- //supress\r
-#if DEBUG\r
- Console.WriteLine("Exception catched at AbstractDBConnection.GetProcedureColumns() : {0}\n{1}\n{2}",e.GetType().FullName,e.Message,e.StackTrace);\r
-#endif\r
- }\r
- return col;\r
- }\r
-\r
- #endregion // Methods \r
-\r
- #region ICloneable Members\r
-\r
- public virtual object Clone() {\r
- AbstractDBConnection con = (AbstractDBConnection)MemberwiseClone();\r
- con._internalState = ConnectionState.Closed;\r
- con._internalStateSync = new object();\r
- con._jdbcConnnection = null;\r
- con._referencedObjects = new ArrayList();\r
- con._syntaxPatterns = null;\r
- return con;\r
- }\r
-\r
- #endregion\r
- }\r
-}\r
+++ /dev/null
-//
-// System.Data.ProviderBase.AbstractDbParameter
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System;
-using System.Data;
-using System.Data.Common;
-
-using java.sql;
-
-namespace System.Data.ProviderBase
-{
- public abstract class AbstractDbParameter : DbParameter, IDbDataParameter, ICloneable
- {
- #region Fields
-
- byte _precision;
- byte _scale;
- protected DataRowVersion _sourceVersion;
- private int _jdbcType;
- bool _isDbTypeSet;
- bool _isJdbcTypeSet;
- object _convertedValue;
-
- string _parameterName;
- ParameterDirection _direction = ParameterDirection.Input;
- int _size;
- object _value;
- bool _isNullable;
- int _offset;
- string _sourceColumn;
- DbParameterCollection _parent = null;
-
- #endregion // Fields
-
- #region Constructors
-
- [MonoTODO]
- protected AbstractDbParameter ()
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public override ParameterDirection Direction {
- get { return _direction; }
- set {
- if (_direction != value) {
- switch (value) {
- case ParameterDirection.Input:
- case ParameterDirection.Output:
- case ParameterDirection.InputOutput:
- case ParameterDirection.ReturnValue:
- {
- _direction = value;
- return;
- }
- }
- throw ExceptionHelper.InvalidParameterDirection (value);
- }
- }
- }
-
- public override bool IsNullable {
- get { return _isNullable; }
- set { _isNullable = value; }
- }
-
-
- public virtual int Offset {
- get { return _offset; }
- set { _offset = value; }
- }
-
- public override string ParameterName {
- get {
- if (_parameterName == null)
- return String.Empty;
-
- return _parameterName;
- }
- set {
- if (_parameterName != value) {
- _parameterName = value;
- }
- }
- }
-
- public override int Size {
- get { return _size; }
-
- set {
- if (_size != value) {
- if (value < -1)
- throw ExceptionHelper.InvalidSizeValue (value);
-
- _size = value;
- }
- }
- }
-
-
- public override string SourceColumn {
- get {
- if (_sourceColumn == null)
- return String.Empty;
-
- return _sourceColumn;
- }
-
- set { _sourceColumn = value; }
- }
-
- internal DbParameterCollection Parent
- {
- get { return _parent; }
- set { _parent = value; }
- }
-
- public byte Precision
- {
- get { return _precision; }
- set { _precision = value; }
- }
-
- public byte Scale
- {
- get { return _scale; }
- set { _scale = value; }
- }
-
- public override DataRowVersion SourceVersion
- {
- get { return _sourceVersion; }
- set { _sourceVersion = value; }
- }
-
- protected internal int JdbcType
- {
- get {
- if (!IsJdbcTypeSet) {
- return JdbcTypeFromProviderType();
- }
- return _jdbcType;
- }
- set {
- _jdbcType = value;
- IsJdbcTypeSet = true;
- }
- }
-
- protected internal bool IsJdbcTypeSet
- {
- get {
- return _isJdbcTypeSet;
- }
-
- set {
- _isJdbcTypeSet = value;
- }
- }
-
- protected internal bool IsDbTypeSet
- {
- get { return _isDbTypeSet; }
- set { _isDbTypeSet = value; }
- }
-
- protected internal virtual bool IsSpecial {
- get {
- return false;
- }
- }
-
- private bool IsFixedLength
- {
- get {
- return ((DbType != DbType.AnsiString) && (DbType != DbType.Binary) &&
- (DbType != DbType.String) && (DbType != DbType.VarNumeric));
- }
- }
-
- protected internal virtual string Placeholder {
- get {
- return "?";
- }
- }
-
- internal object ConvertedValue
- {
- get {
- if (_convertedValue == null) {
- object value = Value;
- _convertedValue = ((value != null) && (value != DBNull.Value)) ? ConvertValue(value) : value;
- }
- return _convertedValue;
- }
- }
-
- public override object Value {
- get { return _value; }
- set {
- _convertedValue = null;
- _value = value;
- }
- }
-
- //DbParameter overrides
-
- public override bool SourceColumnNullMapping {
- get {
- throw new NotImplementedException();
- }
- set {
- throw new NotImplementedException();
- }
- }
-
-
- #endregion // Properties
-
- #region Methods
-
- public override String ToString()
- {
- return ParameterName;
- }
-
- protected internal abstract void SetParameterName(ResultSet res);
-
- protected internal abstract void SetParameterDbType(ResultSet res);
-
- protected internal abstract void SetSpecialFeatures(ResultSet res);
-
- public virtual object Clone()
- {
- AbstractDbParameter other = (AbstractDbParameter) MemberwiseClone ();
- other._parent = null;
- return other;
- }
-
- protected internal abstract int JdbcTypeFromProviderType();
-
- protected internal abstract object ConvertValue(object value);
-
- internal void SetParameterPrecisionAndScale(ResultSet res)
- {
- int jdbcType = res.getInt("DATA_TYPE");
- if(jdbcType == java.sql.Types.DECIMAL || jdbcType == java.sql.Types.NUMERIC) {
- Precision = (byte)res.getInt("PRECISION");
- Scale = (byte)res.getInt("SCALE");
- }
- }
-
- internal void SetParameterSize(ResultSet res)
- {
- Size = res.getInt("LENGTH");
- }
-
- internal void SetParameterIsNullable(ResultSet res)
- {
- IsNullable = (res.getInt("NULLABLE") == 1);
- }
-
- internal void Validate()
- {
- if (!IsFixedLength && ((Direction & ParameterDirection.Output) != 0) && (Size == 0)) {
- throw ExceptionHelper.ParameterSizeNotInitialized(Offset,ParameterName,DbType.ToString(),Size);
- }
- }
-
- //DbParameter overrides
-
- public override void ResetDbType() {
- throw new NotImplementedException();
- }
-
- #endregion // Methods
- }
-}
-
+++ /dev/null
-//\r
-// System.Data.Common.AbstractDataReader\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-using System;\r
-using System.Data;\r
-using System.Collections;\r
-using System.Data.Common;\r
-\r
-using java.io;\r
-using java.sql;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public abstract class AbstractDataReader : DbDataReader, ISafeDataRecord {\r
-\r
- #region Fields\r
-\r
- private ResultSetMetaData _resultsMetaData;\r
- protected AbstractDbCommand _command;\r
- private DataTable _schemaTable;\r
- private ReaderState _readerState = ReaderState.Uninitialized;\r
-\r
- private IReaderCacheContainer[] _readerCache;\r
- private int _currentCacheFilledPosition; \r
- private Stack _resultSetStack = new Stack();\r
- private bool _isClosed = false;\r
-\r
- [Flags]\r
- private enum ReaderState { Uninitialized = 0, Empty = 1, HasRows = 2, FirstRed = 4, Eof = 8, Fetching = 16 };\r
-\r
- protected internal enum SCHEMA_TABLE { ColumnName,\r
- ColumnOrdinal,\r
- ColumnSize,\r
- NumericPrecision,\r
- NumericScale,\r
- IsUnique,\r
- IsKey,\r
- BaseServerName,\r
- BaseCatalogName,\r
- BaseColumnName,\r
- BaseSchemaName,\r
- BaseTableName,\r
- DataType,\r
- AllowDBNull,\r
- ProviderType,\r
- IsAliased,\r
- IsExpression,\r
- IsIdentity,\r
- IsAutoIncrement,\r
- IsRowVersion,\r
- IsHidden,\r
- IsLong,\r
- IsReadOnly};\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
- \r
- protected AbstractDataReader(AbstractDbCommand command) {\r
- _command = command;\r
- if (_command.Connection != null) {\r
- ((AbstractDBConnection)_command.Connection).AddReference(this);\r
- }\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public override int Depth {\r
- get { return 0; }\r
- }\r
-\r
- public override bool HasRows {\r
- get {\r
- if (IsClosed) {\r
- throw new InvalidOperationException("Invalid attempt to HasRows when reader is closed.");\r
- }\r
-\r
- try {\r
- if(null == Results)\r
- return false;\r
- }\r
- catch(SystemException) {\r
- //suppress\r
- return false;\r
- }\r
-\r
- return (_readerState & ReaderState.HasRows) != 0;\r
- }\r
- }\r
-\r
- public override int RecordsAffected\r
- {\r
- // MSDN : The RecordsAffected property is not set \r
- // until all rows are read and you close the reader.\r
- get { \r
- return _command.RecordsAffected; \r
- }\r
- }\r
-\r
- public override int FieldCount\r
- {\r
- get {\r
- if (ResultsMetaData == null)\r
- return 0;\r
-\r
- try {\r
- return ResultsMetaData.getColumnCount();\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
-\r
- }\r
- }\r
-\r
- protected internal CommandBehavior Behavior\r
- {\r
- get {\r
- return _command.Behavior;\r
- }\r
- }\r
-\r
- public override Object this[String columnName]\r
- {\r
- get {\r
- try {\r
- int columnIndex = Results.findColumn(columnName) - 1;\r
- return this[columnIndex];\r
- }\r
- catch (SQLException exp) {\r
- throw new IndexOutOfRangeException(exp.Message, exp);\r
- } \r
- }\r
- }\r
-\r
- public override Object this[int columnIndex]\r
- {\r
- get { return GetValue(columnIndex); }\r
- }\r
-\r
- protected ResultSet Results\r
- {\r
- get {\r
- if (_readerState == ReaderState.Uninitialized) {\r
-\r
- if (_resultSetStack.Count == 0) {\r
- ResultSet resultSet = _command.CurrentResultSet;\r
- if (resultSet == null)\r
- return null;\r
-\r
- _resultSetStack.Push(resultSet);\r
- }\r
-\r
- _readerState = ReaderState.Fetching;\r
- for (;;) {\r
- try {\r
- Configuration.BooleanSetting prefetchSchema = Configuration.Switches.PrefetchSchema;\r
-\r
- if (prefetchSchema == Configuration.BooleanSetting.NotSet) {\r
- AbstractDBConnection conn = (AbstractDBConnection)((ICloneable)_command.Connection);\r
- string driverName = conn.JdbcConnection.getMetaData().getDriverName();\r
- if (driverName.IndexOf("DB2", StringComparison.Ordinal) >= 0)\r
- prefetchSchema = Configuration.BooleanSetting.True;\r
- }\r
-\r
- if (prefetchSchema == Configuration.BooleanSetting.True)\r
- GetSchemaTable();\r
-\r
- ResultSet resultSet = (ResultSet)_resultSetStack.Peek();\r
- if (resultSet.next()) {\r
- _readerState = (ReaderState.HasRows | ReaderState.FirstRed);\r
- ResultSetMetaData rsMetaData = ResultsMetaData;\r
- DbConvert.JavaSqlTypes javaSqlType = (DbConvert.JavaSqlTypes)rsMetaData.getColumnType(1);\r
- if (javaSqlType == DbConvert.JavaSqlTypes.OTHER) {\r
- object value = GetValue(0);\r
- if (value != null && value is ResultSet) {\r
- _resultsMetaData = null;\r
- _readerCache = null;\r
- SchemaTable = null;\r
- _readerState = ReaderState.Fetching;\r
- _resultSetStack.Push(value);\r
- continue;\r
- }\r
- }\r
- }\r
- else\r
- _readerState = ReaderState.Empty;\r
-\r
- break;\r
- }\r
- catch(SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
- }\r
-\r
- return (_resultSetStack.Count > 0) ? (ResultSet)_resultSetStack.Peek() : null;\r
- }\r
- }\r
-\r
- protected ResultSetMetaData ResultsMetaData\r
- {\r
- get {\r
- ResultSet results = Results;\r
- if (results == null) {\r
- return null;\r
- }\r
- if(_resultsMetaData == null) {\r
- _resultsMetaData = results.getMetaData();\r
- }\r
- return _resultsMetaData;\r
- } \r
- }\r
-\r
- protected DataTable SchemaTable\r
- {\r
- get {\r
- if (_schemaTable == null) {\r
- _schemaTable = ConstructSchemaTable();\r
- }\r
- return _schemaTable;\r
- }\r
-\r
- set {_schemaTable = value; }\r
- }\r
-\r
- internal protected IReaderCacheContainer[] ReaderCache\r
- {\r
- get {\r
- if (_readerCache == null) {\r
- _readerCache = CreateReaderCache();\r
- _currentCacheFilledPosition = -1;\r
- }\r
- return _readerCache;\r
- }\r
- }\r
-\r
- public override bool IsClosed {\r
- get { return _isClosed; }\r
- }\r
-\r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- protected abstract int GetProviderType(int jdbcType);\r
-\r
- protected abstract SystemException CreateException(string message, SQLException e);\r
-\r
- protected abstract SystemException CreateException(IOException e);\r
-\r
- protected SystemException CreateException(SQLException e)\r
- {\r
- return CreateException(e.Message,e); \r
- }\r
-\r
- private bool CloseCurrentResultSet() {\r
- if (_resultSetStack.Count > 0) {\r
- try{\r
- _resultsMetaData = null;\r
- _readerCache = null;\r
- _readerState = ReaderState.Uninitialized;\r
- ResultSet rs = (ResultSet)_resultSetStack.Pop();\r
- rs.close();\r
- return true;\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
-\r
- return false;\r
- }\r
-\r
- // FIXME : add Close(bool readAllRecords) and pass this bool to skip looping over NextResult(), override AbstractDbCommand.ExecuteScalar\r
- public override void Close()\r
- {\r
- if (IsClosed)\r
- return;\r
-\r
- try {\r
- CloseCurrentResultSet();\r
- _command.OnReaderClosed(this);\r
- }\r
- finally {\r
- CloseInternal();\r
- }\r
- }\r
-\r
- internal void CloseInternal()\r
- {\r
- _resultsMetaData = null;\r
- _readerCache = null;\r
- _isClosed = true;\r
- }\r
-\r
- public override IEnumerator GetEnumerator ()\r
- {\r
- bool closeReader = (Behavior & CommandBehavior.CloseConnection) != 0;\r
- return new DbEnumerator (this , closeReader);\r
- }\r
-\r
- public override bool NextResult()\r
- {\r
- CloseCurrentResultSet();\r
-\r
- if ((_command.Behavior & CommandBehavior.SingleResult) != 0) {\r
- while (CloseCurrentResultSet());\r
- while (_command.NextResultSet());\r
- return false;\r
- }\r
-\r
- try {\r
- while (_resultSetStack.Count > 0) {\r
- ResultSet rs = (ResultSet)_resultSetStack.Peek();\r
-\r
- if(!rs.next()) {\r
- CloseCurrentResultSet();\r
- continue;\r
- }\r
-\r
- // must be a ResultSet\r
- object childRs = rs.getObject(1);\r
- if (childRs != null) {\r
- SchemaTable = null;\r
- _resultSetStack.Push(childRs);\r
- return true;\r
- }\r
- }\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- \r
- if (_command.NextResultSet()) {\r
- SchemaTable = null; \r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- public override bool Read()\r
- {\r
- if(null == Results ||\r
- (_readerState & (ReaderState.HasRows | ReaderState.Eof)) != ReaderState.HasRows)\r
- return false;\r
-\r
- bool firstRead = false;\r
-\r
- try {\r
- if ((_readerState & ReaderState.FirstRed) != 0) {\r
- firstRead = true;\r
- _readerState &= ~ReaderState.FirstRed;\r
- return true;\r
- }\r
- else {\r
- bool next = Results.next();\r
-\r
- if (!next)\r
- _readerState |= ReaderState.Eof;\r
-\r
- return next;\r
- }\r
- } \r
- catch (SQLException exp) {\r
- // suppress exception as .Net does\r
- return false;\r
- }\r
- finally {\r
- // in case of first read we could sampled the first value\r
- // to see whether there is a resultset, so _currentCacheFilledPosition\r
- // might be already inited\r
- if (!firstRead)\r
- _currentCacheFilledPosition = -1;\r
- }\r
- }\r
-\r
- public override bool GetBoolean(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((BooleanReaderCacheContainer)ReaderCache[columnIndex]).GetBoolean();\r
- }\r
-\r
- public bool GetBooleanSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is BooleanReaderCacheContainer) {\r
- return GetBoolean(columnIndex);\r
- }\r
- else {\r
- return Convert.ToBoolean(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override byte GetByte(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((ByteReaderCacheContainer)ReaderCache[columnIndex]).GetByte();\r
- }\r
-\r
- public byte GetByteSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is ByteReaderCacheContainer) {\r
- return GetByte(columnIndex);\r
- }\r
- else {\r
- return Convert.ToByte(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override long GetBytes(\r
- int columnIndex,\r
- long dataIndex,\r
- byte[] buffer,\r
- int bufferIndex,\r
- int length)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((BytesReaderCacheContainer)ReaderCache[columnIndex])\r
- .GetBytes(dataIndex, buffer, bufferIndex, length);\r
- }\r
-\r
- public virtual byte[] GetBytes(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((BytesReaderCacheContainer)ReaderCache[columnIndex]).GetBytes();\r
- }\r
-\r
- public override char GetChar(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- string s = ((StringReaderCacheContainer)ReaderCache[columnIndex]).GetString();\r
- if(s == null) {\r
- return '\0';\r
- }\r
- return s[0];\r
- }\r
-\r
- public char GetCharSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is StringReaderCacheContainer) {\r
- return GetChar(columnIndex);\r
- }\r
- else {\r
- return Convert.ToChar(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override long GetChars(\r
- int columnIndex,\r
- long dataIndex,\r
- char[] buffer,\r
- int bufferIndex,\r
- int length)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((CharsReaderCacheContainer)ReaderCache[columnIndex])\r
- .GetChars(dataIndex, buffer, bufferIndex, length);\r
- }\r
-\r
- public override string GetDataTypeName(int columnIndex)\r
- {\r
- try {\r
- if (ResultsMetaData == null) {\r
- return String.Empty;\r
- }\r
- return ResultsMetaData.getColumnTypeName(columnIndex + 1);\r
- }\r
- catch (SQLException exp) {\r
- throw CreateException(exp);\r
- }\r
- }\r
-\r
- public override DateTime GetDateTime(int columnIndex)\r
- {\r
- return GetDateTimeUnsafe(columnIndex);\r
- }\r
-\r
- DateTime GetDateTimeUnsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((DateTimeReaderCacheContainer)ReaderCache[columnIndex]).GetDateTime();\r
- }\r
-\r
- public DateTime GetDateTimeSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is DateTimeReaderCacheContainer) {\r
- return GetDateTimeUnsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToDateTime(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public virtual TimeSpan GetTimeSpan(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((TimeSpanReaderCacheContainer)ReaderCache[columnIndex]).GetTimeSpan();\r
- }\r
-\r
- public override Guid GetGuid(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((GuidReaderCacheContainer)ReaderCache[columnIndex]).GetGuid();\r
- }\r
-\r
- public override decimal GetDecimal(int columnIndex)\r
- {\r
- return GetDecimalUnsafe(columnIndex);\r
- }\r
-\r
- decimal GetDecimalUnsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((DecimalReaderCacheContainer)ReaderCache[columnIndex]).GetDecimal();\r
- }\r
-\r
- public decimal GetDecimalSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is DecimalReaderCacheContainer) {\r
- return GetDecimalUnsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToDecimal(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override double GetDouble(int columnIndex)\r
- {\r
- return GetDoubleUnsafe(columnIndex);\r
- }\r
-\r
- double GetDoubleUnsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((DoubleReaderCacheContainer)ReaderCache[columnIndex]).GetDouble();\r
- }\r
-\r
- public double GetDoubleSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is DoubleReaderCacheContainer) {\r
- return GetDoubleUnsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToDouble(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override float GetFloat(int columnIndex)\r
- {\r
- return GetFloatUnsafe(columnIndex);\r
- }\r
-\r
- float GetFloatUnsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((FloatReaderCacheContainer)ReaderCache[columnIndex]).GetFloat();\r
- }\r
-\r
- public float GetFloatSafe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is FloatReaderCacheContainer) {\r
- return GetFloatUnsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToSingle(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override short GetInt16(int columnIndex)\r
- {\r
- return GetInt16Unsafe(columnIndex);\r
- }\r
-\r
- short GetInt16Unsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((Int16ReaderCacheContainer)ReaderCache[columnIndex]).GetInt16();\r
- }\r
-\r
- public short GetInt16Safe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is Int16ReaderCacheContainer) {\r
- return GetInt16Unsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToInt16(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override int GetInt32(int columnIndex)\r
- {\r
- return GetInt32Unsafe(columnIndex);\r
- }\r
-\r
- int GetInt32Unsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((Int32ReaderCacheContainer)ReaderCache[columnIndex]).GetInt32();\r
- }\r
-\r
- public int GetInt32Safe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is Int32ReaderCacheContainer) {\r
- return GetInt32Unsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToInt32(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override long GetInt64(int columnIndex)\r
- {\r
- return GetInt64Unsafe(columnIndex);\r
- }\r
-\r
- long GetInt64Unsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((Int64ReaderCacheContainer)ReaderCache[columnIndex]).GetInt64();\r
- }\r
-\r
- public long GetInt64Safe(int columnIndex)\r
- {\r
- if (ReaderCache[columnIndex] is Int64ReaderCacheContainer) {\r
- return GetInt64Unsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToInt64(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override string GetName(int columnIndex)\r
- {\r
- try {\r
- if (ResultsMetaData == null) {\r
- return String.Empty;\r
- }\r
- return ResultsMetaData.getColumnName(columnIndex + 1);\r
- }\r
- catch (SQLException exp) {\r
- throw new IndexOutOfRangeException(exp.Message, exp);\r
- }\r
- }\r
-\r
- public override int GetOrdinal(String columnName)\r
- {\r
- try {\r
- int retVal = Results.findColumn(columnName);\r
- if(retVal != -1) {\r
- retVal -= 1;\r
- }\r
- return retVal;\r
- }\r
- catch (SQLException exp) {\r
- throw new IndexOutOfRangeException(exp.Message, exp);\r
- }\r
- }\r
-\r
- public override string GetString(int columnIndex)\r
- {\r
- return GetStringUnsafe(columnIndex);\r
- }\r
-\r
- string GetStringUnsafe(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ((StringReaderCacheContainer)ReaderCache[columnIndex]).GetString();\r
- }\r
-\r
- public string GetStringSafe(int columnIndex) {\r
- if (ReaderCache[columnIndex] is StringReaderCacheContainer) {\r
- return GetStringUnsafe(columnIndex);\r
- }\r
- else {\r
- return Convert.ToString(GetValue(columnIndex));\r
- }\r
- }\r
-\r
- public override object GetValue(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- if (ReaderCache[columnIndex].IsNull()) {\r
- return DBNull.Value;\r
- }\r
- return ReaderCache[columnIndex].GetValue();\r
- }\r
-\r
- public override int GetValues(Object[] values)\r
- { \r
- int columnCount = FieldCount;\r
- int i = 0;\r
- for (; i < values.Length && i < columnCount; i++) {\r
- values[i] = GetValue(i);\r
- }\r
- return i;\r
- }\r
-\r
- private void FillReaderCache(int columnIndex)\r
- {\r
- try {\r
- IReaderCacheContainer[] readerCache = ReaderCache;\r
- if ((Behavior & CommandBehavior.SequentialAccess) == 0) { \r
- while (_currentCacheFilledPosition < columnIndex) {\r
- _currentCacheFilledPosition++;\r
- readerCache[_currentCacheFilledPosition].Fetch(Results,_currentCacheFilledPosition, false);\r
- } \r
- }\r
- else {\r
- readerCache[columnIndex].Fetch(Results,columnIndex, true);\r
- }\r
- }\r
- catch(SQLException e) {\r
- _currentCacheFilledPosition = -1;\r
- throw CreateException(e);\r
- }\r
- catch (IOException e) {\r
- _currentCacheFilledPosition = -1;\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- protected virtual IReaderCacheContainer CreateReaderCacheContainer(int jdbcType, int columnIndex) {\r
- switch ((DbConvert.JavaSqlTypes)jdbcType) {\r
- case DbConvert.JavaSqlTypes.ARRAY :\r
- return new ArrayReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.BIGINT :\r
- return new Int64ReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.BINARY :\r
- case DbConvert.JavaSqlTypes.VARBINARY :\r
- case DbConvert.JavaSqlTypes.LONGVARBINARY :\r
- return new BytesReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.BIT :\r
- return new BooleanReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.BLOB :\r
- return new BlobReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.VARCHAR:\r
- case DbConvert.JavaSqlTypes.CHAR : \r
- if (String.CompareOrdinal("uniqueidentifier", ResultsMetaData.getColumnTypeName(columnIndex)) == 0) {\r
- return new GuidReaderCacheContainer();\r
- }\r
- else {\r
- return new StringReaderCacheContainer();\r
- }\r
- case DbConvert.JavaSqlTypes.CLOB :\r
- return new ClobReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.TIME :\r
- return new TimeSpanReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.DATE :\r
- AbstractDBConnection conn = (AbstractDBConnection)((ICloneable)_command.Connection);\r
- string driverName = conn.JdbcConnection.getMetaData().getDriverName();\r
-\r
- if (driverName.StartsWith("PostgreSQL")) {\r
- return new DateTimeReaderCacheContainer();\r
- }\r
- else\r
- goto case DbConvert.JavaSqlTypes.TIMESTAMP;\r
- case DbConvert.JavaSqlTypes.TIMESTAMP : \r
- return new TimestampReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.DECIMAL :\r
- case DbConvert.JavaSqlTypes.NUMERIC :\r
- // jdbc driver for oracle identitfies both FLOAT and NUMBEr columns as \r
- // java.sql.Types.NUMERIC (2), columnTypeName NUMBER, columnClassName java.math.BigDecimal \r
- // therefore we relay on scale\r
- int scale = ResultsMetaData.getScale(columnIndex);\r
- if (scale == -127) {\r
- // Oracle db type FLOAT\r
- return new DoubleReaderCacheContainer();\r
- }\r
- else {\r
- return new DecimalReaderCacheContainer();\r
- }\r
- case DbConvert.JavaSqlTypes.DOUBLE :\r
- case DbConvert.JavaSqlTypes.FLOAT :\r
- return new DoubleReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.INTEGER :\r
- return new Int32ReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.LONGVARCHAR :\r
- return new StringReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.NULL :\r
- return new NullReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.REAL :\r
- return new FloatReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.REF :\r
- return new RefReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.SMALLINT :\r
- return new Int16ReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.TINYINT :\r
- return new ByteReaderCacheContainer();\r
- case DbConvert.JavaSqlTypes.DISTINCT :\r
- case DbConvert.JavaSqlTypes.JAVA_OBJECT :\r
- case DbConvert.JavaSqlTypes.OTHER :\r
- case DbConvert.JavaSqlTypes.STRUCT :\r
- default :\r
- return new ObjectReaderCacheContainer();\r
- }\r
- }\r
-\r
- private IReaderCacheContainer[] CreateReaderCache()\r
- {\r
- try {\r
- IReaderCacheContainer[] readerCache = new IReaderCacheContainer[FieldCount];\r
- for(int i=1; i <= readerCache.Length; i++)\r
- readerCache[i-1] = CreateReaderCacheContainer(ResultsMetaData.getColumnType(i), i);\r
-\r
- return readerCache;\r
- }\r
- catch(SQLException e) {\r
- throw CreateException(e);\r
- }\r
- }\r
-\r
- protected bool IsNumeric(int columnIndex)\r
- {\r
- return ReaderCache[columnIndex].IsNumeric();\r
- }\r
-\r
- public override bool IsDBNull(int columnIndex)\r
- {\r
- FillReaderCache(columnIndex);\r
- return ReaderCache[columnIndex].IsNull();\r
- }\r
-\r
- public override Type GetFieldType(int i)\r
- {\r
- try {\r
- int javaSqlType = ResultsMetaData.getColumnType(i + 1);\r
- return DbConvert.JavaSqlTypeToClrType(javaSqlType);\r
- }\r
- catch (SQLException exp) {\r
- throw new IndexOutOfRangeException(exp.Message, exp);\r
- }\r
- }\r
-\r
- public IDataReader GetData(int i)\r
- {\r
- throw new NotSupportedException();\r
- }\r
-\r
- protected virtual void SetSchemaType(DataRow schemaRow, ResultSetMetaData metaData, int columnIndex) {\r
- DbConvert.JavaSqlTypes columnType = (DbConvert.JavaSqlTypes)metaData.getColumnType(columnIndex);\r
-\r
- switch (columnType) {\r
- case DbConvert.JavaSqlTypes.ARRAY: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Array);\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.BIGINT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt64;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.BINARY: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.BIT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfBoolean;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.BLOB: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.VARCHAR:\r
- case DbConvert.JavaSqlTypes.CHAR: {\r
- // FIXME : specific for Microsoft SQl Server driver\r
- if (String.CompareOrdinal(metaData.getColumnTypeName(columnIndex), "uniqueidentifier") == 0) {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Guid;\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfGuid;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- }\r
- else\r
- if (String.CompareOrdinal(metaData.getColumnTypeName(columnIndex), "sql_variant") == 0) {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Object;\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- }\r
- else {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- }\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.CLOB: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString; // instead og .java.sql.Clob\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.DATE: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDateTime;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- // else if(DbConvert.JavaSqlTypes.DISTINCT)\r
- // {\r
- // schemaRow ["ProviderType = (int)GetProviderType((int)columnType);\r
- // schemaRow ["DataType = typeof (?);\r
- // schemaRow ["IsLong = false;\r
- // }\r
- case DbConvert.JavaSqlTypes.DOUBLE: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble; // was typeof(float)\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.FLOAT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.REAL: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfFloat;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.INTEGER: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt32;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.JAVA_OBJECT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.LONGVARBINARY: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.LONGVARCHAR: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.DECIMAL:\r
- case DbConvert.JavaSqlTypes.NUMERIC: {\r
- int scale = ResultsMetaData.getScale(columnIndex);\r
- if (scale == -127) {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- }\r
- else {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDecimal;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- }\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.REF: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Ref);\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.SMALLINT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt16;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.STRUCT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Struct);\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.TIME: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfTimespan;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.TIMESTAMP: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDateTime;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.TINYINT: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByte;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = false;\r
- break;\r
- }\r
- case DbConvert.JavaSqlTypes.VARBINARY: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- default: {\r
- schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Object;\r
- schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;\r
- schemaRow [(int)SCHEMA_TABLE.IsLong] = true;\r
- break;\r
- }\r
- }\r
- }\r
-\r
- public override DataTable GetSchemaTable()\r
- {\r
- if (SchemaTable.Rows != null && SchemaTable.Rows.Count > 0) {\r
- return SchemaTable;\r
- }\r
- \r
- ResultSetMetaData metaData; \r
- if (Behavior == CommandBehavior.SchemaOnly) {\r
- try {\r
- metaData = ((PreparedStatement)_command.Statement).getMetaData();\r
- }\r
- catch(SQLException e) {\r
- throw CreateException("CommandBehaviour.SchemaOnly is not supported by the JDBC driver.",e);\r
- }\r
- }\r
- else {\r
- metaData = ResultsMetaData;\r
- }\r
-\r
- if (metaData == null) {\r
- return SchemaTable;\r
- }\r
-\r
- DatabaseMetaData dbMetaData = null;\r
- AbstractDBConnection clonedConnection = null;\r
- if ((_command.Behavior & CommandBehavior.KeyInfo) != 0) {\r
- clonedConnection = (AbstractDBConnection)((ICloneable)_command.Connection).Clone();\r
-\r
- try {\r
- clonedConnection.Open();\r
- dbMetaData = clonedConnection.JdbcConnection.getMetaData();\r
- }\r
- catch {\r
- //suppress\r
- if (clonedConnection != null) {\r
- clonedConnection.Close();\r
- }\r
- } \r
- }\r
- \r
- try {\r
- int tmp; \r
- for(int i = 1; i <= metaData.getColumnCount(); i++) {\r
- DataRow row = SchemaTable.NewRow ();\r
- string columnName = metaData.getColumnLabel(i);\r
- string baseColumnName = metaData.getColumnName(i);\r
- \r
- row [(int)SCHEMA_TABLE.ColumnName] = columnName; // maybe we should use metaData.getColumnLabel(i);\r
- row [(int)SCHEMA_TABLE.ColumnSize] = metaData.getColumnDisplaySize(i);\r
- row [(int)SCHEMA_TABLE.ColumnOrdinal] = i - 1;\r
- try {\r
- // FIXME : workaround for Oracle JDBC driver bug\r
- // getPrecision on BLOB, CLOB, NCLOB throws NumberFormatException\r
- tmp = metaData.getPrecision(i);\r
- }\r
- catch(java.lang.NumberFormatException e) {\r
- // supress exception\r
- tmp = 255;\r
- }\r
- row [(int)SCHEMA_TABLE.NumericPrecision] = Convert.ToInt16(tmp > 255 ? 255 : tmp);\r
- tmp = metaData.getScale(i);\r
- row [(int)SCHEMA_TABLE.NumericScale] = Convert.ToInt16(tmp > 255 ? 255 : tmp);\r
-\r
- row [(int)SCHEMA_TABLE.BaseServerName] = DBNull.Value;\r
- \r
- string catalog = null;\r
- try {\r
- catalog = metaData.getCatalogName(i);\r
- }\r
- catch (Exception e) {\r
- // supress exception\r
- }\r
- if (catalog != null && catalog.Length == 0)\r
- catalog = ((AbstractDBConnection)_command.Connection).JdbcConnection.getCatalog();\r
- row [(int)SCHEMA_TABLE.BaseCatalogName] = catalog;\r
- row [(int)SCHEMA_TABLE.BaseColumnName] = baseColumnName;\r
-\r
- string schemaName;\r
- string tableName;\r
-\r
- try {\r
- tableName = metaData.getTableName(i);\r
- }\r
- catch {\r
- tableName = null;\r
- }\r
-\r
- try {\r
- schemaName = metaData.getSchemaName(i);\r
- }\r
- catch {\r
- schemaName = null;\r
- }\r
-\r
- if (tableName != null && tableName.Length == 0)\r
- tableName = null;\r
- if (schemaName != null && schemaName.Length == 0)\r
- schemaName = null;\r
-\r
- row [(int)SCHEMA_TABLE.BaseSchemaName] = schemaName;\r
- row [(int)SCHEMA_TABLE.BaseTableName] = tableName;\r
-\r
-\r
- row [(int)SCHEMA_TABLE.AllowDBNull] = Convert.ToBoolean(metaData.isNullable(i));\r
- \r
- InitKeyInfo(row, dbMetaData, catalog, schemaName, tableName);\r
- \r
- row [(int)SCHEMA_TABLE.IsAliased] = columnName != baseColumnName;\r
- row [(int)SCHEMA_TABLE.IsExpression] = false;\r
-\r
- row [(int)SCHEMA_TABLE.IsAutoIncrement] = metaData.isAutoIncrement(i);\r
-\r
- row [(int)SCHEMA_TABLE.IsHidden] = false;\r
- row [(int)SCHEMA_TABLE.IsReadOnly] = metaData.isReadOnly(i);\r
-\r
- SetSchemaType(row, metaData, i);\r
-\r
- SchemaTable.Rows.Add (row);\r
- }\r
- }\r
- catch (SQLException e) { \r
- throw CreateException(e);\r
- }\r
- finally {\r
- if (clonedConnection != null) {\r
- clonedConnection.Close();\r
- }\r
- } \r
- return SchemaTable;\r
- }\r
-\r
- private void InitKeyInfo(DataRow row, DatabaseMetaData dbMetaData, String catalog, String schema, String table) {\r
- string column = (string)row [(int)SCHEMA_TABLE.BaseColumnName];\r
-\r
- row [(int)SCHEMA_TABLE.IsUnique] = false;\r
- row [(int)SCHEMA_TABLE.IsKey] = false;\r
- row [(int)SCHEMA_TABLE.IsIdentity] = false;\r
- row [(int)SCHEMA_TABLE.IsRowVersion] = false;\r
-\r
- if ((_command.Behavior & CommandBehavior.KeyInfo) == 0)\r
- return;\r
-\r
- if(table == null || column == null || dbMetaData == null)\r
- return;\r
-\r
- ResultSet versionCol = dbMetaData.getVersionColumns(catalog, schema, table);\r
- try {\r
- while(versionCol.next()) {\r
- if(versionCol.getString("COLUMN_NAME") == column) {\r
- if (DatabaseMetaData__Finals.versionColumnPseudo == versionCol.getShort("PSEUDO_COLUMN")) {\r
- row [(int)SCHEMA_TABLE.IsIdentity] = true;\r
- row [(int)SCHEMA_TABLE.IsRowVersion] = true;\r
- }\r
- }\r
- }\r
- }\r
- finally {\r
- versionCol.close();\r
- }\r
-\r
- ResultSet primaryKeys = dbMetaData.getPrimaryKeys(catalog,schema,table);\r
- bool primaryKeyExists = false;\r
- int columnCount = 0;\r
- try {\r
- while(primaryKeys.next()) {\r
- columnCount++;\r
- if(primaryKeys.getString("COLUMN_NAME") == column) {\r
- row [(int)SCHEMA_TABLE.IsKey] = true;\r
- primaryKeyExists = true;\r
- }\r
- }\r
- // column constitutes a key by itself, so it should be marked as unique \r
- if ((columnCount == 1) && (((bool)row [(int)SCHEMA_TABLE.IsKey]) == true)) {\r
- row [(int)SCHEMA_TABLE.IsUnique] = true;\r
- }\r
- }\r
- finally {\r
- primaryKeys.close();\r
- }\r
-\r
- ResultSet indexInfoRes = dbMetaData.getIndexInfo(catalog,schema,table,true,false);\r
- string currentIndexName = null;\r
- columnCount = 0;\r
- bool belongsToCurrentIndex = false;\r
- bool atFirstIndex = true;\r
- bool uniqueKeyExists = false;\r
- try {\r
- while(indexInfoRes.next()) {\r
- if (indexInfoRes.getShort("TYPE") == DatabaseMetaData__Finals.tableIndexStatistic) {\r
- // index of type tableIndexStatistic identifies table statistics - ignore it\r
- continue;\r
- }\r
- \r
- uniqueKeyExists = true;\r
- string iname = indexInfoRes.getString("INDEX_NAME");\r
- if (currentIndexName == iname) {\r
- // we're within the rows of the same index \r
- columnCount++;\r
- }\r
- else {\r
- // we jump to row of new index \r
- if (belongsToCurrentIndex && columnCount == 1) {\r
- // there is a constraint of type UNIQUE that applies only to this column\r
- row [(int)SCHEMA_TABLE.IsUnique] = true;\r
- }\r
-\r
- if (currentIndexName != null) {\r
- atFirstIndex = false;\r
- }\r
- currentIndexName = iname;\r
- columnCount = 1;\r
- belongsToCurrentIndex = false;\r
- }\r
-\r
- if(indexInfoRes.getString("COLUMN_NAME") == column) {\r
- // FIXME : this will cause "spare" columns marked as IsKey. Needs future investigation.\r
- // only the first index we met should be marked as a key\r
- //if (atFirstIndex) {\r
- row [(int)SCHEMA_TABLE.IsKey] = true;\r
- //}\r
- belongsToCurrentIndex = true; \r
- }\r
- }\r
- // the column appears in the last index, which is single-column\r
- if (belongsToCurrentIndex && columnCount == 1) {\r
- // there is a constraint of type UNIQUE that applies only to this column\r
- row [(int)SCHEMA_TABLE.IsUnique] = true;\r
- }\r
- }\r
- finally {\r
- indexInfoRes.close();\r
- } \r
-\r
- if(!primaryKeyExists && !uniqueKeyExists) {\r
- ResultSet bestRowId = dbMetaData.getBestRowIdentifier(catalog, schema, table, DatabaseMetaData__Finals.bestRowTemporary, false);\r
- try {\r
- while(bestRowId.next()) {\r
- if(bestRowId.getString("COLUMN_NAME") == column)\r
- row [(int)SCHEMA_TABLE.IsKey] = true;\r
- }\r
- }\r
- finally {\r
- bestRowId.close();\r
- }\r
- }\r
- }\r
-\r
- protected static DataTable ConstructSchemaTable ()\r
- {\r
- Type booleanType = DbTypes.TypeOfBoolean;\r
- Type stringType = DbTypes.TypeOfString;\r
- Type intType = DbTypes.TypeOfInt32;\r
- Type typeType = DbTypes.TypeOfType;\r
- Type shortType = DbTypes.TypeOfInt16;\r
-\r
- DataTable schemaTable = new DataTable ("SchemaTable");\r
- schemaTable.Columns.Add ("ColumnName", stringType);\r
- schemaTable.Columns.Add ("ColumnOrdinal", intType);\r
- schemaTable.Columns.Add ("ColumnSize", intType);\r
- schemaTable.Columns.Add ("NumericPrecision", shortType);\r
- schemaTable.Columns.Add ("NumericScale", shortType);\r
- schemaTable.Columns.Add ("IsUnique", booleanType);\r
- schemaTable.Columns.Add ("IsKey", booleanType);\r
- schemaTable.Columns.Add ("BaseServerName", stringType);\r
- schemaTable.Columns.Add ("BaseCatalogName", stringType);\r
- schemaTable.Columns.Add ("BaseColumnName", stringType);\r
- schemaTable.Columns.Add ("BaseSchemaName", stringType);\r
- schemaTable.Columns.Add ("BaseTableName", stringType);\r
- schemaTable.Columns.Add ("DataType", typeType);\r
- schemaTable.Columns.Add ("AllowDBNull", booleanType);\r
- schemaTable.Columns.Add ("ProviderType", intType);\r
- schemaTable.Columns.Add ("IsAliased", booleanType);\r
- schemaTable.Columns.Add ("IsExpression", booleanType);\r
- schemaTable.Columns.Add ("IsIdentity", booleanType);\r
- schemaTable.Columns.Add ("IsAutoIncrement", booleanType);\r
- schemaTable.Columns.Add ("IsRowVersion", booleanType);\r
- schemaTable.Columns.Add ("IsHidden", booleanType);\r
- schemaTable.Columns.Add ("IsLong", booleanType);\r
- schemaTable.Columns.Add ("IsReadOnly", booleanType);\r
- return schemaTable;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.ProviderBase.AbstractDbError\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-namespace System.Data.ProviderBase {\r
- using java.sql;\r
- using System.Data.Common;\r
-\r
- [Serializable]\r
- public abstract class AbstractDbError {\r
- protected SQLException _e;\r
- string _jdbcProvider;\r
-\r
- protected AbstractDbError(SQLException e, AbstractDBConnection connection) {\r
- _e = e;\r
- if (connection != null)\r
- _jdbcProvider = connection.JdbcProvider;\r
- }\r
- \r
- protected internal String DbMessage {\r
- get {\r
- return _e.Message;\r
- }\r
- }\r
- \r
- protected int DbErrorCode {\r
- get {\r
- return _e.getErrorCode();\r
- }\r
- }\r
- \r
- protected String DbSource {\r
- get {\r
- return _jdbcProvider;\r
- }\r
- }\r
- \r
- protected String DbSQLState {\r
- get {\r
- return _e.getSQLState();\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.ProviderBase.AbstractDbErrorCollection\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-\r
-namespace System.Data.ProviderBase {\r
-\r
-\r
- using System.Collections;\r
- using java.sql;\r
- using System.Data.Common;\r
-\r
- [Serializable]\r
- public abstract class AbstractDbErrorCollection : ICollection, IEnumerable {\r
- private ArrayList _list;\r
-\r
- protected AbstractDbErrorCollection(SQLException e, AbstractDBConnection connection) {\r
- _list = new ArrayList();\r
-\r
- while(e != null) {\r
- _list.Add(CreateDbError(e, connection));\r
- e = e.getNextException();\r
- }\r
- }\r
-\r
- protected abstract AbstractDbError CreateDbError(SQLException e, AbstractDBConnection connection);\r
- /**\r
- * Gets the error at the specified index.\r
- *\r
- * @param index of the error\r
- * @return Error on specified index\r
- */\r
- protected AbstractDbError GetDbItem(int index) {\r
- return (AbstractDbError)_list[index];\r
- }\r
-\r
- /**\r
- * Adds new Error to the collection\r
- *\r
- * @param value new OleDbError\r
- */\r
- public void Add(object value) {\r
- _list.Add(value);\r
- }\r
- \r
- public int Count {\r
- get {\r
- return _list.Count;\r
- }\r
- }\r
-\r
- public IEnumerator GetEnumerator() {\r
- return _list.GetEnumerator();\r
- }\r
- \r
- public void CopyTo(System.Array arr, int index) {\r
- _list.CopyTo(arr, index);\r
- }\r
-\r
- bool ICollection.IsSynchronized {\r
- get {\r
- return _list.IsSynchronized;\r
- }\r
- }\r
-\r
- Object ICollection.SyncRoot {\r
- get {\r
- return _list.SyncRoot;\r
- }\r
- }\r
- \r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.ProviderBase.AbstractDbException\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-\r
-namespace System.Data.ProviderBase {\r
-\r
- using java.sql;\r
- using System.Text;\r
- using System.Data.Common;\r
-\r
- /*\r
- * CURRENT LIMITATIONS\r
- * 1. Constructor for serialization SqlException(SerializationInfo info, StreamingContext sc) \r
- * is not supported.\r
- * 2. Method "void GetObjectData(...,...)" is not supported (serialization)\r
- */\r
-\r
- public abstract class AbstractDbException :\r
-#if NET_2_0\r
- DbException\r
-#else\r
- System.SystemException\r
-#endif\r
- {\r
- protected SQLException _cause;\r
- protected AbstractDBConnection _connection;\r
-\r
- protected AbstractDbException(Exception cause, AbstractDBConnection connection) : base(cause.Message, cause) {\r
- _connection = connection;\r
- }\r
-\r
- protected AbstractDbException(SQLException cause, AbstractDBConnection connection) : this(String.Empty, cause, connection) {}\r
-\r
- protected AbstractDbException(string message, SQLException cause, AbstractDBConnection connection) : base(message, cause) {\r
- _connection = connection;\r
- _cause = cause;\r
- }\r
-\r
- abstract protected AbstractDbErrorCollection DbErrors { get; }\r
-\r
- /**\r
- * Gets the error code of the error.\r
- * @return The error code of the error.\r
- */\r
- protected int DbErrorCode {\r
- get {\r
- return _cause != null ? _cause.getErrorCode() : 0;\r
- }\r
- }\r
-\r
- \r
- /**\r
- * Gets the name of the OLE DB provider that generated the error.\r
- * @return the name of the OLE DB provider that generated the error. \r
- */\r
- public override String Source {\r
- get {\r
- return _connection != null ? _connection.JdbcProvider : null;\r
- }\r
- }\r
-\r
- public override string Message {\r
- get {\r
- StringBuilder sb = new StringBuilder();\r
- string message = base.Message;\r
- bool addNewLine = false;\r
- if (message != null && message.Length > 0) {\r
- sb.Append(message);\r
- addNewLine = true;\r
- }\r
-\r
- foreach (AbstractDbError err in DbErrors) {\r
- if (addNewLine)\r
- sb.Append(Environment.NewLine);\r
-\r
- addNewLine = true;\r
- sb.Append(err.DbMessage);\r
- }\r
- return sb.ToString();\r
- }\r
- }\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.ProviderBase.AbstractTransaction\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System.Data.Common;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
-\r
- using java.sql;\r
-\r
- using System.Data;\r
-\r
- public abstract class AbstractTransaction : DbTransaction\r
- {\r
-\r
- protected String _transactionName;\r
- protected AbstractDBConnection _connection;\r
-\r
- protected IsolationLevel _isolationLevel;\r
-\r
- public AbstractTransaction(\r
- IsolationLevel isolationLevel,\r
- AbstractDBConnection connection,\r
- String transactionName)\r
- {\r
- connection.ValidateBeginTransaction();\r
- _transactionName = transactionName;\r
- _connection = connection;\r
- _isolationLevel = isolationLevel;\r
- try\r
- {\r
- _connection.JdbcConnection.setAutoCommit(false);\r
- _connection.JdbcConnection.setTransactionIsolation(\r
- convertIsolationLevel(isolationLevel));\r
- }\r
- catch (SQLException exp)\r
- {\r
- throw new System.InvalidOperationException(exp.Message, exp);\r
- }\r
- }\r
-\r
- \r
- /**\r
- * @see System.Data.IDbTransaction#Connection\r
- */\r
- protected override DbConnection DbConnection\r
- {\r
- get\r
- {\r
- return _connection;\r
- }\r
- }\r
-\r
- /**\r
- * @see System.Data.IDbTransaction#IsolationLevel\r
- */\r
- public override IsolationLevel IsolationLevel\r
- {\r
- get\r
- {\r
- return _isolationLevel;\r
- }\r
- }\r
-\r
- /**\r
- * @see System.Data.IDbTransaction#Commit()\r
- */\r
- public override void Commit()\r
- {\r
- if (_connection == null)\r
- return;\r
-\r
- try\r
- {\r
- _connection.JdbcConnection.commit();\r
- _connection.JdbcConnection.setAutoCommit(true);\r
- _connection = null;\r
- }\r
- catch (SQLException exp)\r
- {\r
- throw new SystemException(exp.Message, exp);\r
- }\r
- }\r
-\r
- /**\r
- * @see System.Data.IDbTransaction#Rollback()\r
- */\r
- public override void Rollback()\r
- {\r
- if (_connection == null)\r
- return;\r
-\r
- try\r
- {\r
- _connection.JdbcConnection.rollback();\r
- _connection.JdbcConnection.setAutoCommit(true);\r
- _connection = null;\r
- }\r
- catch (SQLException exp)\r
- {\r
- throw new SystemException(exp.Message, exp);\r
- }\r
- }\r
-\r
- internal AbstractTransaction ActiveTransaction {\r
- get {\r
- // recoursively return parent transaction when nesting will\r
- // be implemented\r
- return _connection != null ? this : null;\r
- }\r
- }\r
-\r
- private int convertIsolationLevel(IsolationLevel isolationLevel)\r
- {\r
- if (isolationLevel == IsolationLevel.Unspecified)\r
- return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_NONE;\r
- if (isolationLevel == IsolationLevel.ReadCommitted)\r
- return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_READ_COMMITTED;\r
- if (isolationLevel == IsolationLevel.ReadUncommitted)\r
- return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_READ_UNCOMMITTED;\r
- if (isolationLevel == IsolationLevel.RepeatableRead)\r
- return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_REPEATABLE_READ;\r
- if (isolationLevel == IsolationLevel.Serializable)\r
- return vmw.@internal.sql.ConnectionUtils__Finals.TRANSACTION_SERIALIZABLE;\r
-\r
- throw new NotSupportedException("The Isolation level '" + isolationLevel + "' is not supported");\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.Common.DbConvert\r
-//\r
-// Author:\r
-// Boris Kirzner (borisk@mainsoft.com)\r
-//\r
-\r
-using System;\r
-using System.Data.Common;\r
-\r
-using java.io;\r
-using java.sql;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public abstract class DbConvert\r
- {\r
- #region Fields\r
-\r
- const long JAVA_MIN_MILLIS_UTC = -62135769600000L; // java.sql.Timestamp.valueOf("0001-01-01 00:00:00.000000000").getTime() at Greenwich time zone.\r
- static readonly long TIMEZONE_RAW_OFFSET;\r
- // .NET milliseconds value of DateTime(1582,1,1,0,0,0,0).Ticks/TimeSpan.TicksPerMillisecond \r
- const long CLR_MILLIS_1582 = 49891507200000L;\r
- const long MILLIS_PER_TWO_DAYS = 2 * TimeSpan.TicksPerDay / TimeSpan.TicksPerMillisecond; // 172800000L;\r
- internal static readonly java.util.TimeZone DEFAULT_TIME_ZONE;\r
-\r
- #endregion // Fields\r
-\r
- #region java.sql.Types constants\r
-\r
- internal enum JavaSqlTypes {\r
- ARRAY = 2003 ,\r
- BIGINT = -5, \r
- BINARY = -2 ,\r
- BIT = -7 ,\r
- BLOB = 2004, \r
- BOOLEAN = 16, \r
- CHAR = 1, \r
- CLOB = 2005, \r
- DATALINK = 70, \r
- DATE = 91, \r
- DECIMAL = 3, \r
- DISTINCT = 2001, \r
- DOUBLE = 8, \r
- FLOAT = 6, \r
- INTEGER = 4, \r
- JAVA_OBJECT = 2000, \r
- LONGVARBINARY = -4,\r
- LONGVARCHAR = -1, \r
- NULL = 0, \r
- NUMERIC = 2 ,\r
- OTHER = 1111 ,\r
- REAL = 7 ,\r
- REF = 2006 ,\r
- SMALLINT = 5,\r
- STRUCT = 2002, \r
- TIME = 92, \r
- TIMESTAMP = 93, \r
- TINYINT = -6, \r
- VARBINARY = -3, \r
- VARCHAR = 12,\r
- // NOTSET = int.MinValue\r
- }\r
-\r
-\r
- #endregion // java.sql.Types constants\r
-\r
- #region Methods\r
-\r
- static DbConvert()\r
- {\r
- DEFAULT_TIME_ZONE = java.util.SimpleTimeZone.getDefault(); \r
- TIMEZONE_RAW_OFFSET = (long)DEFAULT_TIME_ZONE.getRawOffset(); \r
- }\r
-\r
- // The diff between .Net and Java goes as the following:\r
- // * at 1582: java has 10 days less than .net\r
- // * below 1500 (exept 1200,800,400) : each 100'th year java adds 1 day over .net. \r
- // Current implementation compatible with .net in 1-99 and since 1582. In 100-1582 we're not compatible with .Ner nor with Java\r
-\r
- internal static long JavaMillisToClrMillis(long javaMillis)\r
- {\r
- return JavaMillisToClrMillisUTC(javaMillis) + TIMEZONE_RAW_OFFSET;\r
- }\r
-\r
- internal static long JavaMillisToClrMillisUTC(long javaMillis) {\r
- long clrMillis = javaMillis - JAVA_MIN_MILLIS_UTC;\r
- if (clrMillis > CLR_MILLIS_1582) {\r
- clrMillis -= MILLIS_PER_TWO_DAYS;\r
- }\r
- return clrMillis;\r
- }\r
-\r
- internal static long ClrMillisToJavaMillis(long clrMillis)\r
- {\r
- return ClrMillisToJavaMillisUTC(clrMillis) - TIMEZONE_RAW_OFFSET;\r
- }\r
-\r
- internal static long ClrMillisToJavaMillisUTC(long clrMillis) {\r
- long javaMillis = clrMillis + JAVA_MIN_MILLIS_UTC;\r
- if (clrMillis > CLR_MILLIS_1582) {\r
- javaMillis += MILLIS_PER_TWO_DAYS;\r
- }\r
- return javaMillis;\r
- }\r
-\r
- internal static java.sql.Time ClrTicksToJavaTime(long ticks) {\r
- return new Time((ticks / TimeSpan.TicksPerMillisecond)\r
- - DEFAULT_TIME_ZONE.getRawOffset());\r
- }\r
-\r
- internal static java.sql.Date ClrTicksToJavaDate(long ticks) {\r
- java.sql.Date d = new java.sql.Date(0);\r
- ClrTicksToJavaDate(d, ticks);\r
- return d;\r
- }\r
-\r
- internal static java.sql.Timestamp ClrTicksToJavaTimestamp(long ticks)\r
- {\r
- java.sql.Timestamp ts = new java.sql.Timestamp(0);\r
- ClrTicksToJavaDate(ts, ticks);\r
-\r
-// int nanos = (int)(ticks % TimeSpan.TicksPerMillisecond) * 100;\r
-// ts.setNanos(javaTimestamp.getNanos() + nanos);\r
-\r
- return ts;\r
- }\r
-\r
- internal static void ClrTicksToJavaDate(java.util.Date d, long ticks) {\r
- long millis = ClrMillisToJavaMillis(ticks / TimeSpan.TicksPerMillisecond);\r
-\r
- d.setTime(millis);\r
- if (DEFAULT_TIME_ZONE.inDaylightTime(d)) {\r
- millis -= DEFAULT_TIME_ZONE.getDSTSavings();\r
- d.setTime(millis);\r
- }\r
- }\r
- \r
- internal static long JavaTimestampToClrTicks(java.sql.Timestamp ts)\r
- {\r
- long ticks = JavaDateToClrTicks(ts);\r
- // Extra ticks, for dbs that can save them. \r
- // We do not use it, since .net does not saves ticks for fractial milliseconds\r
- // long ticksLessThanMilliseconds = (ts.getNanos()*100) % TimeSpan.TicksPerMillisecond;\r
- // ticks += ticksLessThanMilliseconds;\r
- \r
- return ticks;\r
- }\r
-\r
- internal static long JavaDateToClrTicks(java.util.Date d) {\r
- long millis = JavaMillisToClrMillis(d.getTime());\r
- if (DEFAULT_TIME_ZONE.inDaylightTime(d)) {\r
- millis += DEFAULT_TIME_ZONE.getDSTSavings();\r
- }\r
- return millis * TimeSpan.TicksPerMillisecond;\r
- }\r
-\r
- internal static long JavaTimeToClrTicks(java.sql.Time t) {\r
- return (t.getTime() + DEFAULT_TIME_ZONE.getRawOffset())\r
- * TimeSpan.TicksPerMillisecond;\r
- }\r
-\r
- internal static Type JavaSqlTypeToClrType(int sqlTypeValue)\r
- {\r
- JavaSqlTypes sqlType = (JavaSqlTypes)sqlTypeValue;\r
-\r
- switch (sqlType) {\r
- case JavaSqlTypes.ARRAY : return typeof (java.sql.Array);\r
- case JavaSqlTypes.BIGINT : return DbTypes.TypeOfInt64;\r
- case JavaSqlTypes.BINARY : return DbTypes.TypeOfByteArray;\r
- case JavaSqlTypes.BIT : return DbTypes.TypeOfBoolean;\r
- case JavaSqlTypes.BLOB : return DbTypes.TypeOfByteArray;\r
- case JavaSqlTypes.BOOLEAN : return DbTypes.TypeOfBoolean;\r
- case JavaSqlTypes.CHAR : return DbTypes.TypeOfString;\r
- case JavaSqlTypes.CLOB : return DbTypes.TypeOfString;\r
-// case JavaSqlTypes.DATALINK :\r
- case JavaSqlTypes.DATE : return DbTypes.TypeOfDateTime;\r
- case JavaSqlTypes.DECIMAL : return DbTypes.TypeOfDecimal;\r
-// case JavaSqlTypes.DISTINCT :\r
- case JavaSqlTypes.DOUBLE : return DbTypes.TypeOfDouble;\r
- case JavaSqlTypes.FLOAT : return DbTypes.TypeOfDouble;\r
- case JavaSqlTypes.INTEGER : return DbTypes.TypeOfInt32;\r
-// case JavaSqlTypes.JAVA_OBJECT :\r
- case JavaSqlTypes.LONGVARBINARY : return DbTypes.TypeOfByteArray;\r
- case JavaSqlTypes.LONGVARCHAR : return DbTypes.TypeOfString;\r
- case JavaSqlTypes.NULL : return null;\r
- case JavaSqlTypes.NUMERIC : return DbTypes.TypeOfDecimal;\r
-// case JavaSqlTypes.OTHER :\r
- case JavaSqlTypes.REAL : return DbTypes.TypeOfSingle;\r
- case JavaSqlTypes.REF : return typeof (java.sql.Ref);\r
- case JavaSqlTypes.SMALLINT : return DbTypes.TypeOfInt16;\r
- case JavaSqlTypes.STRUCT : return typeof (java.sql.Struct);\r
- case JavaSqlTypes.TIME : return DbTypes.TypeOfTimespan;\r
- case JavaSqlTypes.TIMESTAMP : return DbTypes.TypeOfDateTime;\r
- case JavaSqlTypes.TINYINT : return DbTypes.TypeOfByte;\r
- case JavaSqlTypes.VARBINARY : return DbTypes.TypeOfByteArray;\r
- case JavaSqlTypes.VARCHAR : return DbTypes.TypeOfString;\r
- default : return DbTypes.TypeOfObject;\r
- }\r
-\r
- }\r
-\r
-\r
- internal static object JavaResultSetToClrWrapper(CallableStatement results,int columnIndex,JavaSqlTypes javaSqlType,int maxLength ,ResultSetMetaData resultsMetaData)\r
- {\r
- object returnValue = null; \r
- sbyte[] sbyteArray;\r
- long milliseconds;\r
- long ticks;\r
- string s;\r
- columnIndex++; //jdbc style\r
- switch (javaSqlType) {\r
- case JavaSqlTypes.ARRAY :\r
- returnValue = results.getArray(columnIndex);\r
- break;\r
- case JavaSqlTypes.BIGINT :\r
- returnValue = results.getLong(columnIndex);\r
- break;\r
- case JavaSqlTypes.BINARY :\r
- case JavaSqlTypes.VARBINARY :\r
- case JavaSqlTypes.LONGVARBINARY :\r
- // FIXME : comsider using maxLength\r
- sbyteArray = results.getBytes(columnIndex);\r
- if (sbyteArray != null) {\r
- returnValue = vmw.common.TypeUtils.ToByteArray(sbyteArray);\r
- }\r
- break;\r
- case JavaSqlTypes.BIT :\r
- returnValue = results.getBoolean(columnIndex);\r
- break;\r
- case JavaSqlTypes.BLOB :\r
- // FIXME : comsider using maxLength\r
- java.sql.Blob blob = results.getBlob(columnIndex);\r
- if (blob != null) {\r
- InputStream input = blob.getBinaryStream(); \r
- if (input == null) {\r
- returnValue = new byte[0];\r
- }\r
- else {\r
- long length = blob.length();\r
- byte[] byteValue = new byte[length];\r
- sbyte[] sbyteValue = vmw.common.TypeUtils.ToSByteArray(byteValue);\r
- input.read(sbyteValue);\r
- returnValue = byteValue;\r
- }\r
- }\r
- break; \r
- case JavaSqlTypes.CHAR : \r
- if (resultsMetaData != null && "uniqueidentifier".Equals(resultsMetaData.getColumnTypeName(columnIndex))) {\r
- returnValue = new Guid(results.getString(columnIndex));\r
- }\r
- else {\r
- // Oracle Jdbc driver returns extra trailing 0 chars for NCHAR columns, so we threat this at parameter.Size level\r
- s = results.getString(columnIndex);\r
- if ((s != null) && (maxLength < s.Length)) {\r
- s = s.Substring(0,maxLength);\r
- }\r
- returnValue = s;\r
- }\r
- break;\r
- case JavaSqlTypes.CLOB :\r
- // FIXME : comsider using maxLength\r
- java.sql.Clob clob = results.getClob(columnIndex);\r
- if (clob != null) {\r
- java.io.Reader reader = clob.getCharacterStream(); \r
- if (reader == null) {\r
- returnValue = String.Empty;\r
- }\r
- else {\r
- long length = clob.length();\r
- char[] charValue = new char[length];\r
- reader.read(charValue);\r
- returnValue = new string(charValue);\r
- }\r
- }\r
- break; \r
- case JavaSqlTypes.TIME :\r
- Time t = results.getTime(columnIndex);\r
- if (t != null) {\r
- returnValue = new TimeSpan(JavaTimeToClrTicks(t));\r
- }\r
- break; \r
- case JavaSqlTypes.DATE :\r
- Date d = results.getDate(columnIndex);\r
- if (d != null) {\r
- returnValue = new DateTime(JavaDateToClrTicks(d));\r
- }\r
- break;\r
- case JavaSqlTypes.TIMESTAMP : \r
- Timestamp ts = results.getTimestamp(columnIndex);\r
- if (ts != null) {\r
- returnValue = new DateTime(JavaTimestampToClrTicks(ts));\r
- }\r
- break; \r
- case JavaSqlTypes.DECIMAL :\r
- case JavaSqlTypes.NUMERIC :\r
- // java.sql.Types.NUMERIC (2), columnTypeName NUMBER, columnClassName java.math.BigDecimal \r
- // therefore we rely on scale\r
- if (resultsMetaData != null && resultsMetaData.getScale(columnIndex) == -127) {\r
- // Oracle db type FLOAT\r
- returnValue = results.getDouble(columnIndex);\r
- }\r
- else {\r
- java.math.BigDecimal bigDecimal = results.getBigDecimal(columnIndex);\r
- if (bigDecimal != null) {\r
- returnValue = vmw.common.PrimitiveTypeUtils.BigDecimalToDecimal(bigDecimal);\r
- }\r
- }\r
- break; \r
- case JavaSqlTypes.DISTINCT :\r
- returnValue = results.getObject(columnIndex);\r
- break;\r
- case JavaSqlTypes.DOUBLE :\r
- returnValue = results.getDouble(columnIndex);\r
- break;\r
- case JavaSqlTypes.FLOAT :\r
- //float f = results.getFloat(columnIndex);\r
- returnValue = results.getDouble(columnIndex);\r
- break;\r
- case JavaSqlTypes.INTEGER :\r
- returnValue = results.getInt(columnIndex);\r
- break;\r
- case JavaSqlTypes.JAVA_OBJECT :\r
- returnValue = results.getObject(columnIndex);\r
- break;\r
- case JavaSqlTypes.LONGVARCHAR :\r
- returnValue = results.getString(columnIndex);\r
- break;\r
- case JavaSqlTypes.NULL :\r
- returnValue = DBNull.Value;\r
- break;\r
- case JavaSqlTypes.OTHER :\r
- returnValue = results.getObject(columnIndex);\r
- break;\r
- case JavaSqlTypes.REAL :\r
- returnValue = results.getFloat(columnIndex);\r
- break;\r
- case JavaSqlTypes.REF :\r
- returnValue = results.getRef(columnIndex);\r
- break;\r
- case JavaSqlTypes.SMALLINT :\r
- returnValue = results.getShort(columnIndex);\r
- break;\r
- case JavaSqlTypes.STRUCT :\r
- returnValue = results.getObject(columnIndex);\r
- break;\r
- case JavaSqlTypes.TINYINT :\r
- returnValue = Convert.ToByte(results.getByte(columnIndex));\r
- break;\r
- case JavaSqlTypes.VARCHAR :\r
- s = results.getString(columnIndex);\r
- if ((s != null) && (maxLength < s.Length)) {\r
- s = s.Substring(0,maxLength);\r
- }\r
- returnValue = s;\r
- break;\r
- default :\r
- returnValue = results.getObject(columnIndex);\r
- break;\r
- }\r
- \r
- if (results.wasNull() || results == null) {\r
- return DBNull.Value;\r
- } \r
- return returnValue;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//\r
-// System.Data.ProviderBase.ParameterMetaDataWrapper\r
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//\r
-\r
-using System;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public class ParameterMetadataWrapper : java.sql.ResultSetMetaData\r
- {\r
- #region Fields \r
-\r
- ParameterMetaData _parameterMetaData;\r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
-\r
- public ParameterMetadataWrapper(ParameterMetaData parameterMetaData)\r
- {\r
- _parameterMetaData = parameterMetaData;\r
- }\r
-\r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public int getColumnCount() { throw new NotImplementedException(); }\r
-\r
- public int getColumnDisplaySize(int i) { throw new NotImplementedException(); }\r
-\r
- public int getColumnType(int i) { throw new NotImplementedException(); }\r
-\r
- public int getPrecision(int i) { throw new NotImplementedException(); }\r
-\r
- public int getScale(int i) { throw new NotImplementedException(); }\r
-\r
- public int isNullable(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isAutoIncrement(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isCaseSensitive(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isCurrency(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isDefinitelyWritable(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isReadOnly(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isSearchable(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isSigned(int i) { throw new NotImplementedException(); }\r
-\r
- public bool isWritable(int i) { throw new NotImplementedException(); }\r
-\r
- public String getCatalogName(int i) { throw new NotImplementedException(); }\r
-\r
- public String getColumnClassName(int i) { throw new NotImplementedException(); }\r
-\r
- public String getColumnLabel(int i) { throw new NotImplementedException(); }\r
-\r
- public String getColumnName(int i) { throw new NotImplementedException(); }\r
-\r
- public String getColumnTypeName(int i) { return _parameterMetaData.getParameterTypeName(i); }\r
-\r
- public String getSchemaName(int i) { throw new NotImplementedException(); }\r
-\r
- public String getTableName(int i) { throw new NotImplementedException(); }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//\r
-// System.Data.ProviderBase.ReaderCache.cs\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using java.sql;\r
-\r
-namespace System.Data.ProviderBase\r
-{\r
- public interface IReaderCacheContainer\r
- {\r
- void Fetch(ResultSet rs, int columnIndex, bool isSequential);\r
- bool IsNull();\r
- bool IsNumeric();\r
- object GetValue();\r
- }\r
-\r
- public abstract class ReaderCacheContainerBase : IReaderCacheContainer\r
- {\r
- #region Fields\r
-\r
- bool _isNull;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected abstract void FetchInternal(ResultSet rs, int columnIndex);\r
- protected virtual void FetchInternal(ResultSet rs, int columnIndex, bool isSequential) {\r
- FetchInternal(rs, columnIndex);\r
- }\r
-\r
- public virtual bool IsNumeric() {\r
- return false;\r
- }\r
-\r
- public abstract object GetValue(); \r
-\r
- public void Fetch(ResultSet rs, int columnIndex, bool isSequential)\r
- {\r
- FetchInternal(rs, columnIndex + 1, isSequential);\r
- _isNull = rs.wasNull();\r
- }\r
-\r
- public bool IsNull()\r
- {\r
- return _isNull;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class ArrayReaderCacheContainer : ReaderCacheContainerBase // Types.ARRAY\r
- {\r
- #region Fields\r
-\r
- object _a;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _a = rs.getArray(columnIndex).getArray();\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _a;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class Int64ReaderCacheContainer : ReaderCacheContainerBase // Types.BIGINT\r
- {\r
- #region Fields\r
- \r
- long _l;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _l = rs.getLong(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
-\r
- public override object GetValue()\r
- {\r
- return _l;\r
- }\r
-\r
- internal long GetInt64()\r
- {\r
- return _l;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal class BytesReaderCacheContainer : ReaderCacheContainerBase // Types.BINARY, Types.VARBINARY, Types.LONGVARBINARY\r
- {\r
- #region Fields\r
-\r
- protected byte[] _b;\r
- \r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- sbyte[] sbyteArray = rs.getBytes(columnIndex);\r
- if (sbyteArray != null) {\r
- _b = (byte[])vmw.common.TypeUtils.ToByteArray(sbyteArray);\r
- }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _b;\r
- }\r
-\r
- internal byte[] GetBytes()\r
- {\r
- return (byte[])GetValue();\r
- }\r
-\r
- internal virtual long GetBytes(\r
- long dataIndex,\r
- byte[] buffer,\r
- int bufferIndex,\r
- int length) {\r
- if (_b == null)\r
- return 0;\r
- if (buffer == null)\r
- return _b.LongLength;\r
- long actualLength = ((dataIndex + length) >= _b.LongLength) ? (_b.LongLength - dataIndex) : length;\r
- Array.Copy(_b,dataIndex,buffer,bufferIndex,actualLength);\r
- return actualLength;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class BooleanReaderCacheContainer : ReaderCacheContainerBase // Types.BIT\r
- {\r
- #region Fields\r
- \r
- bool _b;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _b = rs.getBoolean(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _b;\r
- }\r
-\r
- internal bool GetBoolean()\r
- {\r
- return _b;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class BlobReaderCacheContainer : BytesReaderCacheContainer // Types.BLOB\r
- {\r
- #region Fields\r
-\r
- static readonly byte[] _emptyByteArr = new byte[0];\r
- java.sql.Blob _blob;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex) {\r
- throw new NotImplementedException("Should not be called");\r
- }\r
-\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex, bool isSequential)\r
- {\r
- _blob = rs.getBlob(columnIndex);\r
- if (!isSequential)\r
- ReadAll();\r
- \r
- }\r
-\r
- void ReadAll() {\r
- if (_blob != null) {\r
- long length = _blob.length(); \r
- if (length == 0) {\r
- _b = _emptyByteArr;\r
- }\r
- else { \r
- java.io.InputStream input = _blob.getBinaryStream(); \r
- byte[] byteValue = new byte[length];\r
- sbyte[] sbyteValue = vmw.common.TypeUtils.ToSByteArray(byteValue);\r
- input.read(sbyteValue);\r
- _b = byteValue;\r
- }\r
- }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- if (_b == null)\r
- ReadAll();\r
- return base.GetValue();\r
- }\r
-\r
- internal override long GetBytes(long dataIndex, byte[] buffer, int bufferIndex, int length) {\r
- if (_b != null)\r
- return base.GetBytes (dataIndex, buffer, bufferIndex, length);\r
-\r
- if (_blob == null)\r
- return 0;\r
-\r
- if (buffer == null)\r
- return _blob.length();\r
-\r
- java.io.InputStream input = _blob.getBinaryStream();\r
- input.skip(dataIndex);\r
- return input.read(vmw.common.TypeUtils.ToSByteArray(buffer), bufferIndex, length);\r
- }\r
-\r
-\r
- #endregion // Methods\r
- }\r
- \r
-\r
- internal abstract class CharsReaderCacheContainer : ReaderCacheContainerBase // \r
- {\r
- #region Fields\r
- \r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- internal abstract long GetChars(\r
- long dataIndex,\r
- char[] buffer,\r
- int bufferIndex,\r
- int length);\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class GuidReaderCacheContainer : ReaderCacheContainerBase // Types.CHAR\r
- {\r
- #region Fields\r
- \r
- Guid _g;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- string s = rs.getString(columnIndex);\r
- if (s != null)\r
- _g = new Guid(s);\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _g;\r
- }\r
-\r
- internal Guid GetGuid()\r
- {\r
- return _g;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class ClobReaderCacheContainer : StringReaderCacheContainer // Types.CLOB\r
- {\r
- #region Fields\r
- \r
- java.sql.Clob _clob;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex, bool isSequential)\r
- {\r
- _clob = rs.getClob(columnIndex);\r
- if (!isSequential)\r
- ReadAll();\r
- \r
- }\r
-\r
- void ReadAll() {\r
- if (_clob != null) {\r
- long length = _clob.length(); \r
- if (length == 0) {\r
- _s = String.Empty;\r
- }\r
- else { \r
- java.io.Reader reader = _clob.getCharacterStream(); \r
- char[] charValue = new char[length];\r
- reader.read(charValue);\r
- if (charValue != null)\r
- _s = new String(charValue);\r
- }\r
- }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- if (_s == null)\r
- ReadAll();\r
- return base.GetValue();\r
- }\r
-\r
- internal override long GetChars(long dataIndex, char[] buffer, int bufferIndex, int length) {\r
- if (_s != null)\r
- return base.GetChars (dataIndex, buffer, bufferIndex, length);\r
-\r
- if (_clob == null)\r
- return 0;\r
-\r
- if (buffer == null)\r
- return _clob.length();\r
-\r
- java.io.Reader reader = _clob.getCharacterStream();\r
- reader.skip(dataIndex);\r
- return reader.read(buffer, bufferIndex, length);\r
- }\r
-\r
-\r
- #endregion // Methods\r
- }\r
- \r
-\r
- internal sealed class TimeSpanReaderCacheContainer : ReaderCacheContainerBase // Types.TIME\r
- {\r
- #region Fields\r
- \r
- TimeSpan _t;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- Time t = rs.getTime(columnIndex);\r
- if (t != null) { \r
- _t = new TimeSpan(DbConvert.JavaTimeToClrTicks(t));\r
- }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _t;\r
- }\r
-\r
- internal TimeSpan GetTimeSpan()\r
- {\r
- return _t;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal class DateTimeReaderCacheContainer : ReaderCacheContainerBase // Types.TIMESTAMP\r
- {\r
- #region Fields\r
- \r
- protected DateTime _d;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- Date d = rs.getDate(columnIndex);\r
- if (d != null) {\r
- _d = new DateTime(DbConvert.JavaDateToClrTicks(d));\r
- }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _d;\r
- }\r
-\r
- internal DateTime GetDateTime()\r
- {\r
- return _d;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
- internal sealed class TimestampReaderCacheContainer : DateTimeReaderCacheContainer // Types.DATE\r
- {\r
- protected override void FetchInternal(ResultSet rs, int columnIndex) {\r
- Timestamp ts = rs.getTimestamp(columnIndex);\r
- if (ts != null) {\r
- _d = new DateTime(DbConvert.JavaTimestampToClrTicks(ts));\r
- }\r
- }\r
- }\r
-\r
-\r
- internal sealed class DecimalReaderCacheContainer : ReaderCacheContainerBase // Types.DECIMAL, Types.NUMERIC\r
- {\r
- #region Fields\r
- \r
- decimal _d;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- java.math.BigDecimal bigDecimal = rs.getBigDecimal(columnIndex);\r
- if (bigDecimal != null) {\r
- _d = (decimal)vmw.common.PrimitiveTypeUtils.BigDecimalToDecimal(bigDecimal);\r
- }\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _d;\r
- }\r
-\r
- internal decimal GetDecimal()\r
- {\r
- return _d;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class DoubleReaderCacheContainer : ReaderCacheContainerBase // Types.DOUBLE, Types.Float, Types.NUMERIC for Oracle with scale = -127\r
- {\r
- #region Fields\r
- \r
- double _d;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _d = rs.getDouble(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _d;\r
- }\r
-\r
- internal double GetDouble()\r
- {\r
- return _d;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class Int32ReaderCacheContainer : ReaderCacheContainerBase // Types.INTEGER\r
- {\r
- #region Fields\r
- \r
- int _i;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _i = rs.getInt(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _i;\r
- }\r
-\r
- internal int GetInt32()\r
- {\r
- return _i;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal class StringReaderCacheContainer : CharsReaderCacheContainer // Types.LONGVARCHAR, Types.VARCHAR, Types.CHAR\r
- {\r
- #region Fields\r
- \r
- protected string _s;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _s = rs.getString(columnIndex);\r
- // Oracle Jdbc driver returns extra trailing 0 chars for NCHAR columns\r
-// if ((_s != null) && (_jdbcType == 1)) { \r
-// Console.WriteLine(_jdbcType);\r
-// int zeroIndex = ((string)_s).IndexOf((char)0);\r
-// if (zeroIndex > 0) {\r
-// Console.WriteLine("zero-padded");\r
-// _s = ((string)_s).Substring(0,zeroIndex);\r
-// }\r
-// else {\r
-// // Oracle sometimes pads with blanks (32)\r
-// int blankIndex = ((string)_s).IndexOf((char)32);\r
-// if (blankIndex > 0) {\r
-// Console.WriteLine("blank-padded");\r
-// _s = ((string)_s).Substring(0,blankIndex);\r
-// }\r
-// }\r
-// }\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _s;\r
- }\r
-\r
- internal string GetString()\r
- {\r
- return _s;\r
- }\r
- \r
- internal override long GetChars(long dataIndex, char[] buffer, int bufferIndex, int length) {\r
- if (_s == null)\r
- return 0;\r
- if (buffer == null)\r
- return _s.Length;\r
- int actualLength = ((dataIndex + length) >= _s.Length) ? (_s.Length - (int)dataIndex) : length;\r
- _s.CopyTo((int)dataIndex, buffer, bufferIndex, actualLength);\r
- return actualLength;\r
- }\r
-\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class NullReaderCacheContainer : ReaderCacheContainerBase // Types.NULL\r
- {\r
- #region Fields\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return DBNull.Value;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class FloatReaderCacheContainer : ReaderCacheContainerBase // Types.REAL\r
- {\r
- #region Fields\r
- \r
- float _f;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _f = rs.getFloat(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _f;\r
- }\r
-\r
- internal float GetFloat()\r
- {\r
- return _f;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class RefReaderCacheContainer : ReaderCacheContainerBase // Types.REF\r
- {\r
- #region Fields\r
- \r
- java.sql.Ref _r;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _r = rs.getRef(columnIndex);\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _r;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class Int16ReaderCacheContainer : ReaderCacheContainerBase // Types.SMALLINT\r
- {\r
- #region Fields\r
- \r
- short _s;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _s = rs.getShort(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _s;\r
- }\r
-\r
- internal short GetInt16()\r
- {\r
- return _s;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class ByteReaderCacheContainer : ReaderCacheContainerBase // Types.TINYINT\r
- {\r
- #region Fields\r
- \r
- byte _b;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- _b = (byte)rs.getByte(columnIndex);\r
- }\r
-\r
- public override bool IsNumeric() {\r
- return true;\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return _b;\r
- }\r
-\r
- internal byte GetByte()\r
- {\r
- return _b;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-\r
- internal sealed class ObjectReaderCacheContainer : ReaderCacheContainerBase // Types.Distinct, Types.JAVA_OBJECT, Types.OTHER, Types.STRUCT\r
- {\r
- #region Fields\r
- \r
- object o;\r
-\r
- #endregion // Fields\r
-\r
- #region Methods\r
-\r
- protected override void FetchInternal(ResultSet rs, int columnIndex)\r
- {\r
- o = rs.getObject(columnIndex);\r
- }\r
-\r
- public override object GetValue()\r
- {\r
- return o;\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-\r
-}\r
+++ /dev/null
-//
-// System.Data.SqlClient.SqlCommand
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Data;
-using System.Data.Common;
-using System.Data.ProviderBase;
-using System.Xml;
-
-using java.sql;
-
-namespace System.Data.SqlClient
-{
- public sealed class SqlCommand : AbstractDbCommand
- {
- #region Fields
-
- #endregion // Fields
-
- #region Constructors
-
- // Initializes a new instance of the SqlCommand class.
- // The base constructor initializes all fields to their default values.
- // The following table shows initial property values for an instance of SqlCommand.
- public SqlCommand() : this(null, null, null)
- {
- }
-
- public SqlCommand(SqlConnection connection) : this(null, connection, null)
- {
- }
-
- // Initializes a new instance of the SqlCommand class with the text of the query.
- public SqlCommand(String cmdText) : this(cmdText, null, null)
- {
- }
-
- // Initializes a new instance of the SqlCommand class with the text of the query and a SqlConnection.
- public SqlCommand(String cmdText, SqlConnection connection) : this(cmdText, connection, null)
- {
- }
-
- // Initializes a new instance of the SqlCommand class with the text of the query, a SqlConnection, and the Transaction.
- public SqlCommand(
- String cmdText,
- SqlConnection connection,
- SqlTransaction transaction)
- : base(cmdText, connection, transaction)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- protected override string InternalCommandText {
- get {
- string commandText = CommandText;
- if (CommandType != CommandType.StoredProcedure ||
- string.IsNullOrEmpty (commandText) ||
- commandText [0] == '[' ||
- commandText.IndexOf ('.') >= 0)
- return commandText;
-
- string trimmedCommandText = commandText.TrimEnd ();
- if (trimmedCommandText.Length > 0 && trimmedCommandText [trimmedCommandText.Length - 1] != ')')
- commandText = String.Concat ("[", commandText, "]");
-
- return commandText;
- }
- }
-
- public new SqlConnection Connection
- {
- get { return (SqlConnection)base.Connection; }
- set { base.Connection = value; }
- }
-
- public new SqlParameterCollection Parameters
- {
- get {
- return (SqlParameterCollection)base.Parameters;
- }
- }
-
- public new SqlTransaction Transaction
- {
- get { return (SqlTransaction)base.Transaction; }
- set { base.Transaction = value; }
- }
-
-#if USE_DOTNET_REGEX
- protected override Regex StoredProcedureRegExp
-#else
- protected override java.util.regex.Pattern StoredProcedureRegExp {
-#endif
- get { return SqlStatementsHelper.NamedParameterStoredProcedureRegExp; }
- }
-
- protected override SimpleRegex ParameterRegExp
- {
- get { return SqlStatementsHelper.NamedParameterRegExp; }
- }
-
- #endregion // Properties
-
- #region Methods
-
- public XmlReader ExecuteXmlReader() {
- return SqlXmlTextReader.Create(ExecuteReader(CommandBehavior.SequentialAccess));
- }
-
- public new SqlDataReader ExecuteReader()
- {
- return (SqlDataReader)ExecuteReader(CommandBehavior.Default);
- }
-
- public new SqlDataReader ExecuteReader(CommandBehavior behavior)
- {
- return (SqlDataReader)base.ExecuteReader(behavior);
- }
-
- public new SqlParameter CreateParameter()
- {
- return (SqlParameter)CreateParameterInternal();
- }
-
- protected sealed override void CheckParameters()
- {
- // do nothing
- }
-
- protected override AbstractDbParameter GetUserParameter(string parameterName, IList userParametersList, int userParametersListPosition/*,int userParametersListStart,int userParameterListCount*/)
- {
-// Match match = SqlStatementsHelper.NamedParameterRegExp.Match(parameterName);
-// parameterName = match.Result("${USERPARAM}");
-// if (parameterName.Length == 0)
-// return null;
-
- for(int i=0; i < userParametersList.Count; i++) {
- AbstractDbParameter userParameter = (AbstractDbParameter)userParametersList[i];
- if (String.Compare(parameterName, userParameter.Placeholder.Trim(), true, System.Globalization.CultureInfo.InvariantCulture) == 0) {
- return userParameter;
- }
- }
-
- return null;
- }
-
- protected override AbstractDbParameter GetReturnParameter (IList userParametersList)
- {
- for(int i=0; i < userParametersList.Count; i++) {
- AbstractDbParameter userParameter = (AbstractDbParameter)userParametersList[i];
- if (userParameter.Direction == ParameterDirection.ReturnValue) {
- return userParameter;
- }
- }
-
- return null;
- }
-
- protected sealed override DbParameter CreateParameterInternal()
- {
- return new SqlParameter();
- }
-
- protected sealed override DbDataReader CreateReader()
- {
- return new SqlDataReader(this);
- }
-
- protected sealed override DbParameterCollection CreateParameterCollection(AbstractDbCommand parent)
- {
- return new SqlParameterCollection((SqlCommand)parent);
- }
-
- protected internal sealed override SystemException CreateException(SQLException e)
- {
- return new SqlException(e, Connection);
- }
-
- #region Asynchronous behavior
-#if NET_2_0
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteReader ()
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteReader (CommandBehavior behavior)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteReader (AsyncCallback callback, Object stateObject)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteReader (AsyncCallback callback, Object stateObject, CommandBehavior behavior)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public SqlDataReader EndExecuteReader (IAsyncResult asyncResult)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteXmlReader ()
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteXmlReader (AsyncCallback callback, Object stateObject)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public XmlReader EndExecuteXmlReader (IAsyncResult asyncResult)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteNonQuery ()
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public IAsyncResult BeginExecuteNonQuery (AsyncCallback callback, Object stateObject)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Asynchronous behavior not implemented")]
- public int EndExecuteNonQuery (IAsyncResult asyncResult)
- {
- throw new NotImplementedException ();
- }
-#endif
- #endregion
- #endregion // Methods
- }
-}
+++ /dev/null
-//
-// System.Data.SqlClient.SqlConnection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Data;
-using System.Data.Common;
-using System.Collections;
-using System.Data.ProviderBase;
-
-using java.sql;
-
-using System.Configuration;
-using Mainsoft.Data.Configuration;
-using Mainsoft.Data.Jdbc.Providers;
-
-namespace System.Data.SqlClient
-{
- public class SqlConnection : AbstractDBConnection
- {
- #region Fields
-
- private const int DEFAULT_PACKET_SIZE = 8192;
-
- #endregion // Fields
-
- #region Constructors
-
- public SqlConnection() : this(null)
- {
- }
-
- public SqlConnection(String connectionString) : base(connectionString)
- {
- }
-
- #endregion // Constructors
-
- #region Events
-
- [DataCategory ("InfoMessage")]
- [DataSysDescription ("Event triggered when messages arrive from the DataSource.")]
- public event SqlInfoMessageEventHandler InfoMessage;
-
- #endregion // Events
-
- #region Properties
-
- public string WorkstationId
- {
- get { return (string)ConnectionStringBuilder["workstation id"]; }
- }
-
- public int PacketSize
- {
- get {
- string packetSize = (string)ConnectionStringBuilder["Packet Size"];
- if (packetSize == null || packetSize.Length == 0) {
- return DEFAULT_PACKET_SIZE;
- }
- try {
- return Convert.ToInt32(packetSize);
- }
- catch(FormatException e) {
- throw ExceptionHelper.InvalidValueForKey("packet size");
- }
- catch (OverflowException e) {
- throw ExceptionHelper.InvalidValueForKey("packet size");
- }
- }
- }
-
- protected override IConnectionProvider GetConnectionProvider() {
- IDictionary conProviderDict = ConnectionStringDictionary.Parse(ConnectionString);
- string provider = (string)conProviderDict["Provider"];
- if (provider == null)
- provider = "SQLCLIENT";
-
- return GetConnectionProvider("Mainsoft.Data.Configuration/SqlClientProviders", provider);
- }
-
- #endregion // Properties
-
- #region Methods
-
- protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) {
- return BeginTransaction(isolationLevel);
- }
-
- public SqlTransaction BeginTransaction(String transactionName)
- {
- return BeginTransaction(IsolationLevel.ReadCommitted,transactionName);
- }
-
- public new SqlTransaction BeginTransaction(IsolationLevel isolationLevel)
- {
- return BeginTransaction(isolationLevel,"Transaction");
- }
-
- public new SqlTransaction BeginTransaction()
- {
- return BeginTransaction(IsolationLevel.ReadCommitted);
- }
-
- public SqlTransaction BeginTransaction(IsolationLevel isolationLevel, string transactionName)
- {
- return new SqlTransaction(isolationLevel, this, transactionName);
- }
-
- public new SqlCommand CreateCommand()
- {
- return new SqlCommand(this);
- }
-
- protected override DbCommand CreateDbCommand() {
- return CreateCommand();
- }
-
- protected internal sealed override void OnSqlWarning(SQLWarning warning)
- {
- SqlErrorCollection col = new SqlErrorCollection(warning, this);
- OnSqlInfoMessage(new SqlInfoMessageEventArgs(col));
- }
-
- protected sealed override SystemException CreateException(SQLException e)
- {
- return new SqlException(e, this);
- }
-
- protected sealed override SystemException CreateException(string message)
- {
- return new SqlException(message, null, this);
- }
-
- private void OnSqlInfoMessage (SqlInfoMessageEventArgs value)
- {
- if (InfoMessage != null) {
- InfoMessage (this, value);
- }
- }
-
-#if NET_2_0
-
- [MonoNotSupported("")]
- public static void ChangePassword (string connectionString, string newPassword)
- {
- throw new NotImplementedException ();
-
- // FIXME: refactored from Mono implementation. Not finished!!!
- if (connectionString == null || newPassword == null || newPassword == String.Empty)
- throw new ArgumentNullException ();
- if (newPassword.Length > 128)
- throw new ArgumentException ("The value of newPassword exceeds its permittable length which is 128");
-
- SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder (connectionString);
- if (builder.IntegratedSecurity) {
- throw new ArgumentException ("Can't use integrated security when changing password");
- }
-
- using (SqlConnection conn = new SqlConnection (connectionString)) {
- conn.Open ();
- SqlCommand cmd = conn.CreateCommand ();
- cmd.CommandText = "sp_password";
- cmd.CommandType = CommandType.StoredProcedure;
- // FIXME: Need to extract old password and user from our structures
- // of the connectionString.
- cmd.Parameters.Add (builder.Password); // Is this good???
- cmd.Parameters.Add (newPassword);
- cmd.Parameters.Add (builder.UserID); // Is this good???
- cmd.ExecuteNonQuery();
- }
- }
-
- #region Pooling
-
- [MonoNotSupported("Pooling not supported")]
- public static void ClearPool (SqlConnection connection)
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Pooling not supported")]
- public static void ClearAllPools ()
- {
- throw new NotImplementedException ();
- }
-
- #endregion
- #region Statistics
-
- [MonoNotSupported ("Statistics not supported")]
- public IDictionary RetrieveStatistics ()
- {
- throw new NotImplementedException ();
- }
-
- [MonoNotSupported ("Statistics not supported")]
- public void ResetStatistics ()
- {
- throw new NotImplementedException ();
- }
-
- #endregion
-#endif
- #endregion // Methods
-
- }
-}
+++ /dev/null
-//\r
-// System.Data.SqlClient.SqlConvert\r
-//\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using System.Data.Common;\r
-using System.Data.ProviderBase;\r
-\r
-using java.sql;\r
-\r
-namespace System.Data.SqlClient\r
-{\r
- internal sealed class SqlConvert : DbConvert\r
- {\r
- #region Methods\r
-\r
- internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)\r
- {\r
- return jdbcTypeName.Trim();\r
- }\r
-\r
- internal static SqlDbType JdbcTypeToSqlDbType(int jdbcType)\r
- {\r
- // FIXME : other java.sql.Type\r
- // Types.ARRAY\r
- if(Types.BIGINT == jdbcType) return SqlDbType.BigInt;\r
- if(Types.BINARY == jdbcType) return SqlDbType.Binary;\r
- if(Types.BIT == jdbcType) return SqlDbType.Bit;\r
- if(Types.BLOB == jdbcType) return SqlDbType.Binary;\r
- // Types.BOOLEAN\r
- if(Types.CHAR == jdbcType) return SqlDbType.Char;\r
- if(Types.CLOB == jdbcType) return SqlDbType.Binary;\r
- if(Types.DATE == jdbcType) return SqlDbType.DateTime;\r
- if(Types.DECIMAL == jdbcType) return SqlDbType.Decimal;\r
- // Types.DISTINCT\r
- if(Types.DOUBLE == jdbcType) return SqlDbType.Float;\r
- if(Types.FLOAT == jdbcType) return SqlDbType.Float;\r
- if(Types.INTEGER == jdbcType) return SqlDbType.Int;\r
- // Types.JAVA_OBJECT\r
- if(Types.LONGVARBINARY == jdbcType) return SqlDbType.Image;\r
- if(Types.LONGVARCHAR == jdbcType) return SqlDbType.Text;\r
- // Types.NULL\r
- if(Types.NUMERIC == jdbcType) return SqlDbType.Decimal;\r
- if(Types.REAL == jdbcType) return SqlDbType.Real;\r
- // Types.REF\r
- if(Types.SMALLINT == jdbcType) return SqlDbType.SmallInt;\r
- // Types.STRUCT\r
- if(Types.TIME == jdbcType) return SqlDbType.DateTime;\r
- if(Types.TIMESTAMP == jdbcType) return SqlDbType.DateTime;\r
- if(Types.TINYINT == jdbcType) return SqlDbType.TinyInt;\r
- if(Types.VARBINARY == jdbcType) return SqlDbType.VarBinary;\r
- if(Types.VARCHAR == jdbcType) return SqlDbType.NVarChar;\r
- return SqlDbType.Variant;\r
- }\r
-\r
- internal static SqlDbType ValueTypeToSqlDbType(Type type)\r
- {\r
- switch (Type.GetTypeCode(type)) {\r
- case TypeCode.Boolean: return SqlDbType.Bit;\r
- case TypeCode.Byte: return SqlDbType.TinyInt;\r
- case TypeCode.Char: return SqlDbType.Char;\r
- case TypeCode.DateTime: return SqlDbType.DateTime;\r
- case TypeCode.DBNull: return SqlDbType.Variant;\r
- case TypeCode.Decimal: return SqlDbType.Decimal;\r
- case TypeCode.Double: return SqlDbType.Float;\r
- case TypeCode.Empty: return SqlDbType.Variant;\r
- case TypeCode.Int16: return SqlDbType.SmallInt;\r
- case TypeCode.Int32: return SqlDbType.Int;\r
- case TypeCode.Int64: return SqlDbType.BigInt;\r
- default:\r
- case TypeCode.Object: {\r
- if (type.Equals(DbTypes.TypeOfByteArray)) return SqlDbType.VarBinary;\r
- //if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;\r
- if (type.Equals(DbTypes.TypeOfGuid)) return SqlDbType.UniqueIdentifier;\r
-\r
- if (type.IsEnum)\r
- return ValueTypeToSqlDbType (Enum.GetUnderlyingType (type));\r
-\r
- return SqlDbType.Variant;\r
- }\r
- case TypeCode.SByte: return SqlDbType.TinyInt;\r
- case TypeCode.Single: return SqlDbType.Float;\r
- case TypeCode.String: return SqlDbType.NVarChar;\r
- case TypeCode.UInt16: return SqlDbType.SmallInt;\r
- case TypeCode.UInt32: return SqlDbType.Int;\r
- case TypeCode.UInt64: return SqlDbType.BigInt;\r
- }\r
- }\r
-\r
- internal static Type SqlDbTypeToValueType(SqlDbType sqlDbType)\r
- {\r
- switch (sqlDbType) {\r
- case SqlDbType.BigInt : return typeof(long);\r
- case SqlDbType.Binary : return typeof(byte[]);\r
- case SqlDbType.Bit : return typeof(bool);\r
- case SqlDbType.Char : return typeof(string);\r
- case SqlDbType.DateTime : return typeof(DateTime);\r
- case SqlDbType.Decimal : return typeof(decimal);\r
- case SqlDbType.Float : return typeof(double);\r
- case SqlDbType.Image : return typeof(byte[]);\r
- case SqlDbType.Int : return typeof(int);\r
- case SqlDbType.Money : return typeof(decimal);\r
- case SqlDbType.NChar : return typeof(string);\r
- case SqlDbType.NText : return typeof(string);\r
- case SqlDbType.NVarChar : return typeof(string);\r
- case SqlDbType.Real : return typeof(Single);\r
- case SqlDbType.UniqueIdentifier : return typeof(Guid);\r
- case SqlDbType.SmallDateTime : return typeof(DateTime);\r
- case SqlDbType.SmallInt : return typeof(Int16);\r
- case SqlDbType.SmallMoney : return typeof(decimal);\r
- case SqlDbType.Text : return typeof(string);\r
- case SqlDbType.Timestamp : return typeof(byte[]);\r
- case SqlDbType.TinyInt : return typeof(byte);\r
- case SqlDbType.VarBinary : return typeof(byte[]);\r
- case SqlDbType.VarChar : return typeof(string);\r
- case SqlDbType.Variant : return typeof(object);\r
- default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
- }\r
- }\r
-\r
- internal static SqlDbType DbTypeToSqlDbType(DbType dbType)\r
- {\r
- switch (dbType) {\r
- case DbType.AnsiString : return SqlDbType.VarChar;\r
- case DbType.Binary : return SqlDbType.VarBinary;\r
- case DbType.Byte : return SqlDbType.TinyInt;\r
- case DbType.Boolean : return SqlDbType.Bit;\r
- case DbType.Currency : return SqlDbType.Money;\r
- case DbType.Date : return SqlDbType.DateTime;\r
- case DbType.DateTime : return SqlDbType.DateTime;\r
- case DbType.Decimal : return SqlDbType.Decimal;\r
- case DbType.Double : return SqlDbType.Float;\r
- case DbType.Guid : return SqlDbType.UniqueIdentifier;\r
- case DbType.Int16 : return SqlDbType.SmallInt;\r
- case DbType.Int32 : return SqlDbType.Int;\r
- case DbType.Int64 : return SqlDbType.BigInt;\r
- case DbType.Object : return SqlDbType.Variant;\r
- case DbType.SByte : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
- case DbType.Single : return SqlDbType.Real;\r
- case DbType.String : return SqlDbType.NVarChar;\r
- case DbType.UInt16 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
- case DbType.UInt32 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
- case DbType.UInt64 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
- case DbType.VarNumeric : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
- case DbType.AnsiStringFixedLength : return SqlDbType.Char;\r
- case DbType.StringFixedLength : return SqlDbType.NChar;\r
- default : throw ExceptionHelper.InvalidDbType((int)dbType);\r
- }\r
- }\r
-\r
- internal static DbType SqlDbTypeToDbType(SqlDbType sqlDbType)\r
- {\r
- switch (sqlDbType) {\r
- case SqlDbType.BigInt : return DbType.Int64;\r
- case SqlDbType.Binary : return DbType.Binary;\r
- case SqlDbType.Bit : return DbType.Boolean;\r
- case SqlDbType.Char : return DbType.AnsiStringFixedLength;\r
- case SqlDbType.DateTime : return DbType.DateTime;\r
- case SqlDbType.Decimal : return DbType.Decimal;\r
- case SqlDbType.Float : return DbType.Double;\r
- case SqlDbType.Image : return DbType.Binary;\r
- case SqlDbType.Int : return DbType.Int32;\r
- case SqlDbType.Money : return DbType.Currency;\r
- case SqlDbType.NChar : return DbType.StringFixedLength;\r
- case SqlDbType.NText : return DbType.String;\r
- case SqlDbType.NVarChar : return DbType.String;\r
- case SqlDbType.Real : return DbType.Single;\r
- case SqlDbType.UniqueIdentifier : return DbType.Guid;\r
- case SqlDbType.SmallDateTime : return DbType.DateTime;\r
- case SqlDbType.SmallInt : return DbType.Int16;\r
- case SqlDbType.SmallMoney : return DbType.Currency;\r
- case SqlDbType.Text : return DbType.AnsiString;\r
- case SqlDbType.Timestamp : return DbType.Binary;\r
- case SqlDbType.TinyInt : return DbType.Byte;\r
- case SqlDbType.VarBinary : return DbType.Binary;\r
- case SqlDbType.VarChar : return DbType.AnsiString;\r
- case SqlDbType.Variant : return DbType.Object;\r
- default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
- }\r
- }\r
-\r
- internal static int SqlDbTypeToJdbcType(SqlDbType sqlDbType)\r
- {\r
- switch(sqlDbType) {\r
- case SqlDbType.BigInt : return Types.BIGINT;\r
- case SqlDbType.Binary : return Types.BINARY;\r
- case SqlDbType.Bit : return Types.BIT;\r
- case SqlDbType.Char : return Types.CHAR;\r
- case SqlDbType.DateTime : return Types.TIMESTAMP;\r
- case SqlDbType.Decimal : return Types.DECIMAL;\r
- case SqlDbType.Float : return Types.FLOAT;\r
- case SqlDbType.Image : return Types.LONGVARBINARY;\r
- case SqlDbType.Int : return Types.INTEGER;\r
- case SqlDbType.Money : return Types.DECIMAL;\r
- case SqlDbType.NChar : return Types.CHAR;\r
- case SqlDbType.NText : return Types.LONGVARCHAR;\r
- case SqlDbType.NVarChar : return Types.VARCHAR;\r
- case SqlDbType.Real : return Types.REAL;\r
- case SqlDbType.UniqueIdentifier : return Types.CHAR;\r
- case SqlDbType.SmallDateTime : return Types.DATE;\r
- case SqlDbType.SmallInt : return Types.SMALLINT;\r
- case SqlDbType.SmallMoney : return Types.DECIMAL;\r
- case SqlDbType.Text : return Types.LONGVARCHAR;\r
- case SqlDbType.Timestamp : return Types.TIMESTAMP;\r
- case SqlDbType.TinyInt : return Types.TINYINT;\r
- case SqlDbType.VarBinary : return Types.VARBINARY;\r
- case SqlDbType.VarChar : return Types.VARCHAR;\r
- case SqlDbType.Variant : return Types.VARCHAR; // note : ms jdbc driver recognize this sqlserver as varchar\r
- default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
- }\r
- }\r
-\r
- #endregion // Methods\r
- }\r
-}\r
+++ /dev/null
-//
-// System.Data.SqlClient.SqlDataReader
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Data.SqlTypes;
-using System.Data.ProviderBase;
-
-using java.sql;
-
-namespace System.Data.SqlClient
-{
- public class SqlDataReader : AbstractDataReader
- {
-
- #region Constructors
-
- internal SqlDataReader(SqlCommand command) : base(command)
- {
- }
-
- #endregion // Constructors
-
- #region Properties
-
- #endregion // Properties
-
- #region Methods
-
- protected sealed override SystemException CreateException(string message, SQLException e)
- {
- return new SqlException(message, e, (SqlConnection)_command.Connection);
- }
-
- protected sealed override SystemException CreateException(java.io.IOException e)
- {
- return new SqlException(e, (SqlConnection)_command.Connection);
- }
-
- public override String GetDataTypeName(int columnIndex)
- {
- try {
- string jdbcTypeName = Results.getMetaData().getColumnTypeName(columnIndex + 1);
-
- return SqlConvert.JdbcTypeNameToDbTypeName(jdbcTypeName);
- }
- catch (SQLException e) {
- throw CreateException(e);
- }
- }
-
- protected override int GetProviderType(int jdbcType)
- {
- return (int)SqlConvert.JdbcTypeToSqlDbType(jdbcType);
- }
-
- // Gets the value of the specified column as a SqlBinary.
- public SqlBinary GetSqlBinary(int columnIndex)
- {
- byte[] bytes = GetBytes(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlBinary.Null;
- }
- else {
- return new SqlBinary(bytes);
- }
- }
-
- // Gets the value of the specified column as a SqlBoolean.
- public SqlBoolean GetSqlBoolean(int columnIndex)
- {
- bool boolean = GetBoolean(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlBoolean.Null;
- }
- else {
- return new SqlBoolean(boolean);
- }
- }
-
- // Gets the value of the specified column as a SqlByte.
- public SqlByte GetSqlByte(int columnIndex)
- {
- byte byt = GetByte(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlByte.Null;
- }
- else {
- return new SqlByte(byt);
- }
- }
-
-#if NET_2_0
-
- public virtual SqlBytes GetSqlBytes (int columnIndex)
- {
- byte [] bytes = GetBytes (columnIndex);
- if (IsDBNull (columnIndex)) {
- return SqlBytes.Null;
- }
- else {
- return new SqlBytes (bytes);
- }
- }
-
- public virtual SqlChars GetSqlChars (int columnIndex)
- {
- SqlString sqlStr = GetSqlString (columnIndex);
- if (sqlStr.IsNull) {
- return SqlChars.Null;
- }
- else {
- return new SqlChars (sqlStr);
- }
- }
-
- [MonoNotSupported("SqlXml is not fully implemented")]
- public virtual SqlXml GetSqlXml (int columnIndex)
- {
- throw new NotImplementedException ();
- }
-
-#endif
-
- // Gets the value of the specified column as a SqlDecimal.
- public SqlDecimal GetSqlDecimal(int columnIndex)
- {
- decimal dec = GetDecimal(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlDecimal.Null;
- }
- else {
- return new SqlDecimal(dec);
- }
- }
-
- // Gets the value of the specified column as a SqlDateTime.
- public SqlDateTime GetSqlDateTime(int columnIndex)
- {
- DateTime dateTime = GetDateTime(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlDateTime.Null;
- }
- else {
- return new SqlDateTime(dateTime);
- }
- }
-
- // Gets the value of the specified column as a SqlDouble.
- public SqlDouble GetSqlDouble(int columnIndex)
- {
- double doubl = GetDouble(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlDouble.Null;
- }
- else {
- return new SqlDouble(doubl);
- }
- }
-
- // Gets the value of the specified column as a SqlInt16.
- public SqlInt16 GetSqlInt16(int columnIndex)
- {
- short s = GetInt16(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlInt16.Null;
- }
- else {
- return new SqlInt16(s);
- }
- }
-
- // Gets the value of the specified column as a SqlInt32.
- public SqlInt32 GetSqlInt32(int columnIndex)
- {
- int i = GetInt32(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlInt32.Null;
- }
- else {
- return new SqlInt32(i);
- }
- }
-
- // Gets the value of the specified column as a SqlInt64.
- public SqlInt64 GetSqlInt64(int columnIndex)
- {
- long l = GetInt64(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlInt64.Null;
- }
- else {
- return new SqlInt64(l);
- }
- }
-
- // Gets the value of the specified column as a SqlMoney.
- public SqlMoney GetSqlMoney(int columnIndex)
- {
- decimal dec = GetDecimal(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlMoney.Null;
- }
- else {
- return new SqlMoney(dec);
- }
- }
-
- // Gets the value of the specified column as a SqlSingle.
- public SqlSingle GetSqlSingle(int columnIndex)
- {
- float f = GetFloat(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlSingle.Null;
- }
- else {
- return new SqlSingle(f);
- }
- }
-
- // Gets the value of the specified column as a SqlString.
- public SqlString GetSqlString(int columnIndex)
- {
- string str = GetString(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlString.Null;
- }
- else {
- return new SqlString(str);
- }
- }
-
- // Gets the value of the specified column as a SqlGuid.
- public SqlGuid GetSqlGuid(int columnIndex)
- {
- object obj = GetValue(columnIndex);
- if(IsDBNull(columnIndex)) {
- return SqlGuid.Null;
- }
- else {
- if (obj is byte[]) {
- return new SqlGuid((byte[])obj);
- }
- else {
- return new SqlGuid((string)obj);
- }
- }
- }
-
- // Gets all the attribute columns in the current row.
- public int GetSqlValues(Object[] values)
- {
- int columnCount = FieldCount;
- int i = 0;
- for (; i < values.Length && i < columnCount; i++) {
- values[i] = GetSqlValue(i);
- }
- return i;
- }
-
- // Gets an Object that is a representation of the underlying SqlDbType Variant.
- public Object GetSqlValue(int columnIndex)
- {
- try {
- int jdbcType = ResultsMetaData.getColumnType(columnIndex + 1);
- SqlDbType sqlDbType = SqlConvert.JdbcTypeToSqlDbType(jdbcType);
-
- switch (sqlDbType) {
- case SqlDbType.BigInt : return GetSqlInt64(columnIndex);
- case SqlDbType.Binary : return GetSqlBinary(columnIndex);
- case SqlDbType.Bit : return GetSqlBoolean(columnIndex);
- case SqlDbType.Char : return GetSqlString(columnIndex);
- case SqlDbType.DateTime : return GetSqlDateTime(columnIndex);
- case SqlDbType.Decimal : return GetSqlDecimal(columnIndex);
- case SqlDbType.Float : return GetSqlDouble(columnIndex);
- case SqlDbType.Image : return GetSqlBinary(columnIndex);
- case SqlDbType.Int : return GetSqlInt32(columnIndex);
- case SqlDbType.Money : return GetSqlDecimal(columnIndex);
- case SqlDbType.NChar : return GetSqlString(columnIndex);
- case SqlDbType.NText : return GetSqlString(columnIndex);
- case SqlDbType.NVarChar : return GetSqlString(columnIndex);
- case SqlDbType.Real : return GetSqlSingle(columnIndex);
- case SqlDbType.UniqueIdentifier : return GetSqlGuid(columnIndex);
- case SqlDbType.SmallDateTime : return GetSqlDateTime(columnIndex);
- case SqlDbType.SmallInt : return GetSqlInt16(columnIndex);
- case SqlDbType.SmallMoney : return GetSqlDecimal(columnIndex);
- case SqlDbType.Text : return GetSqlString(columnIndex);
- case SqlDbType.Timestamp : return GetSqlDateTime(columnIndex);
- case SqlDbType.TinyInt : return GetSqlByte(columnIndex);
- case SqlDbType.VarBinary : return GetSqlBinary(columnIndex);
- case SqlDbType.VarChar : return GetSqlString(columnIndex);
- case SqlDbType.Variant : return GetValue(columnIndex);
- default : return GetValue(columnIndex);
- }
- }
- catch (SQLException exp) {
- throw new Exception(exp.Message);
- }
- }
-
-#if NET_2_0
- protected bool IsCommandBehavior (CommandBehavior condition)
- {
- return (_command.Behavior & condition) == condition;
- }
-#endif
- #endregion // Methods
- }
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.SqlClient.SqlError
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace System.Data.SqlClient
-{
- using System.Data.ProviderBase;
- using java.sql;
- using System.Data.Common;
-
- /**
- * Collects information relevant to a warning or error returned by SQL Server.
- */
-
- [Serializable]
- public class SqlError : AbstractDbError
- {
- string _serverVersion;
- /**
- * Initialize SqlError object
- * */
- internal SqlError(SQLException e, AbstractDBConnection connection) : base(e, connection)
- {
- if (connection != null)
- _serverVersion = connection.ServerVersion;
- }
-
- /**
- * Overridden. Gets the complete text of the error message.
- *
- * @return A string representation of the current object.
- */
- public override String ToString()
- {
- return String.Concat("SqlError:", Message, _e.StackTrace);
- }
-
- /**
- * Gets the name of the provider that generated the error.
- *
- * @return The name of the provider
- */
- public String Source
- {
- get
- {
- return DbSource;
- }
- }
-
- /**
- * Gets a number that identifies the type of error.
- *
- * @return Number of the error
- */
- public int Number
- {
- get
- {
- return DbErrorCode;
- }
- }
-
- /**
- * Gets a numeric error code from SQL Server that represents an error,
- * warning or "no data found" message. For more information on how to
- * decode these values, see SQL Server Books Online.
- *
- * @return Error Code
- */
- public byte State
- {
- get
- {
- return 0; // & BitConstants.ALL_BYTE;
- }
- }
-
- /**
- * Gets the severity level of the error returned from SQL Server.
- *
- * @return Severity level of the error
- */
- public byte Class
- {
- get
- {
- return 0; // & BitConstants.ALL_BYTE;
- }
- }
-
- /**
- * Gets the name of the instance of SQL Server that generated the error.
- *
- * @return The name of the server
- */
- public String Server
- {
- get
- {
- return _serverVersion;
- }
- }
-
- /**
- * Gets the text describing the error.
- *
- * @return The text describing the error
- */
- public String Message
- {
- get
- {
- return DbMessage;
- }
- }
-
- /**
- * Gets the name of the stored procedure or remote procedure call (RPC)
- * that generated the error.
- *
- * @return The name of stored procedure that generated the error.
- */
- public String Procedure
- {
- get
- {
- return null;
- }
- }
-
- /**
- * Bets the line number within the Transact-SQL command batch or stored
- * procedure that contains the error.
- *
- * @return Line number of error in stored procedure
- */
- public int LineNumber
- {
- get
- {
- return 0;
- }
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.SqlClient.SqlErrorCollection
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace System.Data.SqlClient
-{
-
- /**
- * Collects all errors generated by the SQL .NET Data Provider.
- */
-
- using System.Collections;
- using System.Data.Common;
- using System.Data.ProviderBase;
- using java.sql;
-
-
- [Serializable]
- public class SqlErrorCollection : AbstractDbErrorCollection
- {
- internal SqlErrorCollection(SQLException e, AbstractDBConnection connection) : base(e, connection) {}
- /**
- * Gets the error at the specified index.
- *
- * @param index of the error
- * @return Error on specified index
- */
- public SqlError this[int index]
- {
- get
- {
- return (SqlError)GetDbItem(index);
- }
- }
-
-#if NET_2_0
- public void CopyTo (SqlError [] array, int index)
- {
- base.CopyTo (array, index);
- }
-
-#endif
-
- protected override AbstractDbError CreateDbError(java.sql.SQLException e, AbstractDBConnection connection) {
- return new SqlError(e, connection);
- }
-
-
- }
-}
\ No newline at end of file
+++ /dev/null
-//\r
-// System.Data.SqlClient.SqlException\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-namespace System.Data.SqlClient\r
-{\r
-\r
- using java.sql;\r
-\r
- using System;\r
- using System.Data.ProviderBase;\r
-\r
- /**\r
- * The exception that is thrown when SQL Server returns a warning or error.\r
- * This class cannot be inherited.\r
- */\r
-\r
- /*\r
- * CURRENT LIMITATIONS\r
- * 1. Constructor for serialization SqlException(SerializationInfo info, StreamingContext sc) \r
- * is not supported.\r
- * 2. Method "void GetObjectData(...,...)" is not supported (serialization)\r
- */\r
-\r
- public sealed class SqlException : AbstractDbException\r
- {\r
- internal SqlException(Exception cause, SqlConnection connection) : base(cause, connection) {}\r
-\r
- internal SqlException(SQLException cause, SqlConnection connection) : base(cause, connection) {}\r
-\r
- internal SqlException(string message, SQLException cause, SqlConnection connection) : base(message, cause, connection) {}\r
-\r
- protected override AbstractDbErrorCollection DbErrors {\r
- get {\r
- return Errors;\r
- }\r
- }\r
-\r
- \r
-\r
- /**\r
- * Gets the severity level of the error returned from the SQL Server .NET \r
- * Data Provider.\r
- * @return severity level of the first error in the collection.\r
- */\r
- public byte Class\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].Class : (byte)0;\r
- }\r
- }\r
-\r
- /**\r
- * Gets a collection of one or more SqlError objects that give detailed \r
- * information about exceptions generated by the SQL Server .NET Data Provider.\r
- * @return collection of SqlError objects\r
- */\r
- public SqlErrorCollection Errors\r
- {\r
- get\r
- {\r
- return new SqlErrorCollection(_cause, _connection);\r
- }\r
- }\r
-\r
- /**\r
- * Gets the line number within the Transact-SQL command batch or stored \r
- * procedure that generated the error.\r
- * @return line number of the first error in the collection.\r
- */\r
- public int LineNumber\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].LineNumber : 0;\r
- }\r
- }\r
-\r
- /**\r
- * Gets a number that identifies the type of error.\r
- * @return number that identifies the type of first error in the collection\r
- */\r
- public int Number\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].Number : 0;\r
- }\r
- }\r
-\r
- /**\r
- * Gets the name of the stored procedure or remote procedure call (RPC) \r
- * that generated the error.\r
- * @return name of the stored procedure \r
- */\r
- public String Procedure\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].Procedure : null;\r
- }\r
- }\r
-\r
- /**\r
- * Gets the name of the computer running an instance of SQL Server \r
- * that generated the error.\r
- * @return name of the computer where error generated\r
- */\r
- public String Server\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].Server : null;\r
- }\r
- }\r
-\r
-\r
- /**\r
- * Gets a numeric error code from SQL Server that represents an error, \r
- * warning or "no data found" message. \r
- * @return numeric error code from SQL Server\r
- */\r
- public byte State\r
- {\r
- get\r
- {\r
- SqlErrorCollection errors = Errors;\r
- return errors.Count > 0 ? errors[0].State : (byte)0;\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//
-// System.Data.SqlClient.SqlParameter
-//
-// Authors:
-// Konstantin Triger <kostat@mainsoft.com>
-// Boris Kirzner <borisk@mainsoft.com>
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.Data;
-using System.Data.ProviderBase;
-using System.Data.Common;
-
-using java.sql;
-
-namespace System.Data.SqlClient
-{
- public sealed class SqlParameter : AbstractDbParameter
- {
- #region Fields
-
- private SqlDbType _sqlDbType;
-
- #endregion // Fields
-
- #region Constructors
-
- public SqlParameter()
- {
- }
-
- public SqlParameter(String parameterName, Object value)
- : this(parameterName, SqlDbType.NVarChar, 0, ParameterDirection.Input, false, 0, 0, String.Empty, DataRowVersion.Current, value,false)
- {
- }
-
- public SqlParameter(String parameterName, SqlDbType dbType)
- : this(parameterName, dbType, 0, ParameterDirection.Input, false, 0, 0, String.Empty, DataRowVersion.Current, null, true)
- {
- }
-
-
- public SqlParameter(String parameterName, SqlDbType dbType, int size)
- : this(parameterName, dbType, size, ParameterDirection.Input, false, 0, 0, String.Empty, DataRowVersion.Current, null, true)
- {
- }
-
-
- public SqlParameter(String parameterName, SqlDbType dbType, int size, String sourceColumn)
- : this(parameterName, dbType, size, ParameterDirection.Input, false, 0, 0, sourceColumn, DataRowVersion.Current, null, true)
- {
- }
-
-
- public SqlParameter(
- String parameterName,
- SqlDbType dbType,
- int size,
- ParameterDirection direction,
- bool isNullable,
- byte precision,
- byte scale,
- String sourceColumn,
- DataRowVersion sourceVersion,
- Object value) : this(parameterName,dbType,size,direction,isNullable,precision,scale,sourceColumn,sourceVersion,value,true)
- {
- }
-
-#if NET_2_0
- public SqlParameter (
- string parameterName,
- SqlDbType dbType,
- int size,
- ParameterDirection direction,
- byte precision,
- byte scale,
- string sourceColumn,
- DataRowVersion sourceVersion,
- bool sourceColumnNullMapping,
- Object value,
- string xmlSchemaCollectionDatabase,
- string xmlSchemaCollectionOwningSchema,
- string xmlSchemaCollectionName
- ) : this (parameterName, dbType, size, direction, sourceColumnNullMapping, precision, scale, sourceColumn, sourceVersion, value, true)
- {
- }
-#endif
-
- SqlParameter(
- String parameterName,
- SqlDbType dbType,
- int size,
- ParameterDirection direction,
- bool isNullable,
- byte precision,
- byte scale,
- String sourceColumn,
- DataRowVersion sourceVersion,
- Object value,
- bool dbTypeExplicit)
- {
- ParameterName = parameterName;
- SqlDbType = dbType;
- Size = size;
- Direction = direction;
- IsNullable = isNullable;
- Precision = precision;
- Scale = scale;
- SourceColumn = sourceColumn;
- SourceVersion = sourceVersion;
- if (!dbTypeExplicit) {
- IsDbTypeSet = false;
- }
- Value = value;
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public override DbType DbType
- {
- get { return SqlConvert.SqlDbTypeToDbType(_sqlDbType); }
- set { SqlDbType = SqlConvert.DbTypeToSqlDbType(value); }
- }
-
- public SqlDbType SqlDbType
- {
- get { return _sqlDbType; }
- set {
- _sqlDbType = value;
- IsDbTypeSet = true;
- }
- }
-
- public override int Size
- {
- get {
- int retVal = base.Size;
- return retVal;
- }
- set {
- if (value < 0) {
- throw ExceptionHelper.InvalidSizeValue(value);
- }
-
- if (value != 0) {
- base.Size = value;
- }
- else {
- base.Size = -1;
- }
- }
- }
-
-#if NET_2_0
- public new byte Precision
- {
- get { return base.Precision; }
- set { base.Precision = value; }
- }
-
- public new byte Scale
- {
- get { return base.Scale; }
- set { base.Scale = value; }
- }
-#endif
-
- protected internal override string Placeholder {
- get {
- if (ParameterName.Length == 0 || ParameterName[0] == '@')
- return ParameterName;
-
- return String.Concat("@", ParameterName);
- }
- }
-
-
- public override Object Value
- {
- get { return base.Value; }
- set {
- if (!IsDbTypeSet && (value != null) && (value != DBNull.Value)) {
- _sqlDbType = SqlConvert.ValueTypeToSqlDbType(value.GetType());
- }
- base.Value = value;
- }
- }
-
- #endregion // Properties
-
- #region Methods
-
- protected internal sealed override object ConvertValue(object value)
- {
- // can not convert null or DbNull to other types
- if (value == null || value == DBNull.Value) {
- return value;
- }
- // .NET throws an exception to the user.
- object convertedValue = value is IConvertible ? Convert.ChangeType(value,SqlConvert.SqlDbTypeToValueType(SqlDbType)) : value;
- return convertedValue;
- }
-
- protected internal sealed override void SetParameterName(ResultSet res)
- {
- string name = res.getString("COLUMN_NAME");
- if (name != null && name.Length > 0 && name[0] != '@')
- name = String.Concat("@", name);
- ParameterName = name;
- }
-
- protected internal sealed override void SetParameterDbType(ResultSet res)
- {
- int dataType = res.getInt("DATA_TYPE");
- SqlDbType = SqlConvert.JdbcTypeToSqlDbType(dataType);
- JdbcType = dataType;
- }
-
-#if NET_2_0
- public void ResetSqlDbType ()
- {
- IsDbTypeSet = false;
- }
-
- public override void ResetDbType ()
- {
- ResetSqlDbType ();
- }
-#endif
-
- protected internal sealed override void SetSpecialFeatures (ResultSet res)
- {
- // do nothing
- }
-
- protected internal sealed override int JdbcTypeFromProviderType()
- {
- return SqlConvert.SqlDbTypeToJdbcType(SqlDbType);
- }
-
- #endregion // Methods
-
- }
-}
+++ /dev/null
-// System.Data.SqlTypes.SqlDecimal\r
-//\r
-// Authors:\r
-// Konstantin Triger <kostat@mainsoft.com>\r
-// Boris Kirzner <borisk@mainsoft.com>\r
-// \r
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-namespace System.Data.SqlTypes\r
-{\r
-\r
- /**\r
- * <p>Title: </p>\r
- * <p>Description: </p>\r
- * <p>Copyright: Copyright (c) 2002</p>\r
- * <p>Company: MainSoft</p>\r
- * @author Pavel Sandler\r
- * @version 1.0\r
- */\r
-\r
- using System;\r
-\r
- using java.math;\r
-\r
- /*\r
- * CURRENT LIMITATIONS:\r
- * 1. public byte[] Data not implemented.\r
- * 2. public byte[] BinData not implemented.\r
- * 3. Precision value is ignored.\r
- * 4. public SqlDecimal AdjustScale(SqlDecimal n, int position) not implemented.\r
- * 5. public SqlDecimal ConvertToPrecScale(SqlDecimal n, int precision, int scale) not implemented.\r
- */\r
-\r
-\r
- public struct SqlDecimal : INullable\r
- {\r
-\r
- private Decimal _value;\r
- private bool _isNull;\r
-\r
- public static readonly SqlDecimal MaxValue = new SqlDecimal(Decimal.MaxValue);\r
- public static readonly SqlDecimal MinValue = new SqlDecimal(Decimal.MinValue);\r
- public static readonly int MaxPrecision = 38;\r
- public static readonly int MaxScale = MaxPrecision;\r
- public static readonly SqlDecimal Null = new SqlDecimal(true);\r
-\r
- private int _precision;\r
- private int _scale;\r
- \r
-\r
- private SqlDecimal(bool isNull)\r
- {\r
- _value = Decimal.Zero;\r
- _isNull = isNull;\r
- _precision = 38;\r
- _scale = 0;\r
- }\r
- /**\r
- * Initializes a new instance of the SqlDecimal instance using the supplied Decimal value.\r
- * @param value The Decimal value to be stored as a SqlDecimal instance.\r
- */\r
- public SqlDecimal(Decimal value) \r
- {\r
- _value = value;\r
- _isNull = false;\r
- int[] bits = Decimal.GetBits(value);\r
- int i = bits[3] & 0xff0000;\r
- _scale = i >> 16;\r
- _precision = 38;\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the SqlDecimal instance using the supplied double value.\r
- * @param value The double value to be stored as a SqlDecimal instance.\r
- */\r
- public SqlDecimal(double value) \r
- { \r
- _value = new Decimal(value);\r
- _isNull = false; \r
- int[] bits = Decimal.GetBits(_value);\r
- int i = bits[3] & 0xff0000;\r
- _scale = i >> 16;\r
- _precision = 38;\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the SqlDecimal instance using the supplied int value.\r
- * @param value The int value to be stored as a SqlDecimal instance.\r
- */\r
- public SqlDecimal(int value) \r
- {\r
- _value = new Decimal(value);\r
- _isNull = false;\r
- int[] bits = Decimal.GetBits(_value);\r
- int i = bits[3] & 0xff0000;\r
- _scale = i >> 16;\r
- _precision = 38;\r
- }\r
-\r
- /**\r
- * Initializes a new instance of the SqlDecimal instance using the supplied long value.\r
- * @param value The long value to be stored as a SqlDecimal instance.\r
- */\r
- public SqlDecimal(long value) \r
- {\r
- _value = new Decimal(value);\r
- _isNull = false;\r
- int[] bits = Decimal.GetBits(_value);\r
- int i = bits[3] & 0xff0000;\r
- _scale = i >> 16;\r
- _precision = 38;\r
- }\r
-\r
- \r
- /**\r
- * Indicates whether or not Value is null.\r
- * @return true if Value is null, otherwise false.\r
- */\r
- public bool IsNull\r
- {\r
- get\r
- {\r
- return _isNull;\r
- }\r
- }\r
-\r
- /**\r
- * Gets the value of the SqlDecimal instance.\r
- * @return the value of this instance\r
- */\r
- public Decimal Value\r
- {\r
- get\r
- {\r
- if(IsNull)\r
- throw new SqlNullValueException();\r
- return _value;\r
- }\r
- }\r
-\r
- public byte[] BinData\r
- {\r
- get\r
- {\r
- /** @todo implement this method */\r
- throw new NotImplementedException();\r
- }\r
- }\r
-\r
- public byte[] Data\r
- {\r
- get\r
- {\r
- /** @todo implement this method */\r
- throw new NotImplementedException();\r
- }\r
- }\r
-\r
- /**\r
- * Indicates whether or not the Value of this SqlDecimal instance is greater than zero.\r
- * @return true if the Value is assigned to null, otherwise false.\r
- */\r
- public bool IsPositive\r
- {\r
- get\r
- {\r
- if (!IsNull)\r
- {\r
- if (_value >= 0)\r
- return true;\r
-\r
- return false;\r
- }\r
- \r
- throw new SqlNullValueException("The value of this instance is null");\r
- }\r
- }\r
-\r
- /**\r
- * Gets the maximum number of digits used to represent the Value property.\r
- * @return The maximum number of digits used to represent the Value of this SqlDecimal instance.\r
- */\r
- public int Precision\r
- {\r
- get\r
- {\r
- return _precision;\r
- }\r
- }\r
-\r
- /**\r
- * Gets the number of decimal places to which Value is resolved.\r
- * @return The number of decimal places to which the Value property is resolved.\r
- */\r
- public int Scale\r
- {\r
- get\r
- {\r
- return _precision;\r
- }\r
- }\r
-\r
- /**\r
- * The Abs member function gets the absolute value of the SqlDecimal parameter.\r
- * @param n A SqlDecimal instance.\r
- * @return A SqlDecimal instance whose Value property contains the unsigned number representing the absolute value of the SqlDecimal parameter.\r
- */\r
- public static SqlDecimal Abs(SqlDecimal n)\r
- {\r
- if (n.IsNull)\r
- return new SqlDecimal();\r
-\r
- Decimal val;\r
-\r
- if (n.IsPositive)\r
- val = n.Value;\r
- else\r
- val = Decimal.Negate(n._value);\r
-\r
- return new SqlDecimal(val);\r
-\r
- }\r
-\r
- /**\r
- * Calcuates the sum of the two SqlDecimal operators.\r
- * @param x A SqlDecimal instance.\r
- * @param y A SqlDecimal instance.\r
- * @return A new SqlDecimal instance whose Value property contains the sum.\r
- * If one of the parameters or their value is null return SqlDecimal.Null.\r
- */\r
- public static SqlDecimal Add(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- Decimal res = Decimal.Add(x._value, y._value);\r
-\r
- return new SqlDecimal(res);\r
- }\r
-\r
- public static SqlDecimal AdjustScale(SqlDecimal n, int digits, bool fround)\r
- {\r
- /** @todo find out what the logic */\r
- throw new NotImplementedException();\r
- }\r
-\r
- /**\r
- * Returns the smallest whole number greater than or equal to the specified SqlDecimal instance.\r
- * @param n The SqlDecimal instance for which the ceiling value is to be calculated.\r
- * @return A SqlDecimal representing the smallest whole number greater than or equal to the specified SqlDecimal instance.\r
- */\r
- public static SqlDecimal Ceiling(SqlDecimal n)\r
- {\r
- if (n.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- double d = Math.Ceiling((double)n._value);\r
- return new SqlDecimal(d);\r
- }\r
-\r
- /**\r
- * Compares this instance to the supplied object and returns an indication of their relative values.\r
- * @param obj The object to compare.\r
- * @return A signed number indicating the relative values of the instance and the object.\r
- * Less than zero This instance is less than object.\r
- * Zero This instance is the same as object.\r
- * Greater than zero This instance is greater than object -or-\r
- * object is a null reference.\r
- */\r
- public int CompareTo(Object obj)\r
- {\r
- if (obj == null)\r
- return 1;\r
-\r
- if (obj is SqlDecimal)\r
- {\r
- SqlDecimal value = (SqlDecimal)obj;\r
- \r
- if (IsNull)\r
- return -1;\r
-\r
- if (value.IsNull)\r
- return 1;\r
-\r
- if (_value == value._value)\r
- return 0;\r
-\r
- return Decimal.Compare(_value, value._value);\r
- }\r
-\r
- throw new ArgumentException("parameter obj is not SqlDecimal : " + obj.GetType().Name);\r
-\r
-\r
- }\r
-\r
-\r
- public SqlDecimal ConvertToPrecScale(SqlDecimal n, int precision, int scale)\r
- {\r
- /** @todo find out what the logic */\r
- throw new NotImplementedException();\r
- }\r
-\r
- /**\r
- * The division operator divides the first SqlDecimal operand by the second.\r
- * @param x A SqlDecimal instance.\r
- * @param y A SqlDecimal instance.\r
- * @return A SqlDecimal instance containing the results of the division operation.\r
- * If one of the parameters is null or null value - return SqlDouble.Null.\r
- */\r
- public static SqlDecimal Divide(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- Decimal res = Decimal.Divide(x._value, y._value);\r
-\r
- return new SqlDecimal(res);\r
- }\r
-\r
- public override bool Equals(Object obj)\r
- {\r
- if (obj == null)\r
- return false;\r
-\r
- if (obj is SqlDecimal)\r
- {\r
- SqlDecimal dec = (SqlDecimal)obj;\r
-\r
- return Decimal.Equals(_value, dec._value);\r
- }\r
-\r
- return false;\r
- }\r
-\r
- \r
- /**\r
- * Performs a logical comparison on two instances of SqlDecimal to determine if they are equal.\r
- * @param x A SqlDecimal instance.\r
- * @param y A SqlDecimal instance.\r
- * @return true if the two values are equal, otherwise false.\r
- * If one of the parameters is null or null value return SqlBoolean.Null.\r
- */\r
- public static SqlBoolean Equals(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlBoolean.Null;\r
-\r
- if (x.Equals(y))\r
- return SqlBoolean.True;\r
-\r
- return SqlBoolean.False;\r
- }\r
-\r
- /**\r
- * Rounds a specified SqlDecimal number to the next lower whole number.\r
- * @param n The SqlDecimal instance for which the floor value is to be calculated.\r
- * @return A SqlDecimal instance containing the whole number portion of this SqlDecimal instance.\r
- */\r
- public static SqlDecimal Floor(SqlDecimal n)\r
- {\r
- Decimal res = Decimal.Floor(n._value);\r
-\r
- return new SqlDecimal(res);\r
- }\r
-\r
- /**\r
- * Compares two instances of SqlDecimal to determine if the first is greater than the second.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return A SqlBoolean that is True if the first instance is greater than the second instance, otherwise False.\r
- * If either instance of SqlDouble is null, the Value of the SqlBoolean will be Null.\r
- */\r
- public static SqlBoolean GreaterThan(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlBoolean.Null;\r
-\r
- if (x.CompareTo(y) > 0)\r
- return SqlBoolean.True;\r
-\r
- return SqlBoolean.False;\r
- }\r
-\r
- /**\r
- * Compares two instances of SqlDecimal to determine if the first is greater than or equal to the second.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return A SqlBoolean that is True if the first instance is greaater than or equal to the second instance, otherwise False.\r
- * If either instance of SqlDouble is null, the Value of the SqlBoolean will be Null.\r
- */\r
- public static SqlBoolean GreaterThanOrEqual(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlBoolean.Null;\r
-\r
- if (x.CompareTo(y) >= 0)\r
- return SqlBoolean.True;\r
-\r
- return SqlBoolean.False;\r
- }\r
-\r
- /**\r
- * Compares two instances of SqlDecimal to determine if the first is less than the second.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return A SqlBoolean that is True if the first instance is less than the second instance, otherwise False.\r
- * If either instance of SqlDouble is null, the Value of the SqlBoolean will be Null.\r
- */\r
- public static SqlBoolean LessThan(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlBoolean.Null;\r
-\r
- if (x.CompareTo(y) < 0)\r
- return SqlBoolean.True;\r
-\r
- return SqlBoolean.False;\r
- }\r
-\r
- /**\r
- * Compares two instances of SqlDecimal to determine if the first is less than the second.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return A SqlBoolean that is True if the first instance is less than the second instance, otherwise False.\r
- * If either instance of SqlDouble is null, the Value of the SqlBoolean will be Null.\r
- */\r
- public static SqlBoolean LessThanOrEqual(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlBoolean.Null;\r
-\r
- if (x.CompareTo(y) <= 0)\r
- return SqlBoolean.True;\r
-\r
- return SqlBoolean.False;\r
- }\r
-\r
- /**\r
- * The multiplication operator computes the product of the two SqlDecimal operands.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return The product of the two SqlDecimal operands.\r
- */\r
- public static SqlDecimal Multiply(SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- Decimal res = Decimal.Multiply(x._value, y._value);\r
-\r
- return new SqlDecimal(res);\r
- }\r
-\r
- /**\r
- * Compares two instances of SqlDecimal to determine if they are equal.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return A SqlBoolean that is True if the two instances are not equal or False if the two instances are equal.\r
- * If either instance of SqlDouble is null, the Value of the SqlBoolean will be Null.\r
- */\r
- public static SqlBoolean NotEquals(SqlDecimal x, SqlDecimal y)\r
- {\r
- SqlBoolean eVal = Equals(x, y);\r
-\r
- if (eVal.IsNull)\r
- return eVal;\r
- if (eVal.IsTrue)\r
- return SqlBoolean.False;\r
-\r
- return SqlBoolean.True;\r
- }\r
-\r
- /**\r
- * Converts the String representation of a number to its Decimal number equivalent.\r
- * @param s The String to be parsed.\r
- * @return A SqlDecimal containing the value represented by the String.\r
- */\r
- public static SqlDecimal Parse(String s)\r
- {\r
- Decimal val = Decimal.Parse(s);\r
- SqlDecimal retVal = new SqlDecimal(val);\r
-\r
- if (GreaterThan(retVal, MaxValue).IsTrue || LessThan(retVal, MinValue).IsTrue)\r
- throw new OverflowException("The parse of this string is overflowing : " + val);\r
-\r
- return retVal;\r
-\r
- }\r
-\r
- /**\r
- * Raises the value of the specified SqlDecimal instance to the specified exponential power.\r
- * @param n The SqlDecimal instance to be raised to a power.\r
- * @param exponent A double value indicating the power to which the number should be raised.\r
- * @return A SqlDecimal instance containing the results.\r
- */\r
- public static SqlDecimal Power(SqlDecimal n, double exponent)\r
- {\r
- /** @todo decide if we treat the Decimal as a double and use Math.pow() */\r
- \r
- double d = (double)n._value;\r
-\r
- d = java.lang.Math.pow(d, exponent);\r
-\r
- return new SqlDecimal(d);\r
- }\r
-\r
- /**\r
- * Gets the number nearest the specified SqlDecimal instance's value with the specified precision.\r
- * @param n The SqlDecimal instance to be rounded.\r
- * @param position The number of significant fractional digits (precision) in the return value.\r
- * @return A SqlDecimal instance containing the results of the rounding operation.\r
- */\r
- public static SqlDecimal Round(SqlDecimal n, int position)\r
- {\r
- Decimal val = Decimal.Round(n._value, position);\r
-\r
- return new SqlDecimal(val);\r
- }\r
-\r
- /**\r
- * Gets a value indicating the sign of a SqlDecimal instance's Value property.\r
- * @param n The SqlDecimal instance whose sign is to be evaluated.\r
- * @return A number indicating the sign of the SqlDecimal instance.\r
- */\r
- public static int Sign(SqlDecimal n)\r
- {\r
- if (n._value < 0)\r
- return -1;\r
- if(n._value > 0)\r
- return 1;\r
- return 0;\r
- }\r
-\r
- /**\r
- * The subtraction operator the second SqlDecimal operand from the first.\r
- * @param x A SqlDecimal instance\r
- * @param y A SqlDecimal instance\r
- * @return The results of the subtraction operation.\r
- */\r
- public static SqlDecimal Subtract(SqlDecimal x, SqlDecimal y)\r
- {\r
- Decimal val = Decimal.Subtract(x._value, y._value);\r
- SqlDecimal retVal = new SqlDecimal(val);\r
-\r
- return retVal;\r
-\r
- }\r
-\r
- /**\r
- * Returns the a double equal to the contents of the Value property of this instance.\r
- * @return The decimal representation of the Value property.\r
- */\r
- public double ToDouble()\r
- {\r
- return Decimal.ToDouble(_value);\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal instance to SqlBoolean.\r
- * @return A SqlBoolean instance whose Value will be True if the SqlDecimal instance's Value is non-zero,\r
- * False if the SqlDecimal is zero\r
- * and Null if the SqlDecimal instance is Null.\r
- */\r
- public SqlBoolean ToSqlBoolean()\r
- {\r
- if (IsNull)\r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(!_value.Equals(Decimal.Zero));\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal instance to SqlByte.\r
- * @return A SqlByte instance whose Value equals the Value of this SqlDouble instance.\r
- */\r
- public SqlByte ToSqlByte()\r
- {\r
- if (IsNull)\r
- return SqlByte.Null;\r
-\r
- return new SqlByte(checked((byte)_value));\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal instance to SqlDouble.\r
- * @return A SqlDouble instance whose Value equals the Value of this SqlDecimal instance.\r
- */\r
- public SqlDouble ToSqlDouble()\r
- {\r
- if (IsNull)\r
- return SqlDouble.Null;\r
-\r
- return new SqlDouble((double)_value);\r
- }\r
-\r
- /**\r
- * Converts this SqlDouble structure to SqlInt16.\r
- * @return A SqlInt16 structure whose Value equals the Value of this SqlDouble structure.\r
- */\r
- public SqlInt16 ToSqlInt16()\r
- {\r
- if (IsNull)\r
- return SqlInt16.Null;\r
-\r
- return new SqlInt16(checked((short)_value));\r
- }\r
-\r
- /**\r
- * Converts this SqlDouble structure to SqlInt32.\r
- * @return A SqlInt32 structure whose Value equals the Value of this SqlDouble structure.\r
- */\r
- public SqlInt32 ToSqlInt32()\r
- {\r
- if (IsNull)\r
- return SqlInt32.Null;\r
-\r
- return new SqlInt32(checked((int)_value));\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal structure to SqlInt64.\r
- * @return A SqlInt64 structure whose Value equals the Value of this SqlDecimal structure.\r
- */\r
- public SqlInt64 ToSqlInt64()\r
- {\r
- if (IsNull)\r
- return SqlInt64.Null;\r
-\r
- return new SqlInt64(checked((long)_value));\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal instance to SqlDouble.\r
- * @return A SqlMoney instance whose Value equals the Value of this SqlDecimal instance.\r
- */\r
- public SqlMoney ToSqlMoney()\r
- {\r
- if (IsNull)\r
- return SqlMoney.Null;\r
-\r
- return new SqlMoney(_value);\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal instance to SqlSingle.\r
- * @return A SqlSingle instance whose Value equals the Value of this SqlDecimal instance.\r
- */\r
- public SqlSingle ToSqlSingle()\r
- {\r
- if (IsNull)\r
- return SqlSingle.Null;\r
-\r
- return new SqlSingle(checked((float)_value));\r
- }\r
-\r
- /**\r
- * Converts this SqlDecimal structure to SqlString.\r
- * @return A SqlString structure whose value is a string representing the date and time contained in this SqlDecimal structure.\r
- */\r
- public SqlString ToSqlString()\r
- {\r
- return new SqlString(ToString());\r
- }\r
-\r
-\r
- public override String ToString()\r
- {\r
- if (IsNull)\r
- return "null";\r
-\r
- return _value.ToString();\r
- }\r
-\r
- /**\r
- * Truncates the specified SqlDecimal instance's value to the desired position.\r
- * @param n The SqlDecimal instance to be truncated.\r
- * @param position The decimal position to which the number will be truncated.\r
- * @return Supply a negative value for the position parameter in order to truncate the value to the corresponding positon to the left of the decimal point.\r
- */\r
- public static SqlDecimal Truncate(SqlDecimal n, int position)\r
- {\r
- if (n.IsNull)\r
- return n;\r
- \r
- Decimal tmp = Decimal.Round(n._value, position);\r
-\r
- return new SqlDecimal(tmp);\r
- }\r
-\r
- public override int GetHashCode()\r
- {\r
- return _value.GetHashCode();\r
- }\r
- \r
- public static SqlDecimal operator + (SqlDecimal x, SqlDecimal y)\r
- {\r
- if(x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- return new SqlDecimal(x.Value + y.Value);\r
- }\r
-\r
- public static SqlDecimal operator / (SqlDecimal x, SqlDecimal y)\r
- {\r
- if(x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
- return new SqlDecimal (x.Value / y.Value);\r
- }\r
-\r
- public static SqlBoolean operator == (SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value == y.Value);\r
- }\r
-\r
- public static SqlBoolean operator > (SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value > y.Value);\r
- }\r
-\r
- public static SqlBoolean operator >= (SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value >= y.Value);\r
- }\r
-\r
- public static SqlBoolean operator != (SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value != y.Value);\r
- }\r
-\r
- public static SqlBoolean operator < (SqlDecimal x, SqlDecimal y)\r
- {\r
-\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value < y.Value);\r
-\r
- }\r
-\r
- public static SqlBoolean operator <= (SqlDecimal x, SqlDecimal y)\r
- {\r
- if (x.IsNull || y.IsNull) \r
- return SqlBoolean.Null;\r
-\r
- return new SqlBoolean(x.Value <= y.Value);\r
- }\r
-\r
- public static SqlDecimal operator * (SqlDecimal x, SqlDecimal y)\r
- {\r
- // adjust the scale to the smaller of the two beforehand\r
- if (x.Scale > y.Scale)\r
- x = SqlDecimal.AdjustScale(x, y.Scale - x.Scale, true);\r
- else if (y.Scale > x.Scale)\r
- y = SqlDecimal.AdjustScale(y, x.Scale - y.Scale, true);\r
-\r
- return new SqlDecimal(x.Value * y.Value);\r
- }\r
-\r
- public static SqlDecimal operator - (SqlDecimal x, SqlDecimal y)\r
- {\r
- if(x.IsNull || y.IsNull)\r
- return SqlDecimal.Null;\r
-\r
- return new SqlDecimal(x.Value - y.Value);\r
- }\r
-\r
- public static SqlDecimal operator - (SqlDecimal n)\r
- {\r
- if(n.IsNull)\r
- return n;\r
- return new SqlDecimal (Decimal.Negate(n.Value));\r
- }\r
-\r
- public static explicit operator SqlDecimal (SqlBoolean x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.ByteValue);\r
- }\r
-\r
- public static explicit operator Decimal (SqlDecimal n)\r
- {\r
- return n.Value;\r
- }\r
-\r
- public static explicit operator SqlDecimal (SqlDouble x)\r
- {\r
- checked \r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
- }\r
-\r
- public static explicit operator SqlDecimal (SqlSingle x)\r
- {\r
- checked \r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
- }\r
-\r
- public static explicit operator SqlDecimal (SqlString x)\r
- {\r
- checked \r
- {\r
- return Parse (x.Value);\r
- }\r
- }\r
-\r
- public static implicit operator SqlDecimal (decimal x)\r
- {\r
- return new SqlDecimal (x);\r
- }\r
-\r
- public static implicit operator SqlDecimal (SqlByte x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
-\r
- public static implicit operator SqlDecimal (SqlInt16 x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
-\r
- public static implicit operator SqlDecimal (SqlInt32 x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
-\r
- public static implicit operator SqlDecimal (SqlInt64 x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
-\r
- public static implicit operator SqlDecimal (SqlMoney x)\r
- {\r
- if (x.IsNull) \r
- return Null;\r
- else\r
- return new SqlDecimal ((decimal)x.Value);\r
- }\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-namespace System.Data\r
-{\r
-\r
- using java.util;\r
-\r
- using System.Globalization;\r
- //using clr.System;\r
-\r
- public class Res\r
- {\r
- private static readonly String FILE_NAME = "SystemData";\r
- private static readonly ResourceBundle _resource =\r
- ResourceBundle.getBundle(FILE_NAME);\r
-\r
- public static String GetString(String name, Object[] args)\r
- {\r
- return GetString(null, name, args);\r
- }\r
-\r
- public static String GetString(CultureInfo culture, String name, Object[] args)\r
- {\r
- try\r
- {\r
- String str = _resource.getString(name);\r
- if (args != null && (int) args.Length > 0)\r
- {\r
- return String.Format(str, args);\r
- }\r
- else\r
- {\r
- return str;\r
- }\r
- }\r
- catch (MissingResourceException)\r
- {\r
- return null;\r
- }\r
- }\r
-\r
- public static String GetString(String name)\r
- {\r
- return GetString(null, name);\r
- }\r
-\r
- public static String GetString(CultureInfo culture, String name)\r
- {\r
- try\r
- {\r
- return _resource.getString(name);\r
- }\r
- catch (MissingResourceException)\r
- {\r
- return null;\r
- }\r
- }\r
-\r
- public static bool GetBoolean(String name)\r
- {\r
- return GetBoolean(name);\r
- }\r
-\r
- public static bool GetBoolean(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return false;\r
- }\r
-\r
- public static char GetChar(String name)\r
- {\r
- return GetChar(null, name);\r
- }\r
-\r
- public static char GetChar(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return (char)0;\r
- }\r
-\r
- public static int GetByte(String name)\r
- {\r
- return GetByte(null, name);\r
- }\r
-\r
- public static int GetByte(CultureInfo culture, String name)\r
- {\r
- return 0;\r
- }\r
-\r
- public static short GetShort(String name)\r
- {\r
- return GetShort(null, name);\r
- }\r
-\r
- public static short GetShort(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return 0;\r
- }\r
-\r
- public static int GetInt(String name)\r
- {\r
- return GetInt(null, name);\r
- }\r
-\r
- public static int GetInt(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return 0;\r
- }\r
-\r
- public static long GetLong(String name)\r
- {\r
- return GetLong(null, name);\r
- }\r
-\r
- public static long GetLong(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return 0;\r
- }\r
-\r
- public static float GetFloat(String name)\r
- {\r
- return GetFloat(null, name);\r
- }\r
-\r
- public static float GetFloat(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return 0.0f;\r
- }\r
-\r
- public static double GetDouble(String name)\r
- {\r
- return GetDouble(null, name);\r
- }\r
-\r
- public static double GetDouble(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return 0.0;\r
- }\r
-\r
- public static Object GetObject(String name)\r
- {\r
- return GetObject(null, name);\r
- }\r
-\r
- public static Object GetObject(CultureInfo culture, String name)\r
- {\r
- // This online demo only decompiles 10 methods in each class\r
- return null;\r
- }\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Web.Util;
-using System.IO;
-using vmw.@internal.io;
-using vmw.common;
-using System.ComponentModel;
-using System.Threading;
-using javax.servlet;
-using System.Diagnostics;
-
-namespace System.Web.J2EE
-{
- internal static class J2EEUtils
- {
- #region InputStreamWrapper
-
- public sealed class InputStreamWrapper : Stream
- {
- readonly java.io.InputStream _ins;
-
- public InputStreamWrapper (java.io.InputStream ins) {
- _ins = ins;
- }
-
- public override bool CanRead {
- get { return true; }
- }
-
- public override bool CanSeek {
- get { return _ins.markSupported (); }
- }
-
- public override bool CanWrite {
- get { return false; }
- }
-
- public override void Flush () {
- }
-
- public override long Length {
- get { return _ins.available (); }
- }
-
- public override long Position {
- get {
- throw new NotSupportedException ();
- }
- set {
- throw new NotSupportedException ();
- }
- }
-
- public override int Read (byte [] buffer, int offset, int count) {
- int r = _ins.read (TypeUtils.ToSByteArray (buffer), offset, count);
- return r < 0 ? 0 : r;
- }
-
- public override long Seek (long offset, SeekOrigin origin) {
- throw new NotImplementedException ();
- }
-
- public override void SetLength (long value) {
- throw new NotSupportedException ();
- }
-
- public override void Write (byte [] buffer, int offset, int count) {
- throw new NotSupportedException ();
- }
-
- public override void Close () {
- _ins.close ();
- }
- }
-
- #endregion
-
- public static int RunProc(string[] cmd)
- {
- java.lang.Runtime rt = java.lang.Runtime.getRuntime();
- java.lang.Process proc = rt.exec(cmd);
-
- StreamGobbler errorGobbler = new
- StreamGobbler(proc.getErrorStream(), "ERROR");
-
- StreamGobbler outputGobbler = new
- StreamGobbler(proc.getInputStream(), "OUTPUT");
-
- errorGobbler.start();
- outputGobbler.start();
-
- int exitVal = proc.waitFor();
- return exitVal;
- }
- }
-
- public class StreamGobbler : java.lang.Thread
- {
- java.io.InputStream _is;
- String _type;
-
- public StreamGobbler(java.io.InputStream ins, String type)
- {
- this._is = ins;
- this._type = type;
- }
-
- public override void run()
- {
- try
- {
- java.io.InputStreamReader isr = new java.io.InputStreamReader(_is);
- java.io.BufferedReader br = new java.io.BufferedReader(isr);
- String line=null;
- while ( (line = br.readLine()) != null)
- {
- Debug.WriteLine(_type + ">" + line);
- }
- }
- catch (Exception ex)
- {
- Debug.WriteLine (ex);
- }
- }
- }
-}
-
-#region FileSystemWatcher Stub
-
-namespace System.IO
-{
- [DefaultEvent ("Changed")]
-#if NET_2_0
- [IODescription ("")]
-#endif
- public class FileSystemWatcher : Component, ISupportInitialize
- {
- public FileSystemWatcher ()
- : this (String.Empty) {
- }
-
- public FileSystemWatcher (string path)
- : this (path, "*.*") {
- }
-
- public FileSystemWatcher (string path, string filter) {
- }
-
- #region Properties
-
- [DefaultValue (false)]
- [IODescription ("Flag to indicate if this instance is active")]
- public bool EnableRaisingEvents {
- get { return false; }
- set { }
- }
-
- [DefaultValue ("*.*")]
- [IODescription ("File name filter pattern")]
- [RecommendedAsConfigurable (true)]
- [TypeConverter ("System.Diagnostics.Design.StringValueConverter, " + Consts.AssemblySystem_Design)]
- public string Filter {
- get { return "*.*"; }
- set { }
- }
-
- [DefaultValue (false)]
- [IODescription ("Flag to indicate we want to watch subdirectories")]
- public bool IncludeSubdirectories {
- get { return false; }
- set { }
- }
-
- [Browsable (false)]
- [DefaultValue (8192)]
- public int InternalBufferSize {
- get { return 8192; }
- set { }
- }
-
- [DefaultValue (NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite)]
- [IODescription ("Flag to indicate which change event we want to monitor")]
- public NotifyFilters NotifyFilter {
- get { return NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.LastWrite; }
- set { }
- }
-
- [DefaultValue ("")]
- [IODescription ("The directory to monitor")]
- [RecommendedAsConfigurable (true)]
- [TypeConverter ("System.Diagnostics.Design.StringValueConverter, " + Consts.AssemblySystem_Design)]
- [Editor ("System.Diagnostics.Design.FSWPathEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- public string Path {
- get { return String.Empty; }
- set { }
- }
-
- [DefaultValue (null)]
- [IODescription ("The object used to marshal the event handler calls resulting from a directory change")]
-#if NET_2_0
- [Browsable (false)]
-#endif
- public ISynchronizeInvoke SynchronizingObject {
- get { return null; }
- set { }
- }
-
- #endregion // Properties
-
- #region Methods
-
- protected override void Dispose (bool disposing) {
- base.Dispose (disposing);
- }
-
- enum EventType
- {
- FileSystemEvent,
- ErrorEvent,
- RenameEvent
- }
-
- void RaiseEvent (Delegate ev, EventArgs arg, EventType evtype) {
- if (ev == null)
- return;
-
- if (SynchronizingObject == null) {
- Delegate [] delegates = ev.GetInvocationList ();
- if (evtype == EventType.RenameEvent) {
- foreach (RenamedEventHandler d in delegates) {
- d.BeginInvoke (this, (RenamedEventArgs) arg, null, null);
- }
- }
- else if (evtype == EventType.ErrorEvent) {
- foreach (ErrorEventHandler d in delegates) {
- d.BeginInvoke (this, (ErrorEventArgs) arg, null, null);
- }
- }
- else {
- foreach (FileSystemEventHandler d in delegates) {
- d.BeginInvoke (this, (FileSystemEventArgs) arg, null, null);
- }
- }
- return;
- }
-
- SynchronizingObject.BeginInvoke (ev, new object [] { this, arg });
- }
-
- protected void OnChanged (FileSystemEventArgs e) {
- RaiseEvent (Changed, e, EventType.FileSystemEvent);
- }
-
- protected void OnCreated (FileSystemEventArgs e) {
- RaiseEvent (Created, e, EventType.FileSystemEvent);
- }
-
- protected void OnDeleted (FileSystemEventArgs e) {
- RaiseEvent (Deleted, e, EventType.FileSystemEvent);
- }
-
- protected void OnError (ErrorEventArgs e) {
- RaiseEvent (Error, e, EventType.ErrorEvent);
- }
-
- protected void OnRenamed (RenamedEventArgs e) {
- RaiseEvent (Renamed, e, EventType.RenameEvent);
- }
-
- public WaitForChangedResult WaitForChanged (WatcherChangeTypes changeType) {
- return WaitForChanged (changeType, Timeout.Infinite);
- }
-
- public WaitForChangedResult WaitForChanged (WatcherChangeTypes changeType, int timeout) {
- return new WaitForChangedResult ();
- }
-
- #endregion
-
- #region Events and Delegates
-
- [IODescription ("Occurs when a file/directory change matches the filter")]
- public event FileSystemEventHandler Changed;
-
- [IODescription ("Occurs when a file/directory creation matches the filter")]
- public event FileSystemEventHandler Created;
-
- [IODescription ("Occurs when a file/directory deletion matches the filter")]
- public event FileSystemEventHandler Deleted;
-
- [Browsable (false)]
- public event ErrorEventHandler Error;
-
- [IODescription ("Occurs when a file/directory rename matches the filter")]
- public event RenamedEventHandler Renamed;
-
- #endregion // Events and Delegates
-
- #region ISupportInitialize Members
-
- public void BeginInit () {
- }
-
- public void EndInit () {
- }
-
- #endregion
- }
-}
-#endregion
+++ /dev/null
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-// Authors:
-// Vladimir Krasnov <vladimirk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using java.io;
-
-namespace Mainsoft.Web.Hosting
-{
- public sealed class ObjectInputStream : System.IO.Stream, ObjectInput
- {
- readonly ObjectInput _javaObjectInput;
-
- public ObjectInputStream (ObjectInput stream)
- {
- _javaObjectInput = stream;
- }
-
- public override bool CanRead
- {
- get
- {
- return true;
- }
- }
-
- public override bool CanWrite
- {
- get
- {
- return false;
- }
- }
-
- public override bool CanSeek
- {
- get
- {
- return true;
- }
- }
-
- public override long Length
- {
- get
- {
- throw new NotSupportedException ();
- }
- }
-
- public override long Position
- {
- get
- {
- throw new NotSupportedException ();
- }
- set
- {
- throw new NotSupportedException ();
- }
- }
-
- public override void Flush ()
- {
- throw new NotSupportedException ();
- }
-
- public override long Seek (long offset, System.IO.SeekOrigin origin)
- {
- if (origin == System.IO.SeekOrigin.Current)
- return _javaObjectInput.skip (offset);
-
- throw new NotSupportedException ();
- }
-
- public override void SetLength (long value)
- {
- throw new NotSupportedException ();
- }
-
- public override int Read (byte [] buffer, int offset, int count)
- {
- int rv = _javaObjectInput.read (vmw.common.TypeUtils.ToSByteArray (buffer), offset, count);
- return rv > 0 ? rv : 0;
- }
-
- public override void Write (byte [] buffer, int offset, int count)
- {
- throw new NotSupportedException ();
- }
-
- public override int ReadByte ()
- {
- return _javaObjectInput.read ();
- }
-
- public override void Close ()
- {
- _javaObjectInput.close ();
- }
-
- #region ObjectInput Members
-
- public int available ()
- {
- return _javaObjectInput.available ();
- }
-
- public void close ()
- {
- _javaObjectInput.close ();
- }
-
- public int read (sbyte [] __p1, int __p2, int __p3)
- {
- return _javaObjectInput.read (__p1, __p2, __p3);
- }
-
- public int read (sbyte [] __p1)
- {
- return _javaObjectInput.read (__p1);
- }
-
- public int read ()
- {
- return _javaObjectInput.read ();
- }
-
- public object readObject ()
- {
- return _javaObjectInput.readObject ();
- }
-
- public long skip (long __p1)
- {
- return _javaObjectInput.skip (__p1);
- }
-
- #endregion
-
- #region DataInput Members
-
- public bool readBoolean ()
- {
- return _javaObjectInput.readBoolean ();
- }
-
- public sbyte readByte ()
- {
- return _javaObjectInput.readByte ();
- }
-
- public char readChar ()
- {
- return _javaObjectInput.readChar ();
- }
-
- public double readDouble ()
- {
- return _javaObjectInput.readDouble ();
- }
-
- public float readFloat ()
- {
- return _javaObjectInput.readFloat ();
- }
-
- public void readFully (sbyte [] __p1, int __p2, int __p3)
- {
- _javaObjectInput.readFully (__p1, __p2, __p3);
- }
-
- public void readFully (sbyte [] __p1)
- {
- _javaObjectInput.readFully (__p1);
- }
-
- public int readInt ()
- {
- return _javaObjectInput.readInt ();
- }
-
- public string readLine ()
- {
- return _javaObjectInput.readLine ();
- }
-
- public long readLong ()
- {
- return _javaObjectInput.readLong ();
- }
-
- public short readShort ()
- {
- return _javaObjectInput.readShort ();
- }
-
- public string readUTF ()
- {
- return _javaObjectInput.readUTF ();
- }
-
- public int readUnsignedByte ()
- {
- return _javaObjectInput.readUnsignedByte ();
- }
-
- public int readUnsignedShort ()
- {
- return _javaObjectInput.readUnsignedShort ();
- }
-
- public int skipBytes (int __p1)
- {
- return _javaObjectInput.skipBytes (__p1);
- }
-
- #endregion
- }
-
-}
+++ /dev/null
-//
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
-//
-// Authors:
-// Vladimir Krasnov <vladimirk@mainsoft.com>
-// Konstantin Triger <kostat@mainsoft.com>
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using java.io;
-
-namespace Mainsoft.Web.Hosting
-{
- public sealed class ObjectOutputStream : System.IO.Stream, ObjectOutput
- {
- readonly ObjectOutput _javaObjectOutput;
-
- public ObjectOutputStream (ObjectOutput stream)
- {
- _javaObjectOutput = stream;
- }
-
- public override bool CanRead
- {
- get
- {
- return false;
- }
- }
-
- public override bool CanSeek
- {
- get
- {
- return false;
- }
- }
-
- public override bool CanWrite
- {
- get
- {
- return true;
- }
- }
-
- public override void Close ()
- {
- _javaObjectOutput.close ();
- }
-
- public override void Flush ()
- {
- _javaObjectOutput.flush ();
- }
-
- public override long Length
- {
- get
- {
- throw new NotSupportedException ();
- }
- }
-
- public override long Position
- {
- get
- {
- throw new NotSupportedException ();
- }
- set
- {
- throw new NotSupportedException ();
- }
- }
-
- public override long Seek (long offset, System.IO.SeekOrigin origin)
- {
- throw new NotSupportedException ();
- }
-
- public override void SetLength (long value)
- {
- throw new NotSupportedException ();
- }
-
- public override int Read (byte [] buffer, int offset, int count)
- {
- throw new NotSupportedException ();
- }
-
- public override void Write (byte [] buffer, int offset, int count)
- {
- _javaObjectOutput.write (vmw.common.TypeUtils.ToSByteArray (buffer), offset, count);
- }
-
- public override void WriteByte (byte value)
- {
- _javaObjectOutput.write (value);
- }
-
- public ObjectOutput NativeStream
- {
- get { return _javaObjectOutput; }
- }
-
- #region ObjectOutput Members
-
- public void close ()
- {
- _javaObjectOutput.close ();
- }
-
- public void flush ()
- {
- _javaObjectOutput.flush ();
- }
-
- public void write (sbyte [] __p1, int __p2, int __p3)
- {
- _javaObjectOutput.write (__p1, __p2, __p3);
- }
-
- public void write (sbyte [] __p1)
- {
- _javaObjectOutput.write (__p1);
- }
-
- public void write (int __p1)
- {
- _javaObjectOutput.write (__p1);
- }
-
- public void writeObject (object __p1)
- {
- _javaObjectOutput.writeObject (__p1);
- }
-
- #endregion
-
- #region DataOutput Members
-
-
- public void writeBoolean (bool __p1)
- {
- _javaObjectOutput.writeBoolean (__p1);
- }
-
- public void writeByte (int __p1)
- {
- _javaObjectOutput.writeByte (__p1);
- }
-
- public void writeBytes (string __p1)
- {
- _javaObjectOutput.writeBytes (__p1);
- }
-
- public void writeChar (int __p1)
- {
- _javaObjectOutput.writeChar (__p1);
- }
-
- public void writeChars (string __p1)
- {
- _javaObjectOutput.writeChars (__p1);
- }
-
- public void writeDouble (double __p1)
- {
- _javaObjectOutput.writeDouble (__p1);
- }
-
- public void writeFloat (float __p1)
- {
- _javaObjectOutput.writeFloat (__p1);
- }
-
- public void writeInt (int __p1)
- {
- _javaObjectOutput.writeInt (__p1);
- }
-
- public void writeLong (long __p1)
- {
- _javaObjectOutput.writeLong (__p1);
- }
-
- public void writeShort (int __p1)
- {
- _javaObjectOutput.writeShort (__p1);
- }
-
- public void writeUTF (string __p1)
- {
- _javaObjectOutput.writeUTF (__p1);
- }
-
- #endregion
- }
-}
+++ /dev/null
-//
-// (C) 2007 Mainsoft Corporation (http://www.mainsoft.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using javax.servlet.http;
-
-namespace Mainsoft.Web
-{
- public interface IHttpExtendedWorkerRequest
- {
- HttpSession GetSession (bool create);
- }
-
- public interface IHttpUnifyWorkerRequest
- {
- }
-
- public class UnifyRequestException : Exception
- {
- public UnifyRequestException (Exception innerException)
- : base (String.Empty, innerException) {
- }
- }
-}