コード例 #1
0
        public static IQueryPlanner VisitDdlStatementContext(DdlStatementContext context)
        {
            if (context.children.Count == 0)
            {
                return(null);
            }

            switch (context.children[0])
            {
            case CreateIndexContext createIndexContext:
                return(VisitCreateIndexContext(createIndexContext));

            case CreateTableContext createTableContext:
                return(VisitCreateTableContext(createTableContext));

            case AlterTableContext alterTableContext:
                return(VisitAlterTableContext(alterTableContext));

            case DropIndexContext dropIndexContext:
                return(VisitDropIndexContext(dropIndexContext));

            case DropTableContext dropTableContext:
                return(VisitDropTableContext(dropTableContext));
            }

            return(VisitorHelper.ThrowNotSupportedContext <IQueryPlanner>((ParserRuleContext)context.children[0]));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }