|
From: <dav...@us...> - 2009-03-06 11:54:16
|
Revision: 4118
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4118&view=rev
Author: davybrion
Date: 2009-03-06 11:54:11 +0000 (Fri, 06 Mar 2009)
Log Message:
-----------
applying patch from Ivan Goryaev for NH-1695
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs
trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Dialect/Schema/MySQLMetaData.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs 2009-03-05 13:06:45 UTC (rev 4117)
+++ trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs 2009-03-06 11:54:11 UTC (rev 4118)
@@ -1,6 +1,8 @@
using System;
using System.Data;
+using System.Data.Common;
using System.Text;
+using NHibernate.Dialect.Schema;
using NHibernate.SqlCommand;
using NHibernate.Util;
using Environment=NHibernate.Cfg.Environment;
@@ -158,6 +160,11 @@
get { return true; }
}
+ public override IDataBaseSchema GetDataBaseSchema(DbConnection connection)
+ {
+ return new MySQLDataBaseSchema(connection);
+ }
+
public override bool SupportsSubSelects
{
get { return false; }
Modified: trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs 2009-03-05 13:06:45 UTC (rev 4117)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs 2009-03-06 11:54:11 UTC (rev 4118)
@@ -87,9 +87,14 @@
public virtual DataTable GetForeignKeys(string catalog, string schema, string table)
{
var restrictions = new[] {catalog, schema, table, null};
- return connection.GetSchema("ForeignKeys", restrictions);
+ return connection.GetSchema(ForeignKeysSchemaName, restrictions);
}
+ protected virtual string ForeignKeysSchemaName
+ {
+ get { return "ForeignKeys"; }
+ }
+
#endregion
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Dialect/Schema/MySQLMetaData.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/MySQLMetaData.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/MySQLMetaData.cs 2009-03-06 11:54:11 UTC (rev 4118)
@@ -0,0 +1,108 @@
+using System;
+using System.Data;
+using System.Data.Common;
+
+namespace NHibernate.Dialect.Schema
+{
+ public class MySQLDataBaseSchema : AbstractDataBaseSchema
+ {
+ public MySQLDataBaseSchema(DbConnection connection) : base(connection)
+ {
+ }
+
+ public override ITableMetadata GetTableMetadata(DataRow rs, bool extras)
+ {
+ return new MySQLTableMetadata(rs, this, extras);
+ }
+
+ protected override string ForeignKeysSchemaName
+ {
+ get { return "Foreign Keys"; }
+ }
+ }
+
+ public class MySQLTableMetadata : AbstractTableMetadata
+ {
+ public MySQLTableMetadata(DataRow rs, IDataBaseSchema meta, bool extras) : base(rs, meta, extras)
+ {
+ }
+
+ 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"]);
+ }
+
+ protected override string GetConstraintName(DataRow rs)
+ {
+ return Convert.ToString(rs["CONSTRAINT_NAME"]);
+ }
+
+ protected override string GetColumnName(DataRow rs)
+ {
+ return Convert.ToString(rs["COLUMN_NAME"]);
+ }
+
+ protected override string GetIndexName(DataRow rs)
+ {
+ return Convert.ToString(rs["INDEX_NAME"]);
+ }
+
+ protected override IColumnMetadata GetColumnMetadata(DataRow rs)
+ {
+ return new MySQLColumnMetadata(rs);
+ }
+
+ protected override IForeignKeyMetadata GetForeignKeyMetadata(DataRow rs)
+ {
+ return new MySQLForeignKeyMetadata(rs);
+ }
+
+ protected override IIndexMetadata GetIndexMetadata(DataRow rs)
+ {
+ return new MySQLIndexMetadata(rs);
+ }
+ }
+
+ public class MySQLColumnMetadata : AbstractColumnMetaData
+ {
+ public MySQLColumnMetadata(DataRow rs)
+ : base(rs)
+ {
+ Name = Convert.ToString(rs["COLUMN_NAME"]);
+ object aValue;
+
+ aValue = rs["CHARACTER_MAXIMUM_LENGTH"];
+ if (aValue != DBNull.Value)
+ ColumnSize = Convert.ToInt32(aValue);
+
+ aValue = rs["NUMERIC_PRECISION"];
+ if (aValue != DBNull.Value)
+ NumericalPrecision = Convert.ToInt32(aValue);
+
+ Nullable = Convert.ToString(rs["IS_NULLABLE"]);
+ TypeName = Convert.ToString(rs["DATA_TYPE"]);
+ }
+ }
+
+ public class MySQLIndexMetadata : AbstractIndexMetadata
+ {
+ public MySQLIndexMetadata(DataRow rs)
+ : base(rs)
+ {
+ Name = Convert.ToString(rs["INDEX_NAME"]);
+ }
+ }
+
+ public class MySQLForeignKeyMetadata : AbstractForeignKeyMetadata
+ {
+ public MySQLForeignKeyMetadata(DataRow rs)
+ : base(rs)
+ {
+ Name = Convert.ToString(rs["CONSTRAINT_NAME"]);
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-05 13:06:45 UTC (rev 4117)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-06 11:54:11 UTC (rev 4118)
@@ -454,6 +454,7 @@
<Compile Include="Dialect\Oracle8iDialect.cs" />
<Compile Include="Dialect\Oracle9iDialect.cs" />
<Compile Include="Dialect\OracleLiteDialect.cs" />
+ <Compile Include="Dialect\Schema\MySQLMetaData.cs" />
<Compile Include="Dialect\Schema\SQLiteMetaData.cs" />
<Compile Include="Dialect\Schema\SybaseAnywhereMetaData.cs" />
<Compile Include="Dialect\SybaseASA10Dialect.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|