|
From: <jul...@us...> - 2011-03-30 01:50:38
|
Revision: 5569
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5569&view=rev
Author: julian-maughan
Date: 2011-03-30 01:50:31 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
Added PostgreSQL metadata provider (NH-2426)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-29 14:23:44 UTC (rev 5568)
+++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-30 01:50:31 UTC (rev 5569)
@@ -1,6 +1,8 @@
using System.Data;
+using System.Data.Common;
using NHibernate.Cfg;
using NHibernate.Dialect.Function;
+using NHibernate.Dialect.Schema;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -12,21 +14,22 @@
/// <remarks>
/// The PostgreSQLDialect defaults the following configuration properties:
/// <list type="table">
- /// <listheader>
- /// <term>Property</term>
- /// <description>Default Value</description>
- /// </listheader>
- /// <item>
- /// <term>connection.driver_class</term>
- /// <description><see cref="NHibernate.Driver.NpgsqlDriver" /></description>
- /// </item>
+ /// <listheader>
+ /// <term>Property</term>
+ /// <description>Default Value</description>
+ /// </listheader>
+ /// <item>
+ /// <term>connection.driver_class</term>
+ /// <description><see cref="NHibernate.Driver.NpgsqlDriver" /></description>
+ /// </item>
/// </list>
/// </remarks>
public class PostgreSQLDialect : Dialect
{
- /// <summary></summary>
public PostgreSQLDialect()
{
+ DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.NpgsqlDriver";
+
RegisterColumnType(DbType.AnsiStringFixedLength, "char(255)");
RegisterColumnType(DbType.AnsiStringFixedLength, 8000, "char($l)");
RegisterColumnType(DbType.AnsiString, "varchar(255)");
@@ -51,7 +54,7 @@
RegisterColumnType(DbType.StringFixedLength, 4000, "char($l)");
RegisterColumnType(DbType.String, "varchar(255)");
RegisterColumnType(DbType.String, 4000, "varchar($l)");
- RegisterColumnType(DbType.String, 1073741823, "text"); //
+ RegisterColumnType(DbType.String, 1073741823, "text");
RegisterColumnType(DbType.Time, "time");
// Override standard HQL function
@@ -59,23 +62,17 @@
RegisterFunction("str", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as varchar)"));
RegisterFunction("locate", new PositionSubstringFunction());
RegisterFunction("iif", new SQLFunctionTemplate(null, "case when ?1 then ?2 else ?3 end"));
-
RegisterFunction("substring", new AnsiSubstringFunction());
RegisterFunction("replace", new StandardSQLFunction("replace", NHibernateUtil.String));
RegisterFunction("left", new SQLFunctionTemplate(NHibernateUtil.String, "substr(?1,1,?2)"));
-
RegisterFunction("mod", new SQLFunctionTemplate(NHibernateUtil.Int32, "((?1) % (?2))"));
-
- DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.NpgsqlDriver";
}
- /// <summary></summary>
public override string AddColumnString
{
get { return "add column"; }
}
- /// <summary></summary>
public override bool DropConstraints
{
get { return false; }
@@ -111,10 +108,10 @@
return insertString.Append(" returning " + identifierColumnName);
}
- public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
- {
- get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; }
- }
+ public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
+ {
+ get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; }
+ }
public override bool SupportsSequences
{
@@ -192,13 +189,6 @@
get { return true; }
}
- /*public override bool DropTemporaryTableAfterUse()
- {
- //we have to, because postgres sets current tx
- //to rollback only after a failed create table
- return true;
- }*/
-
public override string CreateTemporaryTableString
{
get { return "create temporary table"; }
@@ -206,10 +196,7 @@
public override string CreateTemporaryTablePostfix
{
- get
- {
- return "on commit drop";
- }
+ get { return "on commit drop"; }
}
public override string ToBooleanValueString(bool value)
@@ -217,9 +204,14 @@
return value ? "TRUE" : "FALSE";
}
- public override string SelectGUIDString
- {
- get { return "select uuid_generate_v4()"; }
- }
+ public override string SelectGUIDString
+ {
+ get { return "select uuid_generate_v4()"; }
+ }
+
+ public override IDataBaseSchema GetDataBaseSchema(DbConnection connection)
+ {
+ return new PostgreSQLDataBaseMetadata(connection);
+ }
}
}
Added: trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs 2011-03-30 01:50:31 UTC (rev 5569)
@@ -0,0 +1,110 @@
+using System;
+using System.Data;
+using System.Data.Common;
+using Iesi.Collections.Generic;
+
+namespace NHibernate.Dialect.Schema
+{
+ public class PostgreSQLDataBaseMetadata : AbstractDataBaseSchema
+ {
+ public PostgreSQLDataBaseMetadata(DbConnection connection) : base(connection) {}
+
+ public override ITableMetadata GetTableMetadata(DataRow rs, bool extras)
+ {
+ return new PostgreSQLTableMetadata(rs, this, extras);
+ }
+
+ public override ISet<string> GetReservedWords()
+ {
+ // NpgsqlDriver does not currently (2011/03/30) support this feature, so the
+ // base class implementation has to be overriden
+ return new HashedSet<string>();
+ }
+ }
+
+ public class PostgreSQLTableMetadata : AbstractTableMetadata
+ {
+ public PostgreSQLTableMetadata(DataRow rs, IDataBaseSchema meta, bool extras) : base(rs, meta, extras) {}
+
+ protected override IColumnMetadata GetColumnMetadata(DataRow rs)
+ {
+ return new PostgreSQLColumnMetadata(rs);
+ }
+
+ protected override string GetColumnName(DataRow rs)
+ {
+ return Convert.ToString(rs["COLUMN_NAME"]);
+ }
+
+ protected override string GetConstraintName(DataRow rs)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override IForeignKeyMetadata GetForeignKeyMetadata(DataRow rs)
+ {
+ return new PostgreSQLForeignKeyMetadata(rs);
+ }
+
+ protected override IIndexMetadata GetIndexMetadata(DataRow rs)
+ {
+ return new PostgreSQLIndexMetadata(rs);
+ }
+
+ protected override string GetIndexName(DataRow rs)
+ {
+ return Convert.ToString(rs["INDEX_NAME"]);
+ }
+
+ protected override void ParseTableInfo(DataRow rs)
+ {
+ Catalog = Convert.ToString(rs["TABLE_CATALOG"]);
+ Schema = Convert.ToString(rs["TABLE_SCHEMA"]);
+ if (string.IsNullOrEmpty(Catalog))
+ {
+ Catalog = null;
+ }
+ if (string.IsNullOrEmpty(Schema))
+ {
+ Schema = null;
+ }
+ Name = Convert.ToString(rs["TABLE_NAME"]);
+ }
+ }
+
+ public class PostgreSQLColumnMetadata : AbstractColumnMetaData
+ {
+ public PostgreSQLColumnMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["COLUMN_NAME"]);
+ object objValue = rs["CHARACTER_MAXIMUM_LENGTH"];
+ if (objValue != DBNull.Value)
+ {
+ ColumnSize = Convert.ToInt32(objValue);
+ }
+ objValue = rs["NUMERIC_PRECISION"];
+ if (objValue != DBNull.Value)
+ {
+ NumericalPrecision = Convert.ToInt32(objValue);
+ }
+ Nullable = Convert.ToString(rs["IS_NULLABLE"]);
+ TypeName = Convert.ToString(rs["DATA_TYPE"]);
+ }
+ }
+
+ public class PostgreSQLIndexMetadata : AbstractIndexMetadata
+ {
+ public PostgreSQLIndexMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["INDEX_NAME"]);
+ }
+ }
+
+ public class PostgreSQLForeignKeyMetadata : AbstractForeignKeyMetadata
+ {
+ public PostgreSQLForeignKeyMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["CONSTRAINT_NAME"]);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-29 14:23:44 UTC (rev 5568)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-30 01:50:31 UTC (rev 5569)
@@ -138,6 +138,7 @@
<Compile Include="Dialect\MsSql7Dialect.cs" />
<Compile Include="Dialect\MySQLDialect.cs" />
<Compile Include="Dialect\PostgreSQLDialect.cs" />
+ <Compile Include="Dialect\Schema\PostgreSQLMetadata.cs" />
<Compile Include="Dialect\SQLiteDialect.cs" />
<Compile Include="Dialect\SybaseSQLAnywhere10Dialect.cs" />
<Compile Include="Dialect\SybaseSQLAnywhere11Dialect.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|