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. |