From: <ste...@us...> - 2009-05-13 09:17:48
|
Revision: 4288 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4288&view=rev Author: steverstrong Date: 2009-05-13 09:17:42 +0000 (Wed, 13 May 2009) Log Message: ----------- Removed some code smells form AST parser; specifically, improved the way it deals with SqlStrings internally, and removed a hack that was in place to support old HQL syntax. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/BooleanLiteralNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/JavaConstantNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ParameterNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlFragment.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlNode.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/WithClauseFixture.cs trunk/nhibernate/src/NHibernate.Test/Legacy/FooBarTest.cs trunk/nhibernate/src/NHibernate.Test/Legacy/MasterDetailTest.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -682,12 +682,13 @@ IASTNode CreateFromElement(string path, IASTNode pathNode, IASTNode alias, IASTNode propertyFetch) { - try + // try { FromElement fromElement = _currentFromClause.AddFromElement(path, alias); fromElement.SetAllPropertyFetch(propertyFetch != null); return fromElement; } + /* catch (Exception e) { // Try resolving as if it were a join @@ -703,7 +704,7 @@ { throw e; } - } + }*/ } private IASTNode PreProcessPathForJoin(IASTNode node) @@ -1111,7 +1112,6 @@ sql.whereExpr(); fromElement.SetWithClauseFragment(visitor.GetJoinAlias(), "(" + sql.GetSQL() + ")"); - } catch (SemanticException) { Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -227,7 +227,7 @@ public SqlString SqlString { - get { return SqlString.Parse(_generator.Sql.ToString()); } + get { return _generator.Sql; } } public string QueryIdentifier Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -356,7 +356,8 @@ private class FunctionArguments : ISqlWriter { - private readonly List<object> args = new List<object>(); + //private readonly List<object> args = new List<object>(); + private readonly List<SqlString> args = new List<SqlString>(); private int argInd; public IList Args @@ -368,6 +369,8 @@ public void Clause(string clause) { + Clause(SqlString.Parse(clause)); + /* if (argInd == args.Count) { args.Add(clause); @@ -376,16 +379,25 @@ { args[argInd] = args[argInd] + clause; } + */ } public void Clause(SqlString clause) { - Clause(clause.ToString()); + //Clause(clause.ToString()); + if (argInd == args.Count) + { + args.Add(clause); + } + else + { + args[argInd] = args[argInd].Append(clause); + } } public void Parameter() { - args.Add(SqlCommand.Parameter.Placeholder); + args.Add(new SqlString(SqlCommand.Parameter.Placeholder)); } public void CommaBetweenParameters(string comma) Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/BooleanLiteralNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/BooleanLiteralNode.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/BooleanLiteralNode.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -1,6 +1,7 @@ using System; using Antlr.Runtime; using NHibernate.Engine; +using NHibernate.SqlCommand; using NHibernate.Type; namespace NHibernate.Hql.Ast.ANTLR.Tree @@ -49,11 +50,11 @@ set { expectedType = value; } } - public override string RenderText(ISessionFactoryImplementor sessionFactory) + public override SqlString RenderText(ISessionFactoryImplementor sessionFactory) { try { - return GetTypeInternal().ObjectToSQLString( GetValue(), sessionFactory.Dialect ); + return new SqlString(GetTypeInternal().ObjectToSQLString( GetValue(), sessionFactory.Dialect )); } catch( Exception t ) { Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -7,6 +7,7 @@ using NHibernate.Param; using NHibernate.Persister.Collection; using NHibernate.Persister.Entity; +using NHibernate.SqlCommand; using NHibernate.Type; using NHibernate.Util; @@ -51,7 +52,7 @@ _isAllPropertyFetch = fetch; } - public void SetWithClauseFragment(String withClauseJoinAlias, String withClauseFragment) + public void SetWithClauseFragment(String withClauseJoinAlias, string withClauseFragment) { _withClauseJoinAlias = withClauseJoinAlias; _withClauseFragment = withClauseFragment; @@ -306,6 +307,11 @@ return _elementType.RenderPropertySelect(size, k, IsAllPropertyFetch); } + public override SqlString RenderText(NHibernate.Engine.ISessionFactoryImplementor sessionFactory) + { + return SqlString.Parse(Text); + } + public string RenderCollectionSelectFragment(int size, int k) { return _elementType.RenderCollectionSelectFragment(size, k); Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/JavaConstantNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/JavaConstantNode.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/JavaConstantNode.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -3,6 +3,7 @@ using Antlr.Runtime; using NHibernate.Engine; using NHibernate.Hql.Ast.ANTLR.Util; +using NHibernate.SqlCommand; using NHibernate.Type; using NHibernate.Util; @@ -38,12 +39,12 @@ set { _factory = value; } } - public override string RenderText(ISessionFactoryImplementor sessionFactory) + public override SqlString RenderText(ISessionFactoryImplementor sessionFactory) { ProcessText(); IType type = _expectedType ?? _heuristicType; - return ResolveToLiteralString( type ); + return new SqlString(ResolveToLiteralString( type )); } private string ResolveToLiteralString(IType type) Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ParameterNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ParameterNode.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/ParameterNode.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -3,6 +3,7 @@ using Antlr.Runtime; using NHibernate.Engine; using NHibernate.Param; +using NHibernate.SqlCommand; using NHibernate.Type; namespace NHibernate.Hql.Ast.ANTLR.Tree @@ -46,23 +47,25 @@ } } - public override string RenderText(ISessionFactoryImplementor sessionFactory) + public override SqlString RenderText(ISessionFactoryImplementor sessionFactory) { int count = 0; if (ExpectedType != null && (count = ExpectedType.GetColumnSpan(sessionFactory)) > 1) { - StringBuilder buffer = new StringBuilder(); - buffer.Append("(?"); + SqlStringBuilder buffer = new SqlStringBuilder(); + buffer.Add("("); + buffer.AddParameter(); for (int i = 1; i < count; i++) { - buffer.Append(", ?"); + buffer.Add(","); + buffer.AddParameter(); } - buffer.Append(")"); - return buffer.ToString(); + buffer.Add(")"); + return buffer.ToSqlString(); } else { - return "?"; + return new SqlString(Parameter.Placeholder); } } } Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlFragment.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlFragment.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlFragment.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -37,6 +37,11 @@ set { _fromElement = value; } } + public override SqlString RenderText(NHibernate.Engine.ISessionFactoryImplementor sessionFactory) + { + return SqlString.Parse(Text); + } + // ParameterContainer impl ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private List<IParameterSpecification> _embeddedParameters; Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlNode.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/SqlNode.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -1,6 +1,7 @@ using System; using Antlr.Runtime; using NHibernate.Engine; +using NHibernate.SqlCommand; using NHibernate.Type; namespace NHibernate.Hql.Ast.ANTLR.Tree @@ -48,13 +49,13 @@ /// </summary> /// <param name="sessionFactory">The session factory</param> /// <returns>The text to use for rendering</returns> - public virtual String RenderText(ISessionFactoryImplementor sessionFactory) + public virtual SqlString RenderText(ISessionFactoryImplementor sessionFactory) { // The basic implementation is to simply use the node's text - return Text; + return new SqlString(Text); } - public String getOriginalText() + public string getOriginalText() { return _originalText; } Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/WithClauseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/WithClauseFixture.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/WithClauseFixture.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -73,7 +73,7 @@ ITransaction txn = s.BeginTransaction(); // one-to-many - IList list = + IList list = s.CreateQuery("from Human h inner join h.offspring as o with o.bodyWeight < :someLimit").SetDouble("someLimit", 1). List(); Assert.That(list, Is.Empty, "ad-hoc on did not take effect"); Modified: trunk/nhibernate/src/NHibernate.Test/Legacy/FooBarTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Legacy/FooBarTest.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate.Test/Legacy/FooBarTest.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -2203,7 +2203,7 @@ s = OpenSession(); baz = (Baz) s.Load(typeof(Baz), baz.Code); Assert.AreEqual(1, baz.FooArray.Length); - Assert.AreEqual(1, s.CreateQuery("from Baz baz, baz.FooArray foo").List().Count); + Assert.AreEqual(1, s.CreateQuery("from Baz baz join baz.FooArray foo").List().Count); Assert.AreEqual(2, s.CreateQuery("from Foo foo").List().Count); Assert.AreEqual(1, s.CreateFilter(baz.FooArray, "").List().Count); @@ -2521,10 +2521,10 @@ if (!(Dialect is Oracle9Dialect) && !(Dialect is Oracle8iDialect)) { s.CreateQuery( - "select count(*) from Bar as bar, bar.Component.Glarch.ProxyArray as g where cast(g.id as Int32) in indices(bar.Baz.FooArray)"). + "select count(*) from Bar as bar join bar.Component.Glarch.ProxyArray as g where cast(g.id as Int32) in indices(bar.Baz.FooArray)"). List(); s.CreateQuery( - "select max( elements(bar.Baz.FooArray) ) from Bar as bar, bar.Component.Glarch.ProxyArray as g where cast(g.id as Int32) in indices(bar.Baz.FooArray)") + "select max( elements(bar.Baz.FooArray) ) from Bar as bar join bar.Component.Glarch.ProxyArray as g where cast(g.id as Int32) in indices(bar.Baz.FooArray)") .List(); s.CreateQuery( "select count(*) from Bar as bar left outer join bar.Component.Glarch.ProxyArray as pg where '1' in (from g in bar.Component.Glarch.ProxyArray)") @@ -2547,8 +2547,8 @@ s.CreateQuery( "select baz.Name from Bar bar join bar.Baz baz left outer join baz.FooSet foo where baz.Name = bar.String").List(); - s.CreateQuery("select baz.Name from Bar bar, bar.Baz baz, baz.FooSet foo where baz.Name = bar.String").List(); - s.CreateQuery("SELECT baz.Name FROM Bar AS bar, bar.Baz AS baz, baz.FooSet AS foo WHERE baz.Name = bar.String").List(); + s.CreateQuery("select baz.Name from Bar bar join bar.Baz baz join baz.FooSet foo where baz.Name = bar.String").List(); + s.CreateQuery("SELECT baz.Name FROM Bar AS bar join bar.Baz AS baz join baz.FooSet AS foo WHERE baz.Name = bar.String").List(); s.CreateQuery( "select baz.Name from Bar bar left join bar.Baz baz left join baz.FooSet foo where baz.Name = bar.String").List(); @@ -2565,10 +2565,10 @@ s.CreateQuery("select foo from bar in class Bar inner join bar.Baz.FooSet as foo").List(); s.CreateQuery( - "select bar.String, foo.String from bar in class Bar, bar.Baz as baz, elements(baz.FooSet) as foo where baz.Name = 'name'") + "select bar.String, foo.String from bar in class Bar join bar.Baz as baz, elements(baz.FooSet) as foo where baz.Name = 'name'") .List(); - s.CreateQuery("select foo from bar in class Bar, bar.Baz as baz, baz.FooSet as foo").List(); - s.CreateQuery("select foo from bar in class Bar, bar.Baz.FooSet as foo").List(); + s.CreateQuery("select foo from bar in class Bar join bar.Baz as baz join baz.FooSet as foo").List(); + s.CreateQuery("select foo from bar in class Bar join bar.Baz.FooSet as foo").List(); Assert.AreEqual(1, s.CreateQuery("from Bar bar join bar.Baz.FooArray foo").List().Count); Modified: trunk/nhibernate/src/NHibernate.Test/Legacy/MasterDetailTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Legacy/MasterDetailTest.cs 2009-05-13 06:36:41 UTC (rev 4287) +++ trunk/nhibernate/src/NHibernate.Test/Legacy/MasterDetailTest.cs 2009-05-13 09:17:42 UTC (rev 4288) @@ -374,9 +374,9 @@ s.CreateQuery("FROM m IN CLASS Master WHERE NOT 5 IN ( SELECT d.I FROM d IN " + path + " )").Enumerable(); } - s.CreateQuery("SELECT m FROM m in CLASS NHibernate.DomainModel.Master, d IN " + path + " WHERE d.I=5").Enumerable(); - s.CreateQuery("SELECT m FROM m in CLASS NHibernate.DomainModel.Master, d IN " + path + " WHERE d.I=5").List(); - s.CreateQuery("SELECT m.id FROM m IN CLASS NHibernate.DomainModel.Master, d IN " + path + " WHERE d.I=5").List(); + s.CreateQuery("SELECT m FROM m in CLASS NHibernate.DomainModel.Master join m.Details d WHERE d.I=5").Enumerable(); + s.CreateQuery("SELECT m FROM m in CLASS NHibernate.DomainModel.Master join m.Details d WHERE d.I=5").List(); + s.CreateQuery("SELECT m.id FROM m IN CLASS NHibernate.DomainModel.Master join m.Details d WHERE d.I=5").List(); t.Commit(); s.Close(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |