|
From: <fab...@us...> - 2011-06-18 17:22:57
|
Revision: 5953
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5953&view=rev
Author: fabiomaulo
Date: 2011-06-18 17:22:51 +0000 (Sat, 18 Jun 2011)
Log Message:
-----------
Minor (reformatted)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Impl/ExpressionQueryImpl.cs
Modified: trunk/nhibernate/src/NHibernate/Impl/ExpressionQueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/ExpressionQueryImpl.cs 2011-06-18 17:19:38 UTC (rev 5952)
+++ trunk/nhibernate/src/NHibernate/Impl/ExpressionQueryImpl.cs 2011-06-18 17:22:51 UTC (rev 5953)
@@ -5,273 +5,277 @@
using System.Text;
using NHibernate.Engine;
using NHibernate.Engine.Query;
-using NHibernate.Engine.Query.Sql;
using NHibernate.Hql.Ast.ANTLR;
using NHibernate.Hql.Ast.ANTLR.Tree;
using NHibernate.Hql.Ast.ANTLR.Util;
-using NHibernate.Hql.Classic;
using NHibernate.Type;
using NHibernate.Util;
namespace NHibernate.Impl
{
- class ExpressionQueryImpl : AbstractQueryImpl
- {
- private readonly Dictionary<string, LockMode> _lockModes = new Dictionary<string, LockMode>(2);
+ internal class ExpressionQueryImpl : AbstractQueryImpl
+ {
+ private readonly Dictionary<string, LockMode> _lockModes = new Dictionary<string, LockMode>(2);
- public IQueryExpression QueryExpression { get; private set; }
+ public ExpressionQueryImpl(IQueryExpression queryExpression, ISessionImplementor session, ParameterMetadata parameterMetadata)
+ : base(queryExpression.Key, FlushMode.Unspecified, session, parameterMetadata)
+ {
+ QueryExpression = queryExpression;
+ }
- public ExpressionQueryImpl(IQueryExpression queryExpression, ISessionImplementor session, ParameterMetadata parameterMetadata)
- : base(queryExpression.Key, FlushMode.Unspecified, session, parameterMetadata)
- {
- QueryExpression = queryExpression;
- }
+ public IQueryExpression QueryExpression { get; private set; }
- public override IQuery SetLockMode(string alias, LockMode lockMode)
- {
- _lockModes[alias] = lockMode;
- return this;
- }
+ protected internal override IDictionary<string, LockMode> LockModes
+ {
+ get { return _lockModes; }
+ }
- protected internal override IDictionary<string, LockMode> LockModes
- {
- get { return _lockModes; }
- }
+ public override IQuery SetLockMode(string alias, LockMode lockMode)
+ {
+ _lockModes[alias] = lockMode;
+ return this;
+ }
- public override int ExecuteUpdate()
- {
- throw new NotImplementedException();
- }
+ public override int ExecuteUpdate()
+ {
+ throw new NotImplementedException();
+ }
- public override IEnumerable Enumerable()
- {
- throw new NotImplementedException();
- }
+ public override IEnumerable Enumerable()
+ {
+ throw new NotImplementedException();
+ }
- public override IEnumerable<T> Enumerable<T>()
- {
- throw new NotImplementedException();
- }
+ public override IEnumerable<T> Enumerable<T>()
+ {
+ throw new NotImplementedException();
+ }
- public override IList List()
- {
- VerifyParameters();
- IDictionary<string, TypedValue> namedParams = NamedParams;
- Before();
- try
- {
- return Session.List(ExpandParameters(namedParams), GetQueryParameters(namedParams));
- }
- finally
- {
- After();
- }
- }
+ public override IList List()
+ {
+ VerifyParameters();
+ IDictionary<string, TypedValue> namedParams = NamedParams;
+ Before();
+ try
+ {
+ return Session.List(ExpandParameters(namedParams), GetQueryParameters(namedParams));
+ }
+ finally
+ {
+ After();
+ }
+ }
- /// <summary>
- /// Warning: adds new parameters to the argument by side-effect, as well as mutating the query expression tree!
- /// </summary>
- protected IQueryExpression ExpandParameters(IDictionary<string, TypedValue> namedParamsCopy)
- {
+ /// <summary>
+ /// Warning: adds new parameters to the argument by side-effect, as well as mutating the query expression tree!
+ /// </summary>
+ protected IQueryExpression ExpandParameters(IDictionary<string, TypedValue> namedParamsCopy)
+ {
if (namedParameterLists.Count == 0)
{
// Short circuit straight out
return QueryExpression;
}
-
+
// Build a map from single parameters to lists
var map = new Dictionary<string, List<string>>();
- foreach (var me in namedParameterLists)
+ foreach (var me in namedParameterLists)
{
string name = me.Key;
- var vals = (ICollection) me.Value.Value;
- var type = me.Value.Type;
-
+ var vals = (ICollection) me.Value.Value;
+ IType type = me.Value.Type;
+
if (vals.Count == 1)
{
// No expansion needed here
- var iter = vals.GetEnumerator();
+ IEnumerator iter = vals.GetEnumerator();
iter.MoveNext();
- namedParamsCopy[name] = new TypedValue(type, iter.Current, Session.EntityMode);
+ namedParamsCopy[name] = new TypedValue(type, iter.Current, Session.EntityMode);
continue;
}
-
+
var aliases = new List<string>();
- var i = 0;
- var isJpaPositionalParam = parameterMetadata.GetNamedParameterDescriptor(name).JpaStyle;
+ int i = 0;
+ bool isJpaPositionalParam = parameterMetadata.GetNamedParameterDescriptor(name).JpaStyle;
- foreach (var obj in vals)
- {
- var alias = (isJpaPositionalParam ? 'x' + name : name + StringHelper.Underscore) + i++ + StringHelper.Underscore;
- namedParamsCopy[alias] = new TypedValue(type, obj, Session.EntityMode);
+ foreach (object obj in vals)
+ {
+ string alias = (isJpaPositionalParam ? 'x' + name : name + StringHelper.Underscore) + i++ + StringHelper.Underscore;
+ namedParamsCopy[alias] = new TypedValue(type, obj, Session.EntityMode);
aliases.Add(alias);
- }
-
+ }
+
map.Add(name, aliases);
-
}
- var newTree = ParameterExpander.Expand(QueryExpression.Translate(Session.Factory), map);
- var key = new StringBuilder(QueryExpression.Key);
+ IASTNode newTree = ParameterExpander.Expand(QueryExpression.Translate(Session.Factory), map);
+ var key = new StringBuilder(QueryExpression.Key);
- map.Aggregate(key, (sb, kvp) =>
- {
- sb.Append(' ');
- sb.Append(kvp.Key);
- sb.Append(':');
- kvp.Value.Aggregate(sb, (sb2, str) => sb2.Append(str));
- return sb;
- });
+ map.Aggregate(key, (sb, kvp) =>
+ {
+ sb.Append(' ');
+ sb.Append(kvp.Key);
+ sb.Append(':');
+ kvp.Value.Aggregate(sb, (sb2, str) => sb2.Append(str));
+ return sb;
+ });
- return new ExpandedQueryExpression(QueryExpression, newTree, key.ToString());
- }
+ return new ExpandedQueryExpression(QueryExpression, newTree, key.ToString());
+ }
- public override void List(IList results)
- {
- throw new NotImplementedException();
- }
+ public override void List(IList results)
+ {
+ throw new NotImplementedException();
+ }
- public override IList<T> List<T>()
- {
- throw new NotImplementedException();
- }
- }
+ public override IList<T> List<T>()
+ {
+ throw new NotImplementedException();
+ }
+ }
- internal class ExpandedQueryExpression : IQueryExpression
- {
- private readonly IASTNode _tree;
+ internal class ExpandedQueryExpression : IQueryExpression
+ {
+ private readonly IASTNode _tree;
- public ExpandedQueryExpression(IQueryExpression queryExpression, IASTNode tree, string key)
- {
- _tree = tree;
- Key = key;
- Type = queryExpression.Type;
- ParameterDescriptors = queryExpression.ParameterDescriptors;
- }
+ public ExpandedQueryExpression(IQueryExpression queryExpression, IASTNode tree, string key)
+ {
+ _tree = tree;
+ Key = key;
+ Type = queryExpression.Type;
+ ParameterDescriptors = queryExpression.ParameterDescriptors;
+ }
- public IASTNode Translate(ISessionFactoryImplementor sessionFactory)
- {
- return _tree;
- }
+ #region IQueryExpression Members
- public string Key { get; private set; }
+ public IASTNode Translate(ISessionFactoryImplementor sessionFactory)
+ {
+ return _tree;
+ }
- public System.Type Type { get; private set; }
+ public string Key { get; private set; }
- public IList<NamedParameterDescriptor> ParameterDescriptors { get; private set; }
- }
+ public System.Type Type { get; private set; }
- internal class ParameterExpander
+ public IList<NamedParameterDescriptor> ParameterDescriptors { get; private set; }
+
+ #endregion
+ }
+
+ internal class ParameterExpander
{
- private readonly IASTNode _tree;
- private readonly Dictionary<string, List<string>> _map;
+ private readonly Dictionary<string, List<string>> _map;
+ private readonly IASTNode _tree;
- private ParameterExpander(IASTNode tree, Dictionary<string, List<string>> map)
- {
- _tree = tree;
- _map = map;
- }
+ private ParameterExpander(IASTNode tree, Dictionary<string, List<string>> map)
+ {
+ _tree = tree;
+ _map = map;
+ }
- public static IASTNode Expand(IASTNode tree, Dictionary<string, List<string>> map)
- {
- var expander = new ParameterExpander(tree, map);
+ public static IASTNode Expand(IASTNode tree, Dictionary<string, List<string>> map)
+ {
+ var expander = new ParameterExpander(tree, map);
- return expander.Expand();
- }
+ return expander.Expand();
+ }
- private IASTNode Expand()
- {
- var parameters = ParameterDetector.LocateParameters(_tree, new HashSet<string>(_map.Keys));
- var nodeMapping = new Dictionary<IASTNode, IEnumerable<IASTNode>>();
+ private IASTNode Expand()
+ {
+ IList<IASTNode> parameters = ParameterDetector.LocateParameters(_tree, new HashSet<string>(_map.Keys));
+ var nodeMapping = new Dictionary<IASTNode, IEnumerable<IASTNode>>();
- foreach (var param in parameters)
- {
- var paramName = param.GetChild(0);
- var aliases = _map[paramName.Text];
- var astAliases = new List<IASTNode>();
+ foreach (IASTNode param in parameters)
+ {
+ IASTNode paramName = param.GetChild(0);
+ List<string> aliases = _map[paramName.Text];
+ var astAliases = new List<IASTNode>();
- foreach (var alias in aliases)
- {
- var astAlias = param.DupNode();
- var astAliasName = paramName.DupNode();
- astAliasName.Text = alias;
- astAlias.AddChild(astAliasName);
+ foreach (string alias in aliases)
+ {
+ IASTNode astAlias = param.DupNode();
+ IASTNode astAliasName = paramName.DupNode();
+ astAliasName.Text = alias;
+ astAlias.AddChild(astAliasName);
- astAliases.Add(astAlias);
- }
+ astAliases.Add(astAlias);
+ }
- nodeMapping.Add(param, astAliases);
- }
+ nodeMapping.Add(param, astAliases);
+ }
- return DuplicateTree(_tree, nodeMapping);
- }
+ return DuplicateTree(_tree, nodeMapping);
+ }
- private static IASTNode DuplicateTree(IASTNode ast, IDictionary<IASTNode, IEnumerable<IASTNode>> nodeMapping)
- {
- var thisNode = ast.DupNode();
+ private static IASTNode DuplicateTree(IASTNode ast, IDictionary<IASTNode, IEnumerable<IASTNode>> nodeMapping)
+ {
+ IASTNode thisNode = ast.DupNode();
- foreach (var child in ast)
- {
- IEnumerable<IASTNode> candidate;
+ foreach (IASTNode child in ast)
+ {
+ IEnumerable<IASTNode> candidate;
- if (nodeMapping.TryGetValue(child, out candidate))
- {
- foreach (var replacement in candidate)
- {
- thisNode.AddChild(replacement);
- }
- }
- else
- {
- thisNode.AddChild(DuplicateTree(child, nodeMapping));
- }
- }
+ if (nodeMapping.TryGetValue(child, out candidate))
+ {
+ foreach (IASTNode replacement in candidate)
+ {
+ thisNode.AddChild(replacement);
+ }
+ }
+ else
+ {
+ thisNode.AddChild(DuplicateTree(child, nodeMapping));
+ }
+ }
- return thisNode;
- }
- }
+ return thisNode;
+ }
+ }
- internal class ParameterDetector : IVisitationStrategy
- {
- private readonly IASTNode _tree;
- private readonly HashSet<string> _parameterNames;
- private readonly List<IASTNode> _nodes;
+ internal class ParameterDetector : IVisitationStrategy
+ {
+ private readonly List<IASTNode> _nodes;
+ private readonly HashSet<string> _parameterNames;
+ private readonly IASTNode _tree;
- private ParameterDetector(IASTNode tree, HashSet<string> parameterNames)
- {
- _tree = tree;
- _parameterNames = parameterNames;
- _nodes = new List<IASTNode>();
- }
+ private ParameterDetector(IASTNode tree, HashSet<string> parameterNames)
+ {
+ _tree = tree;
+ _parameterNames = parameterNames;
+ _nodes = new List<IASTNode>();
+ }
- public static IList<IASTNode> LocateParameters(IASTNode tree, HashSet<string> parameterNames)
- {
- var detector = new ParameterDetector(tree, parameterNames);
+ #region IVisitationStrategy Members
- return detector.LocateParameters();
- }
+ public void Visit(IASTNode node)
+ {
+ if ((node.Type == HqlSqlWalker.PARAM) || (node.Type == HqlSqlWalker.COLON))
+ {
+ string name = node.GetChild(0).Text;
- private IList<IASTNode> LocateParameters()
- {
- var nodeTraverser = new NodeTraverser(this);
- nodeTraverser.TraverseDepthFirst(_tree);
+ if (_parameterNames.Contains(name))
+ {
+ _nodes.Add(node);
+ }
+ }
+ }
- return _nodes;
- }
+ #endregion
- public void Visit(IASTNode node)
- {
- if ((node.Type == HqlSqlWalker.PARAM) || (node.Type == HqlSqlWalker.COLON))
- {
- var name = node.GetChild(0).Text;
+ public static IList<IASTNode> LocateParameters(IASTNode tree, HashSet<string> parameterNames)
+ {
+ var detector = new ParameterDetector(tree, parameterNames);
- if (_parameterNames.Contains(name))
- {
- _nodes.Add(node);
- }
- }
- }
+ return detector.LocateParameters();
+ }
- }
+ private IList<IASTNode> LocateParameters()
+ {
+ var nodeTraverser = new NodeTraverser(this);
+ nodeTraverser.TraverseDepthFirst(_tree);
+
+ return _nodes;
+ }
+ }
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|