예제 #1
0
        private void CreateView(ICommands cmd, IAParser parser, IATranslator translator, IViewDefinition view)
        {
            ASTNodeList   aNodes         = null;
            StringBuilder createViewStmt = new StringBuilder("create view ");

            createViewStmt.Append(view.ViewName);

            if (view.DbType == DbTypeName.Any || parser.ExpandEmptyStrings)
            {
                aNodes = parser.CreateNodeList(view.SelectStatement);
            }

            if (view.DbType == DbTypeName.Any)
            {
                if (!ColumnListContainStar(aNodes))
                {
                    createViewStmt.Append(CreateColumnList(aNodes));
                }

                aNodes = translator.Translate(aNodes);
            }

            createViewStmt.Append(" as ");

            if (aNodes != null)
            {
                createViewStmt.Append(aNodes);
            }
            else
            {
                createViewStmt.Append(view.SelectStatement);
            }

            cmd.ExecuteNonQuery(createViewStmt.ToString());
        }
예제 #2
0
 public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord) && !aParser.Acceptable(tokens, ASTCommaNode.KeyWord))
     {
         IASTNode node = nodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace);
         node.Parse(nodeFactory, aParser, tokens);
         SubNodes.Add(node);
     }
     return(this);
 }
예제 #3
0
        private void TestDoFunctions(string input, string expected)
        {
            IASTNodeFactory nodeFactory = new ASTNodeFactory();
            IAParser        parser      = AParserFactory.CreateInstance(nodeFactory);
            ASTNodeList     aNodes      = parser.CreateNodeList(input);
            IATranslator    translator  = ATranslatorFactory.CreateInstance(DbTypeName.SqlServer, nodeFactory);
            ASTNodeList     msNodes     = translator.Translate(aNodes);

            string result = msNodes.ToString();

            result.Should().BeEquivalentTo(expected);
        }
예제 #4
0
 public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     tokens.GetNextToken();
     while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord))
     {
         IASTNode newNode = aParser.NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace);
         newNode.Parse(aParser.NodeFactory, aParser, tokens);
         SubNodes.Add(newNode);
     }
     if (!aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord))
     {
         throw new AParserException("Didn't find closing parentheses");
     }
     SubNodes.Add(aParser.Accept(tokens, ASTEndParenthesesNode.KeyWord));
     return(this);
 }
예제 #5
0
        public void DoViews(out int totalViews, out int failedViews, IALogger tmpLogger = null)
        {
            IALogger logger = tmpLogger ?? new TestLogger();

            totalViews  = 0;
            failedViews = 0;

            List <IViewDefinition> viewDefinitions = new List <IViewDefinition>();

            viewDefinitions.AddRange(GetViewsFromAagView());
            viewDefinitions.AddRange(GetViewsFromAsysViewThatAreNotInAagView());

            ICommands       cmd         = _dbContext.PowerPlant.CreateCommands();
            IDbSchema       schema      = _dbContext.PowerPlant.CreateDbSchema();
            IASTNodeFactory nodeFactory = new ASTNodeFactory();
            IAParser        parser      = AParserFactory.CreateInstance(nodeFactory);

            if (_dbContext.DbType == DbTypeName.Oracle)
            {
                parser.ExpandEmptyStrings = true;
            }
            IATranslator translator = ATranslatorFactory.CreateInstance(_dbContext.DbType, nodeFactory);

            foreach (var view in viewDefinitions)
            {
                if (view.DbType != DbTypeName.Any && view.DbType != _dbContext.DbType)
                {
                    continue;
                }

                totalViews++;
                try
                {
                    schema.DropView(view.ViewName);
                    CreateView(cmd, parser, translator, view);
                    logger.Write(string.Format("View '{0}' created", view.ViewName));
                }
                catch (Exception ex)
                {
                    logger.Write(string.Format("ERROR: Can't create view '{0}'", view.ViewName));
                    logger.Write(ex.Message);
                    failedViews++;
                }
            }
        }
예제 #6
0
        protected void ParseParameters(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
        {
            SubNodes.Add(aParser.Accept(tokens, ASTStartParenthesesNode.KeyWord));

            while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord))
            {
                IASTNode node = nodeFactory.CreateFunctionParameterNode(tokens.CurrentToken.AddSpace);
                node.Parse(nodeFactory, aParser, tokens);
                SubNodes.Add(node);

                if (aParser.Acceptable(tokens, ASTCommaNode.KeyWord))
                {
                    SubNodes.Add(aParser.Accept(tokens, ASTCommaNode.KeyWord));
                }
            }

            SubNodes.Add(aParser.Accept(tokens, ASTEndParenthesesNode.KeyWord));
        }
예제 #7
0
 public void Setup()
 {
     _parser = AParserFactory.CreateInstance(new ASTNodeFactory());
 }
예제 #8
0
 public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     aParser.Accept(tokens, Text);
     ParseParameters(nodeFactory, aParser, tokens);
     return(this);
 }
예제 #9
0
파일: ASTNodeBase.cs 프로젝트: radtek/ACopy
 public virtual IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     tokens.GetNextToken();
     return(this);
 }