public DdlStatementContext GetDdlStatementContext(string content, out SqlSyntaxError error) { error = null; RootContext rootContext = this.GetRootContext(content, out error); return(rootContext?.sqlStatements()?.sqlStatement()?.Select(item => item?.ddlStatement()).FirstOrDefault()); }
private SqlSyntaxError ParseSqlSyntaxError(SqlSyntaxError error, string definition) { foreach (SqlSyntaxErrorItem item in error.Items) { item.Text = definition.Substring(item.StartIndex, item.StopIndex - item.StartIndex + 1); } return(error); }
public RootContext GetRootContext(string content, out SqlSyntaxError error) { error = null; MySqlParser parser = this.GetParser(content) as MySqlParser; SqlSyntaxErrorListener errorListener = this.AddParserErrorListener(parser); RootContext context = parser.root(); error = errorListener.Error; return(context); }
public override AnalyseResult AnalyseView(string content) { SqlSyntaxError error = null; DdlStatementContext ddlStatement = this.GetDdlStatementContext(content, out error); AnalyseResult result = new AnalyseResult() { Error = error }; if (!result.HasError && ddlStatement != null) { ViewScript script = new ViewScript(); CreateViewContext view = ddlStatement.createView(); if (view != null) { #region Name this.SetScriptName(script, view.fullId()); #endregion #region Statement foreach (var child in view.children) { if (child is SimpleSelectContext select) { script.Statements.Add(this.ParseSelectStatement(select)); } } #endregion } this.ExtractFunctions(script, ddlStatement); result.Script = script; } return(result); }
public override void SyntaxError(TextWriter output, IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e) { if (this.Error == null) { this.Error = new SqlSyntaxError(); } if (offendingSymbol is CommonToken token) { SqlSyntaxErrorItem errorItem = new SqlSyntaxErrorItem(); errorItem.StartIndex = token.StartIndex; errorItem.StopIndex = token.StopIndex; errorItem.Line = token.Line; errorItem.Column = token.Column + 1; errorItem.Text = token.Text; this.Error.Items.Add(errorItem); } base.SyntaxError(output, recognizer, offendingSymbol, line, charPositionInLine, msg, e); }
public override AnalyseResult AnalyseProcedure(string content) { SqlSyntaxError error = null; DdlStatementContext ddlStatement = this.GetDdlStatementContext(content, out error); AnalyseResult result = new AnalyseResult() { Error = error }; if (!result.HasError && ddlStatement != null) { RoutineScript script = new RoutineScript() { Type = RoutineType.PROCEDURE }; CreateProcedureContext proc = ddlStatement.createProcedure(); if (proc != null) { #region Name this.SetScriptName(script, proc.fullId()); #endregion #region Parameters ProcedureParameterContext[] parameters = proc.procedureParameter(); if (parameters != null) { foreach (ProcedureParameterContext parameter in parameters) { Parameter parameterInfo = new Parameter(); UidContext uid = parameter.uid(); parameterInfo.Name = new TokenInfo(uid) { Type = TokenType.ParameterName }; parameterInfo.DataType = new TokenInfo(parameter.dataType().GetText()) { Type = TokenType.DataType }; this.SetParameterType(parameterInfo, parameter.children); script.Parameters.Add(parameterInfo); } } #endregion #region Body this.SetScriptBody(script, proc.routineBody()); #endregion } this.ExtractFunctions(script, ddlStatement); result.Script = script; } return(result); }
public override AnalyseResult AnalyseTrigger(string content) { SqlSyntaxError error = null; DdlStatementContext ddlStatement = this.GetDdlStatementContext(content, out error); AnalyseResult result = new AnalyseResult() { Error = error }; if (!result.HasError && ddlStatement != null) { TriggerScript script = new TriggerScript(); CreateTriggerContext trigger = ddlStatement.createTrigger(); if (trigger != null) { #region Name FullIdContext[] ids = trigger.fullId(); this.SetScriptName(script, ids.First()); if (ids.Length > 1) { script.OtherTriggerName = new TokenInfo(ids[1]); } #endregion script.TableName = new TokenInfo(trigger.tableName()) { Type = TokenType.TableName }; foreach (var child in trigger.children) { if (child is TerminalNodeImpl terminalNode) { switch (terminalNode.Symbol.Type) { case MySqlParser.BEFORE: script.Time = TriggerTime.BEFORE; break; case MySqlParser.AFTER: script.Time = TriggerTime.AFTER; break; case MySqlParser.INSERT: script.Events.Add(TriggerEvent.INSERT); break; case MySqlParser.UPDATE: script.Events.Add(TriggerEvent.UPDATE); break; case MySqlParser.DELETE: script.Events.Add(TriggerEvent.DELETE); break; case MySqlParser.PRECEDES: script.Behavior = nameof(MySqlParser.PRECEDES); break; case MySqlParser.FOLLOWS: script.Behavior = nameof(MySqlParser.FOLLOWS); break; } } } #region Body this.SetScriptBody(script, trigger.routineBody()); #endregion } this.ExtractFunctions(script, ddlStatement); result.Script = script; } return(result); }