コード例 #1
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "to_number", CreateFunctionParameterNodeWithSubNodes(subNodes[1]));
        }
コード例 #2
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            Translator  = translator;
            NodeFactory = nodeFactory;

            AddFunction(newNodes, "getdate", new List <IASTNode>());
        }
コード例 #3
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]));
        }
コード例 #4
0
ファイル: ATranslatorFactory.cs プロジェクト: radtek/ACopy
 public static IATranslator CreateInstance(DbTypeName dbType, IASTNodeFactory nodeFactory)
 {
     if (dbType == DbTypeName.Oracle)
     {
         return(new OracleTranslator(nodeFactory));
     }
     return(new SqlServerTranslator(nodeFactory));
 }
コード例 #5
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]));
        }
コード例 #6
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]));
        }
コード例 #7
0
        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]));
        }
コード例 #8
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);
 }
コード例 #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]);
        }
コード例 #10
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // Translated to to_date('19000101 00:00:00', 'yyyymmdd hh24:mi:ss')
            Translator  = translator;
            NodeFactory = nodeFactory;

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                nodeFactory.CreateNode("'19000101 00:00:00'", false),
                nodeFactory.CreateNode("'yyyymmdd hh24:mi:ss'", false)
            };

            AddFunction(newNodes, "to_date", functionParameters);
        }
コード例 #11
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // MONTHADD(3, today) => add_months(today, 3)
            Translator  = translator;
            NodeFactory = nodeFactory;

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                CreateFunctionParameterNodeWithSubNodes(subNodes[3]),
                CreateFunctionParameterNodeWithSubNodes(subNodes[1])
            };

            AddFunction(newNodes, "add_months", functionParameters);
        }
コード例 #12
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // IFNULL(somecol, 0) => nvl(somecol, 0)
            Translator  = translator;
            NodeFactory = nodeFactory;

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                CreateFunctionParameterNodeWithSubNodes(subNodes[1]),
                CreateFunctionParameterNodeWithSubNodes(subNodes[3])
            };

            AddFunction(newNodes, "nvl", functionParameters);
        }
コード例 #13
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);
        }
コード例 #14
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // Translated to convert(datetime, '19000101 00:00:00:000', 9)
            Translator  = translator;
            NodeFactory = nodeFactory;

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                nodeFactory.CreateNode("datetime", false),
                nodeFactory.CreateNode("'19000101 00:00:00:000'", false),
                nodeFactory.CreateNode("9", false)
            };

            AddFunction(newNodes, "convert", functionParameters);
        }
コード例 #15
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);
 }
コード例 #16
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // The guid2str function is pretty ugly in Oracle. A call like guid2str(guid_col) becomes:
            //     lower(substr(guid_col,1,8) || '-' || substr(guid_col,9,4) || '-' || substr(guid_col,13,4) || '-' || substr(guid_col,17,4) || '-' || substr(guid_col,21,12))
            Translator  = translator;
            NodeFactory = nodeFactory;

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

            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false));
            newNode.SubNodes.Add(NodeFactory.CreateFunctionParameterNode());
            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord));

            CreateNodesForGuidParts(newNode.SubNodes[1].SubNodes, subNodes[1]);

            newNodes.Add(newNode);
        }
コード例 #17
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);
        }
コード例 #18
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));
        }
コード例 #19
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // TO_FLOAT('123') => cast(decode('123', ' ', 0.00, '123') as number(30,8) )
            Translator  = translator;
            NodeFactory = nodeFactory;

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

            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTStartParenthesesNode.KeyWord, false));
            newNode.SubNodes.Add(NodeFactory.CreateFunctionParameterNode());
            newNode.SubNodes.Add(NodeFactory.CreateNode(ASTEndParenthesesNode.KeyWord));

            IASTNode parameter = CreateFunctionParameterNodeWithSubNodes(subNodes[1]);

            AddDecodeFunction(newNode.SubNodes[1].SubNodes, parameter);

            newNodes.Add(newNode);
        }
コード例 #20
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // DAYADD(3, day_col) => dateadd(dd, 3, day_col)
            Translator  = translator;
            NodeFactory = nodeFactory;

            IASTNode unitParameter = NodeFactory.CreateFunctionParameterNode();

            unitParameter.SubNodes.Add(NodeFactory.CreateNode("dd", false));

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                unitParameter,
                CreateFunctionParameterNodeWithSubNodes(subNodes[1]),
                CreateFunctionParameterNodeWithSubNodes(subNodes[3])
            };

            AddFunction(newNodes, "dateadd", functionParameters);
        }
コード例 #21
0
        public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
        {
            // MONTHADD(3, today) => dateadd(mm, 3, today)
            Translator  = translator;
            NodeFactory = nodeFactory;

            IASTNode mmParameter = NodeFactory.CreateFunctionParameterNode();

            mmParameter.SubNodes.Add(NodeFactory.CreateNode("mm", false));

            List <IASTNode> functionParameters = new List <IASTNode>
            {
                mmParameter,
                CreateFunctionParameterNodeWithSubNodes(subNodes[1]),
                CreateFunctionParameterNodeWithSubNodes(subNodes[3])
            };

            AddFunction(newNodes, "dateadd", functionParameters);
        }
コード例 #22
0
ファイル: SqlServerTranslator.cs プロジェクト: radtek/ACopy
 public SqlServerTranslator(IASTNodeFactory nodeFactory)
 {
     NodeFactory     = nodeFactory;
     NodeTranslators = new Dictionary <string, IASTNodeTranslator>
     {
         { ASTDayAddNode.KeyWord, new SqlServerDayAddTranslator() },
         { ASTGetDateNode.KeyWord, new SqlServerGetDateTranslator() },
         { ASTGuid2StrNode.KeyWord, new SqlServerGuid2StrTranslator() },
         { ASTIfNullNode.KeyWord, new SqlServerIfNullTranslator() },
         { ASTMaxDateNode.KeyWord, new SqlServerMaxDateTranslator() },
         { ASTMinDateNode.KeyWord, new SqlServerMinDateTranslator() },
         { ASTModNode.KeyWord, new SqlServerModTranslator() },
         { ASTMonthAddNode.KeyWord, new SqlServerMonthAddTranslator() },
         { ASTToCharNode.KeyWord, new SqlServerToCharTranslator() },
         { ASTToCounterNode.KeyWord, new SqlServerToCounterTranslator() },
         { ASTToFloatNode.KeyWord, new SqlServerToFloatTranslator() },
         { ASTToIntNode.KeyWord, new SqlServerToIntTranslator() }
     };
 }
コード例 #23
0
ファイル: ASTNodeBase.cs プロジェクト: radtek/ACopy
 public virtual IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     tokens.GetNextToken();
     return(this);
 }
コード例 #24
0
ファイル: AParser.cs プロジェクト: radtek/ACopy
 public AParser(IASTNodeFactory nodeFactory)
 {
     NodeFactory = nodeFactory;
 }
コード例 #25
0
 public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     aParser.Accept(tokens, Text);
     ParseParameters(nodeFactory, aParser, tokens);
     return(this);
 }
コード例 #26
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]);
        }
コード例 #27
0
 public override void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory)
 {
     newNodes.Add(nodeFactory.CreateNode("sysdate"));
 }
コード例 #28
0
 public abstract void Translate(IATranslator translator, ASTNodeList newNodes, ASTNodeList subNodes, IASTNodeFactory nodeFactory);
コード例 #29
0
 public static IAParser CreateInstance(IASTNodeFactory nodeFactory)
 {
     return(new AParser(nodeFactory));
 }