Just a follow up, NHibernate's SQLite Dialect does not (currently) correctly escape table names surrounded by backticks when the table schema is blank.
I filed a bug on the NH JIRA: http://jira.nhibernate.org/browse/NH-1520 -jt On Oct 8, 11:14 am, James Thigpen <[EMAIL PROTECTED]> wrote: > I typo'd on that last test run, the header should read: > ==== [ActiveRecord("[Group]")] ==== > > not ===== [ActiveRecord("Group")] ===== > > Sorry. > > -jt > > On Oct 8, 10:56 am, James Thigpen <[EMAIL PROTECTED]> wrote: > > > I wrote an overly ghetto test. > > > =========================================================================== > > > using System; > > using System.Collections; > > using System.Collections.Generic; > > using System.Linq; > > using System.Text; > > using Castle.ActiveRecord; > > using Castle.ActiveRecord.Framework.Config; > > using NUnit.Framework; > > using PropertyAttribute = Castle.ActiveRecord.PropertyAttribute; > > > namespace SqliteEscapeTest > > { > > [ActiveRecord("`Group`")] > > public class Group : ActiveRecordBase<Group> > > { > > [PrimaryKey] > > public int Id { get; set; } > > > [Property] > > public string Name { get; set; } > > } > > > //[ActiveRecord("Group")] > > //public class Group : ActiveRecordBase<Group> > > //{ > > // [PrimaryKey] > > // public int Id { get; set; } > > > // [Property] > > // public string Name { get; set; } > > //} > > > //[ActiveRecord("[Group]")] > > //public class Group : ActiveRecordBase<Group> > > //{ > > // [PrimaryKey] > > // public int Id { get; set; } > > > // [Property] > > // public string Name { get; set; } > > //} > > > [TestFixture] > > public class Test > > { > > [Test] > > public void DoesItEscapeSqliteCorrectly() > > { > > var properties = new Dictionary<string, string>(); > > > properties.Add("connection.driver_class", > > "NHibernate.Driver.SQLite20Driver"); > > properties.Add("dialect", > > "NHibernate.Dialect.SQLiteDialect"); > > properties.Add("connection.provider", > > "NHibernate.Connection.DriverConnectionProvider"); > > properties.Add("connection.connection_string", "Data > > Source=PurpleOps.sqlite;Version=3;New=True;"); > > > InPlaceConfigurationSource source = new > > InPlaceConfigurationSource(); > > > source.Add(typeof (ActiveRecordBase), properties); > > > ActiveRecordStarter.Initialize(source, typeof (Group)); > > ActiveRecordStarter.GenerateCreationScripts(@"C: > > \Test.sql"); > > ActiveRecordStarter.CreateSchema(); > > } > > > } > > > } > > > =========================================================================== > > > It has 3 Definitions of Group, and I run the test 3 times uncommenting > > one and commenting out the others. > > > ===== [ActiveRecord("`Group`")] ===== > > > Test.Sql Contents: > > > drop table if exists Group" > > create table Group" (Id integer, Name TEXT, primary key (Id)) > > > Test Run Result: > > System.Data.SQLite.SQLiteException: SQLite error > > unrecognized token: "" (Id integer, Name TEXT, primary key (Id))" > > at System.Data.SQLite.SQLite3.Prepare(String strSql, SQLiteStatement > > previous, ref String strRemain) > > at System.Data.SQLite.SQLiteCommand.BuildNextCommand() > > at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index) > > at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean format, Boolean throwOnError, TextWriter > > exportOutput, IDbCommand statement, String sql) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format, IDbConnection > > connection, TextWriter exportOutput) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format) > > NHibernate.HibernateException: SQLite error > > unrecognized token: "" (Id integer, Name TEXT, primary key (Id))" > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Create(Boolean script, Boolean > > export) > > at Castle.ActiveRecord.ActiveRecordStarter.CreateSchema() > > Castle.ActiveRecord.Framework.ActiveRecordException: Could not create > > the schema > > at Castle.ActiveRecord.ActiveRecordStarter.CreateSchema() > > at SqliteEscapeTest.Test.DoesItEscapeSqliteCorrectly() in Class1.cs: > > line 62 > > > ===== [ActiveRecord("Group")] ===== > > > Test.Sql Contents: > > > drop table if exists Group > > create table Group ( > > Id integer, > > Name TEXT, > > primary key (Id) > > ) > > > Test Run Result: Fail > > > System.Data.SQLite.SQLiteException: SQLite error > > near "Group": syntax error > > at System.Data.SQLite.SQLite3.Prepare(String strSql, SQLiteStatement > > previous, ref String strRemain) > > at System.Data.SQLite.SQLiteCommand.BuildNextCommand() > > at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index) > > at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean format, Boolean throwOnError, TextWriter > > exportOutput, IDbCommand statement, String sql) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format, IDbConnection > > connection, TextWriter exportOutput) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format) > > NHibernate.HibernateException: SQLite error > > near "Group": syntax error > > at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, > > Boolean export, Boolean justDrop, Boolean format) > > at NHibernate.Tool.hbm2ddl.SchemaExport.Create(Boolean script, Boolean > > export) > > at Castle.ActiveRecord.ActiveRecordStarter.CreateSchema() > > Castle.ActiveRecord.Framework.ActiveRecordException: Could not create > > the schema > > at Castle.ActiveRecord.ActiveRecordStarter.CreateSchema() > > at SqliteEscapeTest.Test.DoesItEscapeSqliteCorrectly() in Class1.cs: > > line 62 > > > ===== [ActiveRecord("Group")] ===== > > > Test.sql Contents: > > > drop table if exists [Group] > > create table [Group] ( > > Id integer, > > Name TEXT, > > primary key (Id) > > ) > > > Test Run Result: Success > > > Versions: > > This version is compiled against: > > Rhino-Tools - r1623 (Using the sqlite from the build of this, > > 1.0.35.1) > > Castle - r5299 > > NHibernate - r3737 > > > Is this a bug or do I misunderstand something? > > > -jt > > > On Oct 8, 10:09 am, "Ayende Rahien" <[EMAIL PROTECTED]> wrote: > > > > It most certainly should have done that. My experience says that it does, > > > mind you > > > > On Wed, Oct 8, 2008 at 6:57 PM, James Thigpen <[EMAIL PROTECTED]>wrote: > > > > > I've also run into a problem where an sqlite database didn't properly > > > > escape a table name that I had used backticks (`) around in my > > > > ActiveRecord attribute. (I think the table name was Group). > > > > > I was under the impression that NHibernate magicked the backticks into > > > > the appropriate database-specific quote character. Is that not > > > > correct? > > > > > -jt > > > > > On Oct 6, 2:39 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> > > > > wrote: > > > > > Thx for quick answer Ayende. > > > > > But in the end I was debugging nHibernate :) > > > > > > The problem was that I used reserved name for one of my table - > > > > > "Order". > > > > > And it seems that for SQLite, to escape such name you need to use > > > > > brackets. > > > > > So use "[Order]" not `Order`, like I did. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en -~----------~----~----~----~------~----~------~--~---
