/** * Parses a query string. * * @return ParserResult */ public function parse() { $AST = $this->getAST(); if (($customWalkers = $this->_query->getHint(Query::HINT_CUSTOM_TREE_WALKERS)) !== false) { $this->_customTreeWalkers = $customWalkers; } if (($customOutputWalker = $this->_query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER)) !== false) { $this->_customOutputWalker = $customOutputWalker; } // Run any custom tree walkers over the AST if ($this->_customTreeWalkers) { $treeWalkerChain = new TreeWalkerChain($this->_query, $this->_parserResult, $this->_queryComponents); foreach ($this->_customTreeWalkers as $walker) { $treeWalkerChain->addTreeWalker($walker); } if ($AST instanceof AST\SelectStatement) { $treeWalkerChain->walkSelectStatement($AST); } else { if ($AST instanceof AST\UpdateStatement) { $treeWalkerChain->walkUpdateStatement($AST); } else { $treeWalkerChain->walkDeleteStatement($AST); } } } if ($this->_customOutputWalker) { $outputWalker = new $this->_customOutputWalker($this->_query, $this->_parserResult, $this->_queryComponents); } else { $outputWalker = new SqlWalker($this->_query, $this->_parserResult, $this->_queryComponents); } // Assign an SQL executor to the parser result $this->_parserResult->setSqlExecutor($outputWalker->getExecutor($AST)); return $this->_parserResult; }
/** * Parses a query string. * * @return ParserResult */ public function parse() { // Parse & build AST $AST = $this->QueryLanguage(); // Activate semantical checks after this point. Process all deferred checks in pipeline $this->_processDeferredExpressionsStack($AST); if ($customWalkers = $this->_query->getHint(Query::HINT_CUSTOM_TREE_WALKERS)) { $this->_customTreeWalkers = $customWalkers; } // Run any custom tree walkers over the AST if ($this->_customTreeWalkers) { $treeWalkerChain = new TreeWalkerChain($this->_query, $this->_parserResult, $this->_queryComponents); foreach ($this->_customTreeWalkers as $walker) { $treeWalkerChain->addTreeWalker($walker); } if ($AST instanceof AST\SelectStatement) { $treeWalkerChain->walkSelectStatement($AST); } else { if ($AST instanceof AST\UpdateStatement) { $treeWalkerChain->walkUpdateStatement($AST); } else { $treeWalkerChain->walkDeleteStatement($AST); } } } if ($this->_customOutputWalker) { $outputWalker = new $this->_customOutputWalker($this->_query, $this->_parserResult, $this->_queryComponents); } else { $outputWalker = new SqlWalker($this->_query, $this->_parserResult, $this->_queryComponents); } // Assign an SQL executor to the parser result $this->_parserResult->setSqlExecutor($outputWalker->getExecutor($AST)); return $this->_parserResult; }
/** * Parses a query string. * * @return ParserResult */ public function parse() { $AST = $this->getAST(); if (($customWalkers = $this->_query->getHint(Query::HINT_CUSTOM_TREE_WALKERS)) !== false) { $this->_customTreeWalkers = $customWalkers; } if (($customOutputWalker = $this->_query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER)) !== false) { $this->_customOutputWalker = $customOutputWalker; } // Run any custom tree walkers over the AST if ($this->_customTreeWalkers) { $treeWalkerChain = new TreeWalkerChain($this->_query, $this->_parserResult, $this->_queryComponents); foreach ($this->_customTreeWalkers as $walker) { $treeWalkerChain->addTreeWalker($walker); } if ($AST instanceof AST\SelectStatement) { $treeWalkerChain->walkSelectStatement($AST); } else if ($AST instanceof AST\UpdateStatement) { $treeWalkerChain->walkUpdateStatement($AST); } else { $treeWalkerChain->walkDeleteStatement($AST); } } // Fix order of identification variables. // They have to appear in the select clause in the same order as the // declarations (from ... x join ... y join ... z ...) appear in the query // as the hydration process relies on that order for proper operation. if ( count($this->_identVariableExpressions) > 1) { foreach ($this->_queryComponents as $dqlAlias => $qComp) { if (isset($this->_identVariableExpressions[$dqlAlias])) { $expr = $this->_identVariableExpressions[$dqlAlias]; $key = array_search($expr, $AST->selectClause->selectExpressions); unset($AST->selectClause->selectExpressions[$key]); $AST->selectClause->selectExpressions[] = $expr; } } } if ($this->_customOutputWalker) { $outputWalker = new $this->_customOutputWalker( $this->_query, $this->_parserResult, $this->_queryComponents ); } else { $outputWalker = new SqlWalker( $this->_query, $this->_parserResult, $this->_queryComponents ); } // Assign an SQL executor to the parser result $this->_parserResult->setSqlExecutor($outputWalker->getExecutor($AST)); return $this->_parserResult; }
/** * Parses a query string. * * @return ParserResult */ public function parse() { // Parse & build AST $AST = $this->_QueryLanguage(); // Check for end of string if ($this->_lexer->lookahead !== null) { //var_dump($this->_lexer->lookahead); $this->syntaxError('end of string'); } // Create SqlWalker who creates the SQL from the AST $sqlWalker = new SqlWalker($this->_query, $this->_parserResult, $this->_queryComponents); // Assign an SQL executor to the parser result $this->_parserResult->setSqlExecutor(Exec\AbstractExecutor::create($AST, $sqlWalker)); return $this->_parserResult; }