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

Reply via email to