137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeaunamespace ComboStrap; 537748cd8SNickeau 637748cd8SNickeau 737748cd8SNickeauuse Antlr\Antlr4\Runtime\CommonTokenStream; 837748cd8SNickeauuse Antlr\Antlr4\Runtime\Error\Listeners\DiagnosticErrorListener; 937748cd8SNickeauuse Antlr\Antlr4\Runtime\InputStream; 1037748cd8SNickeauuse Antlr\Antlr4\Runtime\Tree\ParseTreeWalker; 1137748cd8SNickeauuse ComboStrap\PageSqlParser\PageSqlLexer; 1237748cd8SNickeauuse ComboStrap\PageSqlParser\PageSqlParser; 1337748cd8SNickeau 1437748cd8SNickeau 1537748cd8SNickeaurequire_once(__DIR__ . '/PluginUtility.php'); 1637748cd8SNickeau 1737748cd8SNickeauclass PageSql 1837748cd8SNickeau{ 191fa8c418SNickeau const CANONICAL = "sql"; 201fa8c418SNickeau 2137748cd8SNickeau private $sql; 2237748cd8SNickeau /** 2337748cd8SNickeau * @var PageSqlTreeListener 2437748cd8SNickeau */ 2537748cd8SNickeau private $listener; 2637748cd8SNickeau 2737748cd8SNickeau 2837748cd8SNickeau 2937748cd8SNickeau public function __construct($text) 3037748cd8SNickeau { 3137748cd8SNickeau $this->sql = $text; 3237748cd8SNickeau } 3337748cd8SNickeau 3437748cd8SNickeau public static function create(string $string): PageSql 3537748cd8SNickeau { 3637748cd8SNickeau $parser = new PageSql($string); 3737748cd8SNickeau $parser->parse(); 3837748cd8SNickeau return $parser; 3937748cd8SNickeau } 4037748cd8SNickeau 4137748cd8SNickeau function parse(): PageSql 4237748cd8SNickeau { 4337748cd8SNickeau $input = InputStream::fromString($this->sql); 4437748cd8SNickeau $lexer = new PageSqlLexer($input); 4537748cd8SNickeau $tokens = new CommonTokenStream($lexer); 4637748cd8SNickeau $parser = new PageSqlParser($tokens); 4737748cd8SNickeau $parser->addErrorListener(new DiagnosticErrorListener()); 4837748cd8SNickeau $parser->setBuildParseTree(true); 4937748cd8SNickeau $tree = $parser->pageSql(); 5037748cd8SNickeau 5137748cd8SNickeau /** 5237748cd8SNickeau * Performs a walk on the given parse tree starting at the root 5337748cd8SNickeau * and going down recursively with depth-first search. 5437748cd8SNickeau */ 551fa8c418SNickeau $this->listener = new PageSqlTreeListener($lexer, $parser,$this->sql); 5637748cd8SNickeau ParseTreeWalker::default()->walk($this->listener, $tree); 5737748cd8SNickeau return $this; 5837748cd8SNickeau } 5937748cd8SNickeau 6037748cd8SNickeau public function getExecutableSql(): string 6137748cd8SNickeau { 6237748cd8SNickeau return $this->listener->getPhysicalSql(); 6337748cd8SNickeau } 6437748cd8SNickeau 6537748cd8SNickeau public function getParameters(): array 6637748cd8SNickeau { 6737748cd8SNickeau return $this->listener->getParameters(); 6837748cd8SNickeau } 6937748cd8SNickeau 701fa8c418SNickeau public function getColumns(): array 7137748cd8SNickeau { 7237748cd8SNickeau return $this->listener->getColumns(); 7337748cd8SNickeau } 7437748cd8SNickeau 7537748cd8SNickeau public function __toString() 7637748cd8SNickeau { 7737748cd8SNickeau return $this->sql; 7837748cd8SNickeau } 7937748cd8SNickeau 80*4cadd4f8SNickeau public function getTable(): ?string 81*4cadd4f8SNickeau { 82*4cadd4f8SNickeau return $this->listener->getTable(); 83*4cadd4f8SNickeau } 84*4cadd4f8SNickeau 8537748cd8SNickeau} 86