2003-12-19 Martin Baulig <martin@ximian.com>
[mono.git] / web / postgresql
index 5dbeb6369d2cf073024c18992fe2adb3b9a34e07..6e5bb4f24837d0bf512b7b01111e117f6a64e29e 100644 (file)
-* PostgreSQL Data Provider
+* PostgreSQL and Mono
+
+  When it comes to Mono and PostgreSQL, there are many ways
+  you can handle your data.   You have many Mono Data Providers which can be used
+  to access data from a application written for Mono.  
+  Then there is the future goal of having the ability to host Mono within PostgreSQL to
+  have the applications run on the server which makes things much faster.
+  
+* Hosting Mono in PostgreSQL
+
+  There is a project to <a href="http://gborg.postgresql.org/project/plmono/projdisplay.php">host Mono within PostgreSQL</a>.
+
+  plMono is a PostgreSQL language using the embedded Mono runtime. It provides support for writing functions in C#, or any other language that supports .NET.
+
+* Data Providers
+
+ There are many ADO.NET data providers for <a href="http://www.postgresql.org/">PostgreSQL</a>:
+ There are two providers created specifically for PostgreSQL included with Mono:
 
 <ul>
-       <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
+
+       <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+               <ul>
+                       <li>included with Mono</li>
+                       
+                       <li>a .NET Managed Data Provider for PostgreSQL</li>
+                       
+                       <li>Written in 100% C#</li>
+                       
+                       <li>does not require a client library</li>
+                       
+                       <li>works on Mono and Microsoft .NET</li>
+                       
+                       <li>created by Francisco Figueiredo jr. and has many developers working on it
+                       
+                       <li>works in the SQL# (command-line and GTK# GUI versions)</li>
+                       
+                       <li>in namespace Npgsql and assembly Npgsql and is found in mcs
+                       at mcs/class/Npgsql</li>
+               </ul>
+       </li>
        
-       <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
-       client/server database management system.</li>
+       <li>Mono.Data.PostgreSQL (deprecated)
+               <ul>
+                       <li>included with Mono</li>
+               
+                       <li>Deprecated in favor of Npgsql</li>
+                       
+                       <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
        
-       <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
-       and libpq.so on Linux.</li>
+                       <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
+                               client/server database management system.</li>
        
-       <li>Alternative to the PostgreSQL provider in Mono:
-               <ul>
-                       <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
-                       is a Managed PostgreSQL provider written in 100% C#, does not require a client library,
-                       and works on Microsoft .NET and Mono.  Npgsql providers works in the SQL# command-line version
-                       and the GTK# version.
-                       </li>
+                       <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
+                               and libpq.so on Linux.</li>
                </ul>
        </li>
        
-       <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li>
+       <li><a href="http://sourceforge.net/projects/mysqlnet/">ByteFX.Data</a> has a provider for PostgreSQL too, but I do not know how well it works with Mono.</li>
+       
+       <li>There is another .NET data provider for PostgreSQL named <a href="http://sourceforge.net/projects/pgsqlclient/">PgSqlClient</a>, but I do not know if it works with Mono.</li>
+       
+       <li>If none of the above providers meet your needs.  There is the ODBC and OLEDB providers included with Mono.</li>
+                       
+       <li>Bugs with Mono or the data provider should be reported 
+       in Mono's Bugzilla <a href="http://bugzilla.ximian.com/">here</a>.  If you
+       do not have Bugzilla user account, it is free 
+       and easy to 
+       create one <a href="http://bugzilla.ximian.com/createaccount.cgi">here</a>.</li>
+
+
 </ul>
 
+ Below, see separate Testing sections for Npgsql and Mono.Data.PostgreSqlClient.
+
 ** Current Status
 
 <ul>
+       <li>Npgsql
+               <ul>
+                       <li>Builds and Runs on both Microsoft .NET and Mono.</li>
+                       <li>Works using SQL# (command-line and GTK# versions)</li>
+                       <li>You can send insert, update, delete queries \r
+                               through NpgsqlCommand.ExecuteNonQuery() method.</li>\r
+                       <li>You can send queries like, select count(*) from table, select version()\r
+                               with NpgsqlCommand.ExecuteScalar() method.</li>\r
+                       <li>There is logging support. (Thanks Dave Page)\r
+                               To use it, place code like that in your program:</li>\r
+\r
+<pre>      \r
+      // Enable logging.\r
+         NpgsqlEventLog.Level = LogLevel.Debug;            // LogLevel.\r
+         NpgsqlEventLog.LogName = "NpgsqlTests.LogFile";   // LogFile.\r
+</pre>\r
+    \r
+                       <li>You can use Npgsql with Mono (Thanks Kristis Makris). It is not working perfectly.</li>\r
+                       <li>There is a winforms test suite (Thanks Dave Page).</li>\r
+                       <li>Clearer code in NpgsqlConnection removing *magic* numbers and constants. (Thanks Kristis Makris)</li>\r
+                       <li>Better support of ODBC-like ConnectionString in NpgsqlConnection (Thanks Dave Page)</li>\r
+                       <li>Thanks Ulrich Sprick for all discussion and ideas.</li>\r
+
+               </ul>
+       </li>
+       <li>Mono.Data.PostgreSQL status
+       <ul>
+       
+       <li>Deprecated in favor of Npgsql</li>
+       
        <li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
        DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand.</li>
        
        Input Parameters are currently supported.  Output, Input/Output,
        and Return parameters still need to be done.</li>
        
-       <li>A lot of functionality in System.Data is missing, but the 
-       infrastructure is starting to come together.</li>
-       
        <li>A lot of Exceptions need to be thrown for various exceptions.  However,
        PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially
        implemented.</li>
        See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.</li>
        
        <li>Works in the SQL# command-line version
-                       and the GTK# version.</li>
+                       and the GTK# version on Linux.  It only works in SQL# command-line version
+                       on Windows.</li>
+                       
+       </ul>
+       </li>
+                       
 </ul>
 
 ** Action Plan
+       <ul>
+               <li>More testing and fixing bugs</li>
+               
+               <li>Better error handling</li>
+               
+               <li>More Data Types to use</li>
+               
+               <li>Any features for Npgsql should be implemented in Npgsql's main cvs repository at
+               gborg.postgresql.org.  Most bugs should be fixed in gborg.postgresql.org's cvs.
+               Only bugs neccessary for building and running of Npgsql on Mono can be done in Mono cvs, 
+               but once applied they should be sent to Npgsql's mailing list
+               at gborg.postgresql.org for inclusion into cvs there.  Whenever there is 
+               a release of Npgsql (determined by Francisco Figueiredo jr. or a release
+               of Mono (determined by Miguel de Icaza), then the Npgsql source 
+               in gborg.postgresql.org's cvs will be used to update the Npgsql source in
+               Mono's cvs. 
+               </li>
+               
+               <li>Mono.Data.PostgreSqlClient even though deprecated can still 
+               accept bug fixes. This is because other areas, such as, ASP.NET examples
+               may still use this provider.</li>
+               
+               <li>Add any missing functionality to Npgsql. If this funtionality works on
+               .NET but not on Mono, implement the missing features or fix the bugs in Mono</li>
 
-       <p>More testing and fixing bugs...
-
-       <p>Eventually replace the PostgreSQL data provider in Mono
-       with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
-       Npgsql is a .Net Data Provider for PostgreSQL which implements 
-       the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
-       Npgsql is implemented in 100% C#.  This provider was created by Francisco Figueiredo jr.
-       and has many programmers developing the provider.
+               <li>Npgsql has replaced Mono.Data.PostgreSqlClient as the provider of
+               choice to use.  However, Mono.Data.PostgreSqlClient will remain in a
+               deprecated state until nobody uses it anymore - then it can be removed</li>
+               
+               <li>Implement more of PostgreSQL 7.3 features in Npgsql</li>
+       </ul>
 
-** Testing Mono's Mono.Data.PostgreSqlClient
+** Testing Mono.Data.PostgreSqlClient
 
        <ul>
                * <p>In order to test Mono.Data.PostgreSqlClient, you will need to have
@@ -356,6 +462,7 @@ mono PostgresTest.exe
           "Password=fun2db;";
        IDbConnection dbcon;
        dbcon = new PgConnection(connectionString);
+       dbcon.Open();
        IDbCommand dbcmd = dbcon.CreateCommand();
        // requires a table to be created named employee
        // with columns firstname and lastname
@@ -369,8 +476,8 @@ mono PostgresTest.exe
        dbcmd.CommandText = sql;
        IDataReader reader = dbcmd.ExecuteReader();
        while(reader.Read()) {
-            string FirstName = reader["firstname"];
-            string LastName = reader["lastname"];
+            string FirstName = (string) reader["firstname"];
+            string LastName = (string) reader["lastname"];
             Console.WriteLine("Name: " + 
                 FirstName + " " + LastName);
        }
@@ -438,6 +545,7 @@ mono TestExample.exe
           "User ID=postgres;" +
           "Password=fun2db;";
        IDbConnection dbcon;
+       dbcon.Open();
        dbcon = new NpgsqlConnection(connectionString);
        IDbCommand dbcmd = dbcon.CreateCommand();
        // requires a table to be created named employee
@@ -452,8 +560,8 @@ mono TestExample.exe
        dbcmd.CommandText = sql;
        IDataReader reader = dbcmd.ExecuteReader();
        while(reader.Read()) {
-            string FirstName = reader["firstname"];
-            string LastName = reader["lastname"];
+            string FirstName = (string) reader["firstname"];
+            string LastName = (string) reader["lastname"];
             Console.WriteLine("Name: " + 
                  FirstName + " " + LastName);
        }