private IQsiTreeNode ParseInternal(QsiScript script, Parser parser) { var primarSqlParser = (global::PrimarSql.Internal.PrimarSqlParser)parser; var rootContext = primarSqlParser.root(); if (rootContext.children[0] is not SqlStatementContext sqlStatement) { return(null); } if (sqlStatement.children[0] is not DmlStatementContext dmlStatement) { return(null); } switch (dmlStatement.children[0]) { case SelectStatementContext selectStatement: return(TableVisitor.VisitSelectStatement(selectStatement)); case InsertStatementContext insertStatement: return(ActionVisitor.VisitInsertStatement(insertStatement)); case DeleteStatementContext deleteStatement: return(ActionVisitor.VisitDeleteStatement(deleteStatement)); case UpdateStatementContext updateStatement: return(ActionVisitor.VisitUpdateStatement(updateStatement)); default: return(null); } }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var stream = new AntlrInputStream(script.Script); var lexer = new CqlLexerInternal(stream); var tokens = new CommonTokenStream(lexer); var parser = new CqlParserInternal(tokens); parser.AddErrorListener(new ErrorListener()); var statement = parser.cqlStatement().children[0]; switch (statement) { case SelectStatementContext selectStatement: return(TableVisitor.VisitSelectStatement(selectStatement)); case CreateMaterializedViewStatementContext createMaterializedViewStatement: return(DefinitionVisitor.VisitCreateMaterializedViewStatement(createMaterializedViewStatement)); case UseStatementContext useStatement: return(ActionVisitor.VisitUseStatement(useStatement)); case InsertStatementContext insertStatement: return(ActionVisitor.VisitInsertStatement(insertStatement)); case UpdateStatementContext updateStatement: return(ActionVisitor.VisitUpdateStatement(updateStatement)); case DeleteStatementContext deleteStatement: return(ActionVisitor.VisitDeleteStatement(deleteStatement)); default: throw TreeHelper.NotSupportedTree(statement); } }
IQsiTreeNode IQsiTreeParser.Parse(QsiScript script, CancellationToken cancellationToken) { var parser = CreateParser(script); parser.AddErrorListener(_parserErrorHandler); return(Parse(script, parser)); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var stream = new AntlrInputStream(script.Script); var lexer = new HanaLexerInternal(stream); var tokens = new CommonTokenStream(lexer); var parser = new HanaParserInternal(tokens); parser.AddErrorListener(new ErrorListener()); var statement = parser.hanaStatement(); switch (statement.children[0]) { case DataManipulationStatementContext dataManipulationStatement: return(ParseDataManipulationStatement(dataManipulationStatement)); case DataDefinitionStatementContext dataDefinitionStatement: return(ParseDataDefinitionStatementStatement(dataDefinitionStatement)); case SessionManagementStatementContext sessionManagementStatement: return(ParseSessionManagementStatement(sessionManagementStatement)); default: throw TreeHelper.NotSupportedTree(statement.children[0]); } }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var parser = MySQLUtility.CreateParser(script.Script, _version); var query = parser.query(); if (query.children[0] is not SimpleStatementContext simpleStatement) { return(null); } switch (simpleStatement.children[0]) { case SelectStatementContext selectStatement: return(TableVisitor.VisitSelectStatement(selectStatement)); case CreateStatementContext createStatement when createStatement.children[1] is CreateViewContext createView: return(TableVisitor.VisitCreateView(createView)); case DeleteStatementContext deleteStatement: return(ActionVisitor.VisitDeleteStatement(deleteStatement)); case ReplaceStatementContext replaceStatement: return(ActionVisitor.VisitReplaceStatement(replaceStatement)); case UpdateStatementContext updateStatement: return(ActionVisitor.VisitUpdateStatement(updateStatement)); case InsertStatementContext insertStatement: return(ActionVisitor.VisitInsertStatement(insertStatement)); default: throw TreeHelper.NotSupportedTree(simpleStatement.children[0]); } }
protected override Parser CreateParser(QsiScript script) { var stream = new AntlrUpperInputStream(script.Script); var lexer = new PrimarSqlLexer(stream); var tokens = new CommonTokenStream(lexer); return(new global::PrimarSql.Internal.PrimarSqlParser(tokens)); }
string IQsiTreeDeparser.Deparse(IQsiTreeNode node, QsiScript script) { var writer = new ScriptWriter(); DeparseTreeNode(writer, node, script); return(writer.ToString()); }
public AnalyzerContext(QsiEngine engine, QsiScript script, IQsiTreeNode tree, QsiAnalyzerOptions options, CancellationToken cancellationToken) { Engine = engine; Script = script; Tree = tree; Options = options ?? throw new ArgumentNullException(nameof(options)); CancellationToken = cancellationToken; }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var statement = CCJSqlParserUtility.Parse(script.Script); var visitorSet = new VisitorSetImpl(); visitorSet.TableVisitor = CreateTableVisitor(visitorSet); visitorSet.ExpressionVisitor = CreateExpressionVisitor(visitorSet); visitorSet.IdentifierVisitor = CreateIdentifierVisitor(visitorSet); return(visitorSet.TableVisitor.Visit(statement) ?? throw new QsiException(QsiError.NotSupportedScript, script.ScriptType)); }
public ValueTask <IQsiAnalysisResult> Execute( QsiScript script, IQsiTreeNode tree, QsiAnalyzerOptions options, CancellationToken cancellationToken = default) { if (!CanExecute(script, tree)) { throw new QsiException(QsiError.NotSupportedScript, script.ScriptType); } return(OnExecute(new AnalyzerContext(_engine, script, tree, options, cancellationToken))); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { _pgParser ??= new PgQuery10(); var pgTree = (IPg10Node)_pgParser.Parse(script.Script) ?? throw new QsiException(QsiError.NotSupportedScript, script.ScriptType); switch (script.ScriptType) { case QsiScriptType.Set: return(ActionVisitor.Visit(pgTree)); default: return(TableVisitor.Visit(pgTree)); } }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { _pgParser ??= new PgQuery10(); var pgTree = (IPg10Node)_pgParser.Parse(script.Script) ?? throw new QsiException(QsiError.NotSupportedScript, script.ScriptType); var pgVisitorSet = _pgParser.CreateVisitorSet(); switch (pgTree) { case RawStmt rawStmt: return(ParseRawStmt(pgVisitorSet, rawStmt)); default: throw TreeHelper.NotSupportedTree(pgTree); } }
public ValueTask <IQsiAnalysisResult[]> Explain(QsiScript script, CancellationToken cancellationToken = default) { var parameters = new[] { new QsiParameter(QsiParameterType.Name, string.Empty, QsiDataValue.Explain) }; if (IsExplainEngine) { return(Execute(script, parameters, cancellationToken)); } var explainLanguageService = new ExplainLanguageService(LanguageService); var explainEngine = new QsiEngine(explainLanguageService); explainLanguageService.ExplainEngine = explainEngine; return(explainEngine.Execute(script, parameters, cancellationToken)); }
public async ValueTask <IQsiAnalysisResult> Execute(QsiScript script, CancellationToken cancellationToken = default) { var tree = TreeParser.Parse(script, cancellationToken); var options = LanguageService.CreateAnalyzerOptions(); var analyzer = _analyzers.Value.FirstOrDefault(a => a.CanExecute(script, tree)); if (analyzer == null) { if (script.ScriptType == QsiScriptType.Comment || script.ScriptType == QsiScriptType.Delimiter) { return(new EmptyAnalysisResult()); } throw new QsiException(QsiError.NotSupportedScript, script.ScriptType); } return(await analyzer.Execute(script, tree, options, cancellationToken)); }
public async Task <QsiDataTable> GetDataTable(QsiScript script, QsiParameter[] parameters, CancellationToken cancellationToken) { IQsiAnalysisResult[] results = await _engine.Explain(script, cancellationToken); if (results.Length != 1 || results[0] is not QsiTableResult tableResult) { throw new QsiException(QsiError.InvalidNestedExplain, script.Script); } var dataTable = new QsiDataTable(tableResult.Table); var dataRow = dataTable.Rows.NewRow(); for (int i = 0; i < dataRow.Length; i++) { dataRow.Items[i] = QsiDataValue.Explain; } return(dataTable); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var result = _parser.Parse(script.Script); if (result is TSqlScript sqlScript) { var batch = sqlScript.Batches.FirstOrDefault(); var statement = batch?.Statements?.FirstOrDefault() ?? throw new QsiException(QsiError.Syntax); switch (statement) { case UseStatement useStatement: return(_actionVisitor.VisitUseStatement(useStatement)); case InsertStatement insertStatement: return(_actionVisitor.VisitInsertStatement(insertStatement)); case DeleteStatement deleteStatement: return(_actionVisitor.VisitDeleteStatement(deleteStatement)); case UpdateStatement updateStatement: return(_actionVisitor.VisitUpdateStatement(updateStatement)); case MergeStatement mergeStatement: return(_actionVisitor.VisitMergeStatement(mergeStatement)); case AlterUserStatement alterUserStatement: return(_actionVisitor.VisitAlterUser(alterUserStatement)); case ViewStatementBody viewStatementBody: return(_definitionVisitor.VisitViewStatementBody(viewStatementBody)); default: return(_tableVisitor.Visit(statement)); } } throw new InvalidOperationException(); }
public async ValueTask <IQsiAnalysisResult[]> Execute( QsiScript script, QsiParameter[] parameters, IQsiTreeNode tree, QsiAnalyzerOptions options, CancellationToken cancellationToken = default) { IQsiAnalysisResult[] results = await _analyzer.Execute(script, parameters, tree, options, cancellationToken); for (int i = 0; i < results.Length; i++) { var result = results[i]; if (result is QsiDataManipulationResult dmResult) { results[i] = ConvertToExplain(dmResult); } } return(results); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var result = _parser.Parse(script.Script); if (result is TSqlScript sqlScript) { var batch = sqlScript.Batches.FirstOrDefault(); var statement = batch?.Statements?.FirstOrDefault() ?? throw new QsiException(QsiError.Syntax); switch (statement) { case UseStatement useStatement: return(_actionVisitor.VisitUseStatement(useStatement)); default: return(_tableVisitor.Visit(statement)); } } throw new InvalidOperationException(); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var parser = ImpalaUtility.CreateParserInternal( script.Script, Dialect ); var stmt = parser.root().stmt(); switch (stmt.children[0]) { case Query_stmtContext queryStmt: return(TableVisitor.VisitQueryStmt(queryStmt)); case Create_view_stmtContext createViewStmt: return(ActionVisitor.VisitCreateViewStmt(createViewStmt)); case Create_tbl_as_select_stmtContext createTblAsSelectStmt: return(ActionVisitor.VisitCreateTblAsSelectStmt(createTblAsSelectStmt)); case Use_stmtContext useStmt: return(ActionVisitor.VisitUseStmt(useStmt)); case Upsert_stmtContext upsertStmt: return(ActionVisitor.VisitUpsertStmt(upsertStmt)); case Update_stmtContext updateStmt: return(ActionVisitor.VisitUpdateStmt(updateStmt)); case Insert_stmtContext insertStmt: return(ActionVisitor.VisitInsertStmt(insertStmt)); case Delete_stmtContext deleteStmt: return(ActionVisitor.VisitDeleteStmt(deleteStmt)); default: throw TreeHelper.NotSupportedTree(stmt.children[0]); } }
private IQsiTreeNode ParseInternal(QsiScript script, Parser parser) { var primarSqlParser = (global::PrimarSql.Internal.PrimarSqlParser)parser; switch (script.ScriptType) { case QsiScriptType.Select: return(TableVisitor.VisitSelectStatement(primarSqlParser.selectStatement())); case QsiScriptType.Insert: return(ActionVisitor.VisitInsertStatement(primarSqlParser.insertStatement())); case QsiScriptType.Delete: return(ActionVisitor.VisitDeleteStatement(primarSqlParser.deleteStatement())); case QsiScriptType.Update: return(ActionVisitor.VisitUpdateStatement(primarSqlParser.updateStatement())); default: return(null); } }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { var result = PhoenixSqlParserInternal.Parse(script.Script); switch (result) { case SelectStatement selectStatement: return(TableVisitor.VisitSelectStatement(selectStatement)); case CreateTableStatement { TableType: PTableType.View } createTableStatement: return(TableVisitor.VisitCreateViewStatement(createTableStatement)); case IDMLStatement dmlStatement: return(ActionVisitor.Visit(dmlStatement)); case UseSchemaStatement useSchemaStatement: return(ActionVisitor.VisitUseSchemaStatement(useSchemaStatement)); } throw TreeHelper.NotSupportedTree(result); }
protected override void DeparseDerivedTableNode(ScriptWriter writer, IQsiDerivedTableNode node, QsiScript script) { base.DeparseDerivedTableNode(writer, node, script); if (node is not MySqlDerivedTableNode mysqlNode) { return; } if (!mysqlNode.ProcedureAnalyse.IsEmpty) { var procedureAnalyse = mysqlNode.ProcedureAnalyse.Value; writer.WriteSpace(); writer.Write("PROCEDURE ANALYSE ("); writer.Write(procedureAnalyse.MaxElements); if (procedureAnalyse.MaxMemory.HasValue) { writer.Write(", "); writer.Write(procedureAnalyse.MaxMemory.Value); } writer.Write(')'); } if (mysqlNode.Lockings?.Count > 0) { writer.WriteSpace(); writer.WriteJoin(" ", mysqlNode.Lockings, DeparseLockingNode); } }
protected override Task <QsiDataTable> GetDataTable(QsiScript script) { throw new NotImplementedException(); }
private void DeparseHanaTableSerializeBehaviorNode(ScriptWriter writer, HanaTableSerializeBehaviorNode node, QsiScript script) { writer.Write("FOR ").Write(node.Type == HanaTableSerializeType.Json ? "JSON" : "XML"); if (node.Options.Count > 0) { writer.Write(" ("); writer.WriteJoin(", ", node.Options, (w, n) => { w.Write(IdentifierUtility.Escape(n.Key, EscapeQuotes.Single, EscapeBehavior.TwoTime)); w.Write('='); w.Write(IdentifierUtility.Escape(n.Value, EscapeQuotes.Single, EscapeBehavior.TwoTime)); }); writer.Write(')'); } if (!string.IsNullOrEmpty(node.ReturnType)) { writer.Write(" RETURNS ").Write(node.ReturnType); } }
protected override IQsiTreeNode Parse(QsiScript script, Parser parser) { return(ParseInternal(script, parser) ?? throw new QsiException(QsiError.NotSupportedScript, script.ScriptType)); }
protected override void DeparseTreeNode(ScriptWriter writer, IQsiTreeNode node, QsiScript script) { var range = MySqlTree.Span[node]; if (Equals(range, default(Range))) { base.DeparseTreeNode(writer, node, script); return; } writer.Write(script.Script[range]); }
public IQsiTreeNode Parse(QsiScript script, CancellationToken cancellationToken = default) { return(((IQsiTreeParser)this).Parse(script, cancellationToken)); }
public override bool CanExecute(QsiScript script, IQsiTreeNode tree) { return (tree is IQsiTableNode && (script.ScriptType == QsiScriptType.With || script.ScriptType == QsiScriptType.Select)); }
public bool CanExecute(QsiScript script, IQsiTreeNode tree) { return(_analyzer.CanExecute(script, tree)); }
protected override void DeparseTreeNode(ScriptWriter writer, IQsiTreeNode node, QsiScript script) { var rawNode = PTree.RawNode[node]; if (rawNode == null) { base.DeparseTreeNode(writer, node, script); return; } writer.Write(global::PhoenixSql.PhoenixSqlDeparser.Deparse(rawNode)); }