Esempio n. 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());
        }
Esempio n. 2
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "to_number", CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
Esempio n. 3
0
        private string CreateColumnList(ASTNodeList aNodes)
        {
            StringBuilder columnList = new StringBuilder();

            columnList.Append(" (");
            int      nodeCounter = 0;
            IASTNode currentNode = null;

            while (nodeCounter < aNodes.Count)
            {
                var previousNode = currentNode;
                currentNode = aNodes[nodeCounter++];
                if (currentNode.Text[0] == ',' || currentNode.TextEqualTo("from"))
                {
                    columnList.Append(previousNode.Text.Trim('"', '[', ']'));
                    if (currentNode.TextEqualTo("from"))
                    {
                        break;
                    }
                    columnList.Append(", ");
                }
            }
            columnList.Append(")");

            return(columnList.ToString());
        }
Esempio n. 4
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // TO_CHAR(123) => CONVERT(nvarchar, 123)
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "convert", CreateFunctionParameterNode("nvarchar"), CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
Esempio n. 5
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // TO_int('123') => CONVERT(int, '123')
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "convert", CreateFunctionParameterNode("int"), CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
Esempio n. 6
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // TO_COUNTER('9') => convert(bigint, '0') )
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "convert", CreateFunctionParameterNode("bigint"), CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
Esempio n. 7
0
        private void WrapParameterInParentheses(ASTNodeList newNodes, IASTNode parameter)
        {
            IASTNode newNode = NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false);

            Translator.TranslateSubNodes(newNode.SubNodes, parameter);
            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord));
            newNodes.Add(newNode);
        }
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // GUID2STR(guid_col) => lower(guid_col)

            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "lower", CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
Esempio n. 9
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // MOD(3, 5) => (3) % (5)
            Translator  = translator;
            NodeFactory = nodeFactory;

            WrapParameterInParentheses(newNodes, subNodes[1]);
            newNodes.Add(nodeFactory.CreateNode("%"));
            WrapParameterInParentheses(newNodes, subNodes[3]);
        }
Esempio n. 10
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);
        }
Esempio n. 11
0
        public ASTNodeList ParseExpression(ATokens tokens)
        {
            ASTNodeList nodes = new ASTNodeList();

            while (tokens.CurrentToken != null)
            {
                IASTNode node = NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace);
                node.Parse(NodeFactory, this, tokens);
                nodes.Add(node);
            }
            return(nodes);
        }
Esempio n. 12
0
        private bool ColumnListContainStar(ASTNodeList aNodes)
        {
            for (int i = 0; i < aNodes.Count && !aNodes[i].TextEqualTo("from"); i++)
            {
                if (aNodes[i].Text.Contains('*'))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 13
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            IASTNode newNode = nodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false);

            newNode.SubNodes.Add(nodeFactory.CreateFunctionParameterNode());
            newNode.SubNodes.Add(nodeFactory.CreateNode("+"));
            newNode.SubNodes.Add(nodeFactory.CreateFunctionParameterNode());
            newNode.SubNodes.Add(nodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord));

            newNodes.Add(newNode);
            translator.TranslateSubNodes(newNode.SubNodes[0].SubNodes, subNodes[1]);
            translator.TranslateSubNodes(newNode.SubNodes[2].SubNodes, subNodes[3]);
        }
Esempio n. 14
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // MOD(3, 5) translated to: mod(floor(3), floor(5))
            Translator  = translator;
            NodeFactory = nodeFactory;

            IASTNode newParam1 = NodeFactory.CreateFunctionParameterNode();

            AddFunction(newParam1.SubNodes, "floor", CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
            IASTNode newParam2 = NodeFactory.CreateFunctionParameterNode();

            AddFunction(newParam2.SubNodes, "floor", CreateFunctionParameterNodeWithSubNodes(subNodes[3]));

            AddFunction(newNodes, "mod", newParam1, newParam2);
        }
Esempio n. 15
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // TO_FLOAT('123') => convert(dec(28,8) , '123')
            Translator  = translator;
            NodeFactory = nodeFactory;

            IASTNode newNode = NodeFactory.CreateNode("convert", false);

            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false));
            newNode.SubNodes.Add(NodeFactory.CreateFunctionParameterNode());
            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTCommaNode.KeyWord));
            newNode.SubNodes.Add(CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord));

            AddFunction(newNode.SubNodes[1].SubNodes, "dec", CreateFunctionParameterNode("28"), CreateFunctionParameterNode("8"));
            newNodes.Add(newNode);
        }
Esempio n. 16
0
 public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
 {
     newNodes.Add(nodeFactory.CreateNode("sysdate"));
 }
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ASTNodeList obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }