2002-11-01 Daniel Morgan <danmorg@sc.rr.com>
authorDaniel Morgan <monodanmorg@yahoo.com>
Sat, 2 Nov 2002 00:41:44 +0000 (00:41 -0000)
committerDaniel Morgan <monodanmorg@yahoo.com>
Sat, 2 Nov 2002 00:41:44 +0000 (00:41 -0000)
* PgSqlCommand.cs: get rid of warning

* PgSqlDataReader.cs: implemented GetEnumerator(),
and Dispose()

svn path=/trunk/mcs/; revision=8738

mcs/class/Mono.Data.PostgreSqlClient/ChangeLog
mcs/class/Mono.Data.PostgreSqlClient/Mono.Data.PostgreSqlClient/PgSqlCommand.cs
mcs/class/Mono.Data.PostgreSqlClient/Mono.Data.PostgreSqlClient/PgSqlDataReader.cs
mcs/class/Mono.Data.PostgreSqlClient/PgSqlCommand.cs
mcs/class/Mono.Data.PostgreSqlClient/PgSqlDataReader.cs

index 6b6258fb77ec01a2718c865b0beb841dcfff5901..525d34be98516a3a7b7b909593ef51f2ced1b5ae 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-01  Daniel Morgan <danmorg@sc.rr.com>\r
+\r
+       * PgSqlCommand.cs: get rid of warning\r
+       \r
+       * PgSqlDataReader.cs: implemented GetEnumerator(),\r
+       and Dispose()\r
+\r
 2002-10-16  Daniel Morgan <danmorg@sc.rr.com>\r
 \r
        * ParmUtil.cs\r
index 6fd7926d1e898d9fe87f683a50ae0e559028b54b..e7140557fafbf56faa164f37d07d19224f467733 100644 (file)
@@ -915,7 +915,7 @@ namespace Mono.Data.PostgreSqlClient {
                private void GetKeyInfo(string columnName, out bool isUnique, out bool isKey) {
                        isUnique = false;
                        isKey = false;
-
+/*
                        string sql;
 
                        sql =
@@ -923,6 +923,7 @@ namespace Mono.Data.PostgreSqlClient {
                        "FROM pg_class c, pg_class c2, pg_index i " +
                        "WHERE c.relname = ':tableName' AND c.oid = i.indrelid " +
                        "AND i.indexrelid = c2.oid ";
+*/                     
                }
        }
 }
index 1bd246638c48026e4d7b9f8479d53587520f45fd..f855654067df8029db9f92f547b2d1571d4b8ef1 100644 (file)
@@ -27,6 +27,7 @@ using System;
 using System.Collections;
 using System.ComponentModel;
 using System.Data;
+using System.Data.Common;
 
 namespace Mono.Data.PostgreSqlClient {
        /// <summary>
@@ -34,10 +35,9 @@ namespace Mono.Data.PostgreSqlClient {
        /// of result sets obtained by executing a command 
        /// at a SQL database.
        /// </summary>
-       //public sealed class PgSqlDataReader : MarshalByRefObject,
-       //      IEnumerable, IDataReader, IDisposable, IDataRecord
-       public sealed class PgSqlDataReader : IEnumerable, 
-               IDataReader, IDataRecord {
+       public sealed class PgSqlDataReader : MarshalByRefObject,
+               IEnumerable, IDataReader, IDisposable, IDataRecord {
+
                #region Fields
 
                private PgSqlCommand cmd;
@@ -60,6 +60,8 @@ namespace Mono.Data.PostgreSqlClient {
 
                private int currentRow = -1; // no Read() has been done yet
 
+               private bool disposed = false;
+
                #endregion // Fields
 
                #region Constructors
@@ -79,15 +81,13 @@ namespace Mono.Data.PostgreSqlClient {
                public void Close() {
                        open = false;
                        
-                       // free SqlDataReader resources in SqlCommand
-                       // and allow SqlConnection to be used again
+                       // free PgSqlDataReader resources in PgSqlCommand
+                       // and allow PgSqlConnection to be used again
                        cmd.CloseReader();
 
                        // TODO: get parameters from result
 
-                       // clear unmanaged PostgreSQL result set
-                       PostgresLibrary.PQclear (pgResult);
-                       pgResult = IntPtr.Zero;
+                       Dispose (true);
                }
 
                [MonoTODO]
@@ -328,21 +328,46 @@ namespace Mono.Data.PostgreSqlClient {
                }
 
                [MonoTODO]
-               public IEnumerator GetEnumerator() {
-                       throw new NotImplementedException ();
+               IEnumerator IEnumerable.GetEnumerator () {
+                       return new DbEnumerator (this);
                }
 
                #endregion // Public Methods
 
                #region Destructors
 
-               [MonoTODO]
-               public void Dispose () {
+               private void Dispose(bool disposing) {
+                       if(!this.disposed) {
+                               if(disposing) {
+                                       // release any managed resources
+                                       cmd = null;
+                                       table = null;
+                                       fields = null;
+                                       types = null;
+                                       isNull = null;
+                                       actualLength = null;
+                                       dbTypes = null;
+                               }
+                               // release any unmanaged resources
+
+                               // clear unmanaged PostgreSQL result set
+                               if (pgResult != IntPtr.Zero) {
+                                       PostgresLibrary.PQclear (pgResult);
+                                       pgResult = IntPtr.Zero;
+                               }
+
+                               // close any handles
+                               this.disposed = true;
+                       }
                }
 
-               //[MonoTODO]
-               //~PgSqlDataReader() {
-               //}
+               void IDisposable.Dispose() {
+                       Dispose(true);
+               }
+
+               ~PgSqlDataReader() {
+                       Dispose(false);
+               }
 
                #endregion // Destructors
 
index 6fd7926d1e898d9fe87f683a50ae0e559028b54b..e7140557fafbf56faa164f37d07d19224f467733 100644 (file)
@@ -915,7 +915,7 @@ namespace Mono.Data.PostgreSqlClient {
                private void GetKeyInfo(string columnName, out bool isUnique, out bool isKey) {
                        isUnique = false;
                        isKey = false;
-
+/*
                        string sql;
 
                        sql =
@@ -923,6 +923,7 @@ namespace Mono.Data.PostgreSqlClient {
                        "FROM pg_class c, pg_class c2, pg_index i " +
                        "WHERE c.relname = ':tableName' AND c.oid = i.indrelid " +
                        "AND i.indexrelid = c2.oid ";
+*/                     
                }
        }
 }
index 1bd246638c48026e4d7b9f8479d53587520f45fd..f855654067df8029db9f92f547b2d1571d4b8ef1 100644 (file)
@@ -27,6 +27,7 @@ using System;
 using System.Collections;
 using System.ComponentModel;
 using System.Data;
+using System.Data.Common;
 
 namespace Mono.Data.PostgreSqlClient {
        /// <summary>
@@ -34,10 +35,9 @@ namespace Mono.Data.PostgreSqlClient {
        /// of result sets obtained by executing a command 
        /// at a SQL database.
        /// </summary>
-       //public sealed class PgSqlDataReader : MarshalByRefObject,
-       //      IEnumerable, IDataReader, IDisposable, IDataRecord
-       public sealed class PgSqlDataReader : IEnumerable, 
-               IDataReader, IDataRecord {
+       public sealed class PgSqlDataReader : MarshalByRefObject,
+               IEnumerable, IDataReader, IDisposable, IDataRecord {
+
                #region Fields
 
                private PgSqlCommand cmd;
@@ -60,6 +60,8 @@ namespace Mono.Data.PostgreSqlClient {
 
                private int currentRow = -1; // no Read() has been done yet
 
+               private bool disposed = false;
+
                #endregion // Fields
 
                #region Constructors
@@ -79,15 +81,13 @@ namespace Mono.Data.PostgreSqlClient {
                public void Close() {
                        open = false;
                        
-                       // free SqlDataReader resources in SqlCommand
-                       // and allow SqlConnection to be used again
+                       // free PgSqlDataReader resources in PgSqlCommand
+                       // and allow PgSqlConnection to be used again
                        cmd.CloseReader();
 
                        // TODO: get parameters from result
 
-                       // clear unmanaged PostgreSQL result set
-                       PostgresLibrary.PQclear (pgResult);
-                       pgResult = IntPtr.Zero;
+                       Dispose (true);
                }
 
                [MonoTODO]
@@ -328,21 +328,46 @@ namespace Mono.Data.PostgreSqlClient {
                }
 
                [MonoTODO]
-               public IEnumerator GetEnumerator() {
-                       throw new NotImplementedException ();
+               IEnumerator IEnumerable.GetEnumerator () {
+                       return new DbEnumerator (this);
                }
 
                #endregion // Public Methods
 
                #region Destructors
 
-               [MonoTODO]
-               public void Dispose () {
+               private void Dispose(bool disposing) {
+                       if(!this.disposed) {
+                               if(disposing) {
+                                       // release any managed resources
+                                       cmd = null;
+                                       table = null;
+                                       fields = null;
+                                       types = null;
+                                       isNull = null;
+                                       actualLength = null;
+                                       dbTypes = null;
+                               }
+                               // release any unmanaged resources
+
+                               // clear unmanaged PostgreSQL result set
+                               if (pgResult != IntPtr.Zero) {
+                                       PostgresLibrary.PQclear (pgResult);
+                                       pgResult = IntPtr.Zero;
+                               }
+
+                               // close any handles
+                               this.disposed = true;
+                       }
                }
 
-               //[MonoTODO]
-               //~PgSqlDataReader() {
-               //}
+               void IDisposable.Dispose() {
+                       Dispose(true);
+               }
+
+               ~PgSqlDataReader() {
+                       Dispose(false);
+               }
 
                #endregion // Destructors