Personal tools

MetaHDBC

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Added status and link to MetaHDBC darft paper)
m (Removing ToDo itmes that are done)
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
MetaHDBC is a project that will use [[Template_Haskell | Template Haskell]] and [http://software.complete.org/software/projects/show/hdbc HDBC] to do statically checked database access.
+
= Short Introduction =
   
[http://lindstroem.wordpress.com/2008/09/18/metahdbc-paper-draft/ A draft paper is now available describing MetaHDBC.]
+
MetaHDBC is a project that uses [[Template_Haskell | Template Haskell]] and [http://hackage.haskell.org/package/HDBC HDBC] to do statically checked database access. The programmer writes ordinary SQL, which is then validated by a relational database management system (RDMS). If the RDMS' ODBC driver supports type inference, then MetaHDBC also makes use of the infered types to do static type checking. Validation and type checking both occurs at compile-time.
   
For a little background, see this [http://www.nabble.com/Using-Template-Haskell-to-make-type-safe-database-access-td17027286.html haskell-cafe post] which got the project started.
+
= Getting started with MetaHDBC =
   
[[MetaHDBC_Install | Installation notes for MetaHDBC]].
+
There is no real tutorial about MetaHDBC. Nonetheless, [http://lindstroem.wordpress.com/2008/09/18/metahdbc-paper-draft/ the MetaHDBC draft paper] will help you get started. Especially the first few chapters will be good for beginners.
  +
  +
[[MetaHDBC_Install | Click here, if you want to install MetaHDBC]].
   
 
After installation you can look at the examples directory in the repository to get started easily with MetaHDBC.
 
After installation you can look at the examples directory in the repository to get started easily with MetaHDBC.
  +
  +
For a little background, see this [http://www.nabble.com/Using-Template-Haskell-to-make-type-safe-database-access-td17027286.html haskell-cafe post] which got the project started.
   
 
= Status =
 
= Status =
Line 13: Line 15:
 
MetaHDBC is implemented and can be used, but it has some shortcomings.
 
MetaHDBC is implemented and can be used, but it has some shortcomings.
   
First, MetaHDBC's implicit static typing is only as good as the underlying database ability to do type inference. Unfortunately, popular open source database like PostgreSQL, MySQL and SQLite do a poor job of type inference. On the other hand, if you use IBM's DB2, you are in luck as DB2's type inference is pretty good. We have not tested MS SQL server's ability to do type inference, but we suspect it is also good. If you try to use MetaHDBC with MS SQL server, then please [mailto:mads_lindstroem@yahoo.dk report the results].
+
MetaHDBC do not implement a SQL (or relational algebra) type inference engine itself. In stead it ask a RDMS (though ODBC) to infer the result of a SQL statement. Unfortunately, popular open source database like PostgreSQL, MySQL and SQLite do a poor job reporting the type of SQL statements. On the other hand, if you use IBM's DB2, you are in luck as DB2's ODBC driver do a good job of reporting the type of SQL statements. We have not tested MS SQL server's ability to report types of SQL statements, but we suspect it is also good. If you try to use MetaHDBC with MS SQL server, then please [mailto:mads_lindstroem@yahoo.dk report the results].
   
Second, MetaHDBC have not seen much use, so bugs may be lurking that has yet to be fix.
+
Second, MetaHDBC have not seen much use, so bugs may be lurking that has yet to be fixed.
   
 
= Tasks =
 
= Tasks =
   
If you are interested in helping out with any of the following task, please [mailto:mads_lindstroem@yahoo.dk contact me]. If you have other tasks, that could help MetaHDBC, it would also be beneficiary to contact me before starting.
+
If you are interested in helping out with any of the following task, please [mailto:mads.lindstroem@gmail.com contact me]. If you have other tasks, that could help MetaHDBC, it would also be beneficiary to contact me before starting.
 
== Make popular open source database do type inference ==
 
 
Currently, we have found no open source database which do type inference. This is unfortunately as it makes MetaHDBC a lot less valuable.
 
 
== Refactoring the test cases ==
 
 
I (Mads Lindstrøm) are working towards refactoring the test cases, so that they will be easier to understand and be easier to run. They can be problematic to run if you do not have all of PostgreSQL, MySQL, SQLite and DB2 installed. It should be possible to run a subset of the test-cases matching the databases a user has installed.
 
 
== Testing MetaHDBC on MS Windows ==
 
   
MetaHDBC has only been run on Linux. We would especially like to see MetaHDBC used with MS SQL server, as we expect (hope for) SQL server to have good type inference.
+
== Make popular open source database report type inference result though ODBC ==
   
== Removing the need to patch HDBC ==
+
For MetaHDBC to shine we need to RDMS's ODBC drivers to:
   
To make MetaHDBC compile we need to patch HDBC. It would be better if did not need this.
+
* report the type of SQL statements though ODBC, see [http://msdn.microsoft.com/en-us/library/ms710188.aspx SQLDescribeParam], [http://msdn.microsoft.com/en-us/library/ms716289(VS.85).aspx SQLDescribeCol], ...
  +
* we need the reported types to be available before we execute a SQL statement
   
The need can be removed by either making our own binding towards ODBC, or by making a patch that would be acceptable by the HDBC maintainer (John Goerzen). The latter solution would be preferable and we have made two feature request towards HDBC-ODBC, [http://software.complete.org/software/issues/show/73 here] and [http://software.complete.org/software/issues/show/72 here]. However, feature requests is one thing, working maintainable code is another. Please consider implementing the two feature requests in such a way that they could be included in the HDBC-ODBC package. You should, of cause, talk to John Goerzen before implementing these feature requests.
+
Currently, we have found no open source database, which satisfy the two requirements above. This is unfortunately as it makes MetaHDBC a lot less valuable.

Latest revision as of 13:23, 31 July 2011

Contents

[edit] 1 Short Introduction

MetaHDBC is a project that uses Template Haskell and HDBC to do statically checked database access. The programmer writes ordinary SQL, which is then validated by a relational database management system (RDMS). If the RDMS' ODBC driver supports type inference, then MetaHDBC also makes use of the infered types to do static type checking. Validation and type checking both occurs at compile-time.

[edit] 2 Getting started with MetaHDBC

There is no real tutorial about MetaHDBC. Nonetheless, the MetaHDBC draft paper will help you get started. Especially the first few chapters will be good for beginners.

Click here, if you want to install MetaHDBC.

After installation you can look at the examples directory in the repository to get started easily with MetaHDBC.

For a little background, see this haskell-cafe post which got the project started.

[edit] 3 Status

MetaHDBC is implemented and can be used, but it has some shortcomings.

MetaHDBC do not implement a SQL (or relational algebra) type inference engine itself. In stead it ask a RDMS (though ODBC) to infer the result of a SQL statement. Unfortunately, popular open source database like PostgreSQL, MySQL and SQLite do a poor job reporting the type of SQL statements. On the other hand, if you use IBM's DB2, you are in luck as DB2's ODBC driver do a good job of reporting the type of SQL statements. We have not tested MS SQL server's ability to report types of SQL statements, but we suspect it is also good. If you try to use MetaHDBC with MS SQL server, then please report the results.

Second, MetaHDBC have not seen much use, so bugs may be lurking that has yet to be fixed.

[edit] 4 Tasks

If you are interested in helping out with any of the following task, please contact me. If you have other tasks, that could help MetaHDBC, it would also be beneficiary to contact me before starting.

[edit] 4.1 Make popular open source database report type inference result though ODBC

For MetaHDBC to shine we need to RDMS's ODBC drivers to:

  • report the type of SQL statements though ODBC, see SQLDescribeParam, SQLDescribeCol, ...
  • we need the reported types to be available before we execute a SQL statement

Currently, we have found no open source database, which satisfy the two requirements above. This is unfortunately as it makes MetaHDBC a lot less valuable.