Ejemplo n.º 1
0
        public IASTNode Parse()
        {
            // Parse the query string into an HQL AST.
            var lex = new HqlLexer(new CaseInsensitiveStringStream(_hql));

            _tokens = new CommonTokenStream(lex);

            var parser = new HqlParser(_tokens)
            {
                TreeAdaptor = new ASTTreeAdaptor(), Filter = _filter
            };

            if (log.IsDebugEnabled)
            {
                log.Debug("parse() - HQL: " + _hql);
            }

            try
            {
                var ast = (IASTNode)parser.statement().Tree;

                var walker = new NodeTraverser(new ConstantConverter(_sfi));
                walker.TraverseDepthFirst(ast);

                return(ast);
            }
            finally
            {
                parser.ParseErrorHandler.ThrowQueryException();
            }
        }
        private IList <IASTNode> LocateParameters()
        {
            var nodeTraverser = new NodeTraverser(this);

            nodeTraverser.TraverseDepthFirst(_tree);

            return(_nodes);
        }
Ejemplo n.º 3
0
        public IList <IASTNode> LocateQuerySources()
        {
            // Find all the polymorphic query sources
            var nodeTraverser = new NodeTraverser(this);

            nodeTraverser.TraverseDepthFirst(_tree);

            return(_nodes);
        }
Ejemplo n.º 4
0
        private void HandleWithFragment(FromElement fromElement, IASTNode hqlWithNode)
        {
            try
            {
                ITreeNodeStream old = input;
                input = new CommonTreeNodeStream(adaptor, hqlWithNode);

                IASTNode hqlSqlWithNode = (IASTNode)withClause().Tree;
                input = old;

                if (log.IsDebugEnabled())
                {
                    log.Debug("handleWithFragment() : {0}", _printer.ShowAsString(hqlSqlWithNode, "-- with clause --"));
                }
                WithClauseVisitor visitor   = new WithClauseVisitor(fromElement);
                NodeTraverser     traverser = new NodeTraverser(visitor);
                traverser.TraverseDepthFirst(hqlSqlWithNode);
                FromElement referencedFromElement = visitor.GetReferencedFromElement();
                if (referencedFromElement != fromElement)
                {
                    if (!referencedFromElement.IsEntityJoin() && !fromElement.IsEntityJoin())
                    {
                        throw new InvalidWithClauseException(
                                  "with-clause expressions did not reference from-clause element to which the with-clause was associated");
                    }
                }
                SqlGenerator sql = new SqlGenerator(_sessionFactoryHelper.Factory, new CommonTreeNodeStream(adaptor, hqlSqlWithNode.GetChild(0)));

                sql.whereExpr();

                var withClauseFragment = new SqlString("(", sql.GetSQL(), ")");
                fromElement.SetWithClauseFragment(visitor.GetJoinAlias(), withClauseFragment);
            }
            catch (SemanticException)
            {
                throw;
            }
            catch (InvalidWithClauseException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new SemanticException(e.Message, e);
            }
        }
Ejemplo n.º 5
0
        private void HandleWithFragment(FromElement fromElement, IASTNode hqlWithNode)
        {
            try
            {
                ITreeNodeStream old = input;
                input = new CommonTreeNodeStream(adaptor, hqlWithNode);

                IASTNode hqlSqlWithNode = (IASTNode)withClause().Tree;
                input = old;

                if (log.IsDebugEnabled())
                {
                    log.Debug("handleWithFragment() : {0}", _printer.ShowAsString(hqlSqlWithNode, "-- with clause --"));
                }
                WithClauseVisitor visitor   = new WithClauseVisitor(fromElement);
                NodeTraverser     traverser = new NodeTraverser(visitor);
                traverser.TraverseDepthFirst(hqlSqlWithNode);
                SqlGenerator sql = new SqlGenerator(_sessionFactoryHelper.Factory, new CommonTreeNodeStream(adaptor, hqlSqlWithNode.GetChild(0)));

                sql.whereExpr();

                fromElement.WithClauseFragment = new SqlString("(", sql.GetSQL(), ")");
            }
            catch (SemanticException)
            {
                throw;
            }
            catch (InvalidWithClauseException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new SemanticException(e.Message, e);
            }
        }