From: <fab...@us...> - 2008-11-08 16:09:57
|
Revision: 3899 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3899&view=rev Author: fabiomaulo Date: 2008-11-08 16:09:54 +0000 (Sat, 08 Nov 2008) Log Message: ----------- Fix NH-1562 (schema update for SQLite by Mark Junker) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Dialect/Schema/SQLiteMetaData.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs 2008-11-08 15:58:07 UTC (rev 3898) +++ trunk/nhibernate/src/NHibernate/Dialect/SQLiteDialect.cs 2008-11-08 16:09:54 UTC (rev 3899) @@ -2,6 +2,7 @@ using System.Text; using NHibernate.SqlCommand; using NHibernate.Util; +using System.Data.Common; namespace NHibernate.Dialect { @@ -34,6 +35,7 @@ RegisterColumnType(DbType.Double, "NUMERIC"); RegisterColumnType(DbType.Single, "NUMERIC"); RegisterColumnType(DbType.VarNumeric, "NUMERIC"); + RegisterColumnType(DbType.AnsiString, "TEXT"); RegisterColumnType(DbType.String, "TEXT"); RegisterColumnType(DbType.AnsiStringFixedLength, "TEXT"); RegisterColumnType(DbType.StringFixedLength, "TEXT"); @@ -44,6 +46,19 @@ RegisterColumnType(DbType.Guid, "UNIQUEIDENTIFIER"); } + public override Schema.IDataBaseSchema GetDataBaseSchema(DbConnection connection) + { + return new Schema.SQLiteDataBaseMetaData(connection); + } + + public override string AddColumnString + { + get + { + return "add column"; + } + } + public override string IdentitySelectString { get { return "select last_insert_rowid()"; } Added: trunk/nhibernate/src/NHibernate/Dialect/Schema/SQLiteMetaData.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Schema/SQLiteMetaData.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Dialect/Schema/SQLiteMetaData.cs 2008-11-08 16:09:54 UTC (rev 3899) @@ -0,0 +1,102 @@ +using System; +using System.Data; +using System.Data.Common; + +namespace NHibernate.Dialect.Schema +{ + public class SQLiteDataBaseMetaData : AbstractDataBaseSchema + { + public SQLiteDataBaseMetaData(DbConnection connection) : base(connection) {} + + public override ITableMetadata GetTableMetadata(DataRow rs, bool extras) + { + return new SQLiteTableMetaData(rs, this, extras); + } + } + + public class SQLiteTableMetaData : AbstractTableMetadata + { + public SQLiteTableMetaData(DataRow rs, IDataBaseSchema meta, bool extras) : base(rs, meta, extras) {} + + protected override IColumnMetadata GetColumnMetadata(DataRow rs) + { + return new SQLiteColumnMetaData(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 SQLiteForeignKeyMetaData(rs); + } + + protected override IIndexMetadata GetIndexMetadata(DataRow rs) + { + return new SQLiteIndexMetaData(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 SQLiteColumnMetaData : AbstractColumnMetaData + { + public SQLiteColumnMetaData(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 SQLiteIndexMetaData : AbstractIndexMetadata + { + public SQLiteIndexMetaData(DataRow rs) : base(rs) + { + Name = Convert.ToString(rs["INDEX_NAME"]); + } + } + + public class SQLiteForeignKeyMetaData : AbstractForeignKeyMetadata + { + public SQLiteForeignKeyMetaData(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 2008-11-08 15:58:07 UTC (rev 3898) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2008-11-08 16:09:54 UTC (rev 3899) @@ -443,6 +443,7 @@ <Compile Include="Bytecode\HibernateByteCodeException.cs" /> <Compile Include="Bytecode\ProxyFactoryFactoryNotConfiguredException.cs" /> <Compile Include="Bytecode\UnableToLoadProxyFactoryFactoryException.cs" /> + <Compile Include="Dialect\Schema\SQLiteMetaData.cs" /> <Compile Include="Id\SelectGenerator.cs" /> <Compile Include="Properties\BackFieldStrategy.cs" /> <Compile Include="Bytecode\CodeDom\BytecodeProviderImpl.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |