From: <ste...@us...> - 2009-04-26 19:00:56
|
Revision: 4213 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4213&view=rev Author: steverstrong Date: 2009-04-26 19:00:45 +0000 (Sun, 26 Apr 2009) Log Message: ----------- Updated AST parser to handle test cases 1727 & 1742 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Parameters/ParameterTranslationsImpl.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs 2009-04-24 16:07:40 UTC (rev 4212) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs 2009-04-26 19:00:45 UTC (rev 4213) @@ -61,36 +61,7 @@ protected override void AdjustNamedParameterLocationsForQueryParameters(QueryParameters parameters) { - foreach (int existingParameterLocation in parameters.FilteredParameterLocations) - { - Dictionary<string, int> individualUpdates = new Dictionary<string, int>(); - - foreach (KeyValuePair<string, object> entry in _queryTranslator.NamedParameters) - { - if (entry.Value is int) - { - int namedParameterLocation = (int) entry.Value; - - if (namedParameterLocation == existingParameterLocation) - individualUpdates.Add(entry.Key, namedParameterLocation); - } - else - { - List<int> namedParameterLocations = (List<int>) entry.Value; - - for (int index = 0; index < namedParameterLocations.Count; index++) - { - if (namedParameterLocations[index] == existingParameterLocation) - namedParameterLocations[index]++; - } - } - } - - foreach (KeyValuePair<string, int> entry in individualUpdates) - { - _queryTranslator.NamedParameters[entry.Key] = entry.Value; - } - } + _queryTranslator.AdjustNamedParameterLocationsForQueryParameters(parameters); } protected override SqlString ApplyLocks(SqlString sql, IDictionary<string, LockMode> lockModes, Dialect.Dialect dialect) Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Parameters/ParameterTranslationsImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Parameters/ParameterTranslationsImpl.cs 2009-04-24 16:07:40 UTC (rev 4212) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Parameters/ParameterTranslationsImpl.cs 2009-04-26 19:00:45 UTC (rev 4213) @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using NHibernate.Engine; using NHibernate.Hql.Ast.ANTLR.Util; using NHibernate.Type; using NHibernate.Util; @@ -66,6 +67,23 @@ } } + public void AdjustNamedParameterLocationsForQueryParameters(QueryParameters parameters) + { + foreach (int existingParameterLocation in parameters.FilteredParameterLocations) + { + foreach (ParameterInfo entry in _namedParameters.Values) + { + for (int index = 0; index < entry.SqlLocations.Length; index++) + { + if (entry.SqlLocations[index] >= existingParameterLocation) + { + entry.SqlLocations[index]++; + } + } + } + } + } + public int GetOrdinalParameterSqlLocation(int ordinalPosition) { return GetOrdinalParameterInfo(ordinalPosition).SqlLocations[0]; Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-04-24 16:07:40 UTC (rev 4212) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2009-04-26 19:00:45 UTC (rev 4213) @@ -27,7 +27,7 @@ private IDictionary<string, IFilter> _enabledFilters; private readonly ISessionFactoryImplementor _factory; private QueryLoader _queryLoader; - private IParameterTranslations _paramTranslations; + private ParameterTranslationsImpl _paramTranslations; private HqlParseEngine _parser; private HqlSqlTranslator _translator; @@ -180,17 +180,13 @@ return _translator.SqlStatement.Walker.SelectClause.ColumnNames; } - public IDictionary<string, object> NamedParameters - { - get { return _translator.NamedParameters; } - } - public IParameterTranslations GetParameterTranslations() { if (_paramTranslations == null) { _paramTranslations = new ParameterTranslationsImpl(_translator.SqlStatement.Walker.Parameters); } + return _paramTranslations; } @@ -400,6 +396,11 @@ throw new QueryExecutionRequestException("Not supported for DML operations", _hql); } } + + public void AdjustNamedParameterLocationsForQueryParameters(QueryParameters parameters) + { + ((ParameterTranslationsImpl) GetParameterTranslations()).AdjustNamedParameterLocationsForQueryParameters(parameters); + } } public class HqlParseEngine @@ -524,7 +525,6 @@ private readonly QueryTranslatorImpl _qti; private readonly ISessionFactoryImplementor _sfi; private readonly IDictionary<string, string> _tokenReplacements; - private IDictionary<string, object> _namedParameters; private readonly string _collectionRole; private IStatement _resultAst; @@ -548,12 +548,7 @@ get { return _resultAst; } } - public IDictionary<string, object> NamedParameters - { - get { return _namedParameters; } - } - - public IStatement Translate() + public IStatement Translate() { if (_resultAst == null) { @@ -566,8 +561,6 @@ // Transform the tree. _resultAst = (IStatement) hqlSqlWalker.statement().Tree; - _namedParameters = hqlSqlWalker.NamedParameters; - /* if ( AST_LOG.isDebugEnabled() ) { ASTPrinter printer = new ASTPrinter( SqlTokenTypes.class ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |