Beispiel #1
0
        public void ParseParenthesisedExpression()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */
                        SELECT
                            col1, col2
                        FROM
                            APMART_FP.ADMIN.FPC_SERVICE svc
                        WHERE (svc.MKT_PROD_CD = 'MOB PT' AND svc.SVC_STAT_CD<> 'C')    
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.IsTrue(oWhere != null);

            SyntaxNode oParenthesis = oWhere[0];

            Assert.AreEqual(oParenthesis.ExpectedType, SyntaxKind.OpenParenthesisToken);

            // Test that there is a select keyword in that subquery
            SyntaxNode oAND = oParenthesis[0];

            Assert.AreEqual(oAND.ExpectedType, SyntaxKind.AndKeyword);
        }
Beispiel #2
0
        public void ParseSelectColumnAlias()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        col1 AS c2
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.IsTrue(oSelect != null);

            SyntaxNode oColumnList = oSelect[0];

            Assert.AreEqual(1, oColumnList.Count); // Should be 1 column
            Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType);

            SyntaxNode oLiteralColumn = oColumnList[0];

            Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oLiteralColumn.ExpectedType);
            Assert.AreEqual(typeof(Symbol), oLiteralColumn.GetType()); // Table is the top level then col
            Assert.AreEqual("c2", ((Symbol)oLiteralColumn).Alias);
        }
Beispiel #3
0
        public void ParseStringLiteralColumn()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        'TEST'
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(null, oSelect);

            SyntaxNode oColumnList = oSelect[0];

            Assert.AreEqual(1, oColumnList.Count); // Should be 1 column
            Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType);

            SyntaxNode oLiteralColumn = oColumnList[0];

            Assert.AreEqual(SyntaxKind.LiteralToken, oLiteralColumn.ExpectedType);
        }
Beispiel #4
0
        public void LexCreateTableBasic()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        CREATE TABLE _X AS 
                        SELECT  
                        *
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            SyntaxParser oParser = new SyntaxParser(oText);

            // Should be 8 (including 1 for the EOF Token)
            Assert.IsTrue(oParser.TokenList.Count == 12);

            // First item should be a CREATE keyword (ignoring all comments which is trivia)
            Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.CreateKeyword);
            // _X
            Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.TableKeyword);
            // Iden
            Assert.AreEqual(oParser.TokenList[2].ExpectedType, SyntaxKind.IdentifierToken);
            // Iden
            Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.AsKeyword);
        }
Beispiel #5
0
        public void ParseBasicJoinTree()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        *
                        FROM
                            APMART_FPVIEWS..FPC_SERVICE svc  
                        INNER JOIN
                            APSHARE_FP..WR02052_OMR_BASE omr
                        ON svc.SVC_IDNTY = omr.SVC_IDNTY        
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oFrom = oTemp.FindFirst(SyntaxKind.FromKeyword);

            Assert.IsTrue(oFrom != null);

            SyntaxNode oInnerJoin = oFrom[0];

            Assert.AreEqual(3, oInnerJoin.Count);
            Assert.AreEqual(SyntaxKind.InnerJoinKeyword, oInnerJoin.ExpectedType);

            // test children are correct
            Assert.AreEqual(oInnerJoin[0].ExpectedType, SyntaxKind.IdentifierDatabaseSymbol);
            Assert.AreEqual(oInnerJoin[1].ExpectedType, SyntaxKind.IdentifierDatabaseSymbol);
        }
Beispiel #6
0
        public void ParseOnAnd()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                            col1, col2
                        FROM
                        (
                            SELECT * FROM FPC_SERVICE
                        ) svc
                        INNER JOIN 
                            APSHARE_FP..FWR02052_OMR_BASE omr
                            ON 
                                svc.MKT_PROD_CD = 'MOB PT' AND 
                                svc.SVC_IDNTY = omr.SERVICE_NO  
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oON = oTemp.FindFirst(SyntaxKind.OnKeyword);

            Assert.AreNotEqual(oON, null);

            // Test that there is a select keyword in that subquery
            SyntaxNode oAND = oON.FindFirst(SyntaxKind.AndKeyword);

            Assert.AreNotEqual(oAND, null);
            Assert.AreEqual(oAND.RawSQLText, "AND");

            // Test that the AND was generated properly (exactly 2 children)
            Assert.AreEqual(2, oAND.Count);

            SyntaxNode oLeftEquals = oAND[0];

            Assert.AreEqual(oLeftEquals.ExpectedType, SyntaxKind.EqualsToken);

            SyntaxNode oLeftEqualsL = oLeftEquals[0];

            Assert.AreEqual(oLeftEqualsL.ExpectedType, SyntaxKind.IdentifierTableSymbol);
            SyntaxNode oLeftEqualsR = oLeftEquals[1];

            Assert.AreEqual(oLeftEqualsR.ExpectedType, SyntaxKind.LiteralToken);


            SyntaxNode oRightEquals = oAND[1];

            Assert.AreEqual(oLeftEquals.ExpectedType, SyntaxKind.EqualsToken);
            SyntaxNode oRightEqualsL = oRightEquals[0];

            Assert.AreEqual(oRightEqualsL.ExpectedType, SyntaxKind.IdentifierTableSymbol);
            SyntaxNode oRightEqualsR = oRightEquals[1];

            Assert.AreEqual(oRightEqualsR.ExpectedType, SyntaxKind.IdentifierTableSymbol);
        }
Beispiel #7
0
        public void ParseWhereOr()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                            col1, col2
                        FROM
                        (
                            SELECT * FROM FPC_SERVICE
                        ) svc
                        WHERE svc.MKT_PROD_CD = 'MOB PT' OR svc.SVC_STAT_CD <> 'C'      
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.IsTrue(oWhere != null);

            // Test that there is a select keyword in that subquery
            SyntaxNode oOR = oWhere.FindFirst(SyntaxKind.OrKeyword);

            Assert.IsTrue(oOR != null);

            // Test that the OR was generated properly (exactly 2 children)
            Assert.AreEqual(2, oOR.Count);
        }
Beispiel #8
0
        public void ParseBadColumnCommentWHERE()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"
                        SELECT 
                        * --bad comment 
                        FROM APSHARE_FPVIEWS..FPC_SERVICE svc    
                        -- WHERE x  
            ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(oSelect, null);

            SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword);

            Assert.AreNotEqual(oFrom, null);

            SyntaxNode oWhere = oSelect.FindFirst(SyntaxKind.WhereKeyword);

            Assert.AreEqual(oWhere, null); // Should not be a where, They probably wanted this commented out
        }
Beispiel #9
0
        public void ParseComplexColumnConcat()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        SELECT '+61' || SUBSTR(svc_idnty, 1, 8) || '0'  FROM FPC_SERVICE  
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(null, oSelect);
            Assert.AreEqual(2, oSelect.Count);

            SyntaxNode oColumnList = oSelect[0];

            Assert.AreEqual(1, oColumnList.Count);
            Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType);

            SyntaxNode oBarBar = oColumnList[0];

            Assert.AreEqual(3, oBarBar.Count);
            Assert.AreEqual(SyntaxKind.BarBarToken, oBarBar.ExpectedType);
            Assert.AreEqual(SyntaxKind.LiteralToken, oBarBar[0].ExpectedType);
            Assert.AreEqual(SyntaxKind.SubStringKeyword, oBarBar[1].ExpectedType);
            Assert.AreEqual(SyntaxKind.LiteralToken, oBarBar[2].ExpectedType);
        }
Beispiel #10
0
        public void LexSelectExpression()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        COUNT(*)
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc     
                             
                ");

            SyntaxParser oParser = new SyntaxParser(oText);

            // Should be 8 (including 1 for the EOF Token)
            Assert.AreEqual(11, oParser.TokenList.Count);
            // First item should be a select keyword (ignoring all comments which is trivia)
            Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.SelectKeyword);
            // COUNT
            Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.CountKeyword);
            // (
            Assert.AreEqual(oParser.TokenList[2].ExpectedType, SyntaxKind.OpenParenthesisToken);
            // (
            Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.StarToken);
            // )
            Assert.AreEqual(oParser.TokenList[4].ExpectedType, SyntaxKind.CloseParenthesisToken);
        }
Beispiel #11
0
        public void ParseBadColumnCommentFROM()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"
                        SELECT  
                        * --bad comment FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc      
            ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(oSelect, null);

            SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword);

            Assert.AreNotEqual(oFrom, null);

            SyntaxNode oTableIdn = oFrom.FindFirst(SyntaxKind.IdentifierTableSymbol);

            Assert.AreNotEqual(oTableIdn, null);
        }
Beispiel #12
0
        public void LexWITHStatementBasic()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        WITH _X AS
                        (
                            SELECT * FROM APMART_FPVIEWS..FPC_SERVICE LIMIT 100
                        )
                        SELECT  
                        *
                        FROM
                            APSHARE_FPVIEWS..FPC_SERVICE svc   
                        INNER JOIN
                            _X
                            ON _X.SVC_IDNTY = svc.SVC_IDNTY   
                ");

            SyntaxParser oParser = new SyntaxParser(oText);

            // WITH
            Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.WithKeyword);
            Assert.AreEqual(oParser.TokenList[0].RawSQLText, "WITH");

            // Identifier
            Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.IdentifierToken);
            Assert.AreEqual(oParser.TokenList[1].RawSQLText, "_X");

            // Brackets
            Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.OpenParenthesisToken);
            Assert.AreEqual(oParser.TokenList[3].RawSQLText, "(");
            Assert.AreEqual(oParser.TokenList[12].ExpectedType, SyntaxKind.CloseParenthesisToken);
            Assert.AreEqual(oParser.TokenList[12].RawSQLText, ")");
        }
Beispiel #13
0
        public void LexINNERJOINStatementBasic()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        *
                        FROM
                        APMART_FPVIEWS..FPC_SERVICE svc
                        INNER JOIN 
                            APSHARE_FP..WR02290_FETCH ftch
                            ON svc.SVC_IDNTY = ftch.SERVICE_NO
                        WHERE svc.MKT_PROD_CD = 'A' ;            
                ");

            SyntaxParser oParser = new SyntaxParser(oText);

            // Should be 15 (including 1 for the semicolon)
            Assert.AreEqual(oParser.TokenList.Count, 29);
            // First item should be a select keyword (ignoring all comments which is trivia)
            Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.SelectKeyword);

            // We only really test for the JOIN and its positioning
            Assert.AreEqual(oParser.TokenList[7].ExpectedType, SyntaxKind.InnerJoinKeyword);
            Assert.AreEqual(oParser.TokenList[8].ExpectedType, SyntaxKind.JoinKeyword);
        }
Beispiel #14
0
        public void ParseAdditionInColumn()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        svc_idnty + 2
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.IsTrue(oSelect != null);

            SyntaxNode oColumnList = oSelect.FindFirst(SyntaxKind.ColumnListNode);

            Assert.AreNotEqual(oColumnList, null);
            SyntaxNode oStarExpression = oSelect.FindFirst(SyntaxKind.PlusToken);

            Assert.AreNotEqual(oStarExpression, null);

            SyntaxNode oLeft  = oStarExpression[0];
            SyntaxNode oRight = oStarExpression[1];

            Assert.AreEqual(oLeft.ExpectedType, SyntaxKind.IdentifierTableSymbol);
            Assert.AreEqual(oRight.ExpectedType, SyntaxKind.NumericToken);
        }
Beispiel #15
0
        public void ParseBasicWhere()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                            col1, col2
                        FROM
                        (
                            SELECT * FROM FPC_SERVICE
                        ) svc
                        WHERE svc.MKT_PROD_CD = 'MOB PT'
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.IsTrue(oWhere != null);

            // Test that there is a select keyword in that subquery
            SyntaxNode oEqual = oWhere.FindFirst(SyntaxKind.EqualsToken);

            Assert.AreNotEqual(oEqual, null);

            // Test that the AND was generated properly (exactly 2 children)
            Assert.AreEqual(2, oEqual.Count);
            Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oEqual[0].ExpectedType);
            Assert.AreEqual(SyntaxKind.LiteralToken, oEqual[1].ExpectedType);
        }
Beispiel #16
0
        public void ParseInvalidColumnPreConcat()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        SELECT || svc.svc_idnty FROM FPC_SERVICE
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(null, oSelect);
            Assert.AreEqual(2, oSelect.Count);

            SyntaxNode oColumnList = oSelect[0];

            Assert.AreEqual(1, oColumnList.Count);
            Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType);

            SyntaxNode oBarBar = oColumnList[0];

            Assert.AreEqual(2, oBarBar.Count);
            Assert.AreEqual(SyntaxKind.BarBarToken, oBarBar.ExpectedType);
        }
Beispiel #17
0
        public void ParseEmptyAnd()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                            col1, col2
                        FROM
                        (
                            SELECT * FROM FPC_SERVICE
                        ) svc
                        WHERE AND    
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.IsTrue(oWhere != null);

            // Test that there is a select keyword in that subquery
            SyntaxNode oAND = oWhere.FindFirst(SyntaxKind.AndKeyword);

            Assert.AreNotEqual(null, oAND);
            Assert.AreEqual(SyntaxKind.BooleanToken, oAND[0].ExpectedType); // Check for the Filler node

            // Test that the AND was generated properly (exactly 2 children)
            Assert.AreEqual(2, oAND.Count);
        }
Beispiel #18
0
        public static Boolean ScanNumber(SlidingTextWindow TextWindow, out SyntaxToken xoToken)
        {
            // Intermediate var
            char   cNextChar;
            String sCharactersProcessedSoFar = String.Empty;

            for (int iIndex = 0; ; iIndex++)
            {
                // Move to the next char
                cNextChar = TextWindow.PeekCharacter(iIndex);

                // If the character is a valid number
                if (cNextChar >= '0' && cNextChar <= '9')
                {
                    sCharactersProcessedSoFar += cNextChar;
                }
                else if (sCharactersProcessedSoFar.Length > 0)
                {
                    xoToken = new SyntaxToken(SyntaxKind.NumericToken, sCharactersProcessedSoFar);
                    TextWindow.SkipAhead(sCharactersProcessedSoFar.Length);
                    return(true);
                }
                else if (iIndex + TextWindow.Position >= TextWindow.Count)
                {
                    // Break, we couldnt find anything
                    break;
                }
            }

            // Invalid case
            xoToken = null;
            return(false);
        }
Beispiel #19
0
        public void ParseBadWhere()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                            col1, col2
                        FROM
                        (
                            SELECT * FROM FPC_SERVICE
                        ) svc
                        WHERE     
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            // Test that a subquery type node was built
            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.AreNotEqual(null, oWhere);

            Assert.AreEqual(SyntaxKind.BooleanToken, oWhere[0].ExpectedType); // Check for the Filler node
        }
Beispiel #20
0
        public void ParseSelectFromDBTable()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        *
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.IsTrue(oSelect != null);

            SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword);

            Assert.IsTrue(oFrom != null);

            SyntaxNode oTableIdn = oFrom.FindFirst(SyntaxKind.IdentifierTableSymbol);

            Assert.IsTrue(oTableIdn != null);
        }
Beispiel #21
0
        public static SyntaxTrivia Scan(SlidingTextWindow TextWindow)
        {
            char xcNextChar = TextWindow.PeekCharacter();

            switch (xcNextChar)
            {
            case '\r':
                if (TextWindow.PeekCharacter(1) == '\n')
                {
                    TextWindow.SkipAhead(2);
                    return(SyntaxFactory.EndOfLine("\r\n"));
                }

                return(SyntaxFactory.EndOfLine("\r"));

            case '\n':
                TextWindow.SkipAhead(1);
                return(SyntaxFactory.EndOfLine("\n"));

            default:
                // Try again
                if (SyntaxUtilities.IsNewLineCharacter(xcNextChar))
                {
                    TextWindow.SkipAhead(1);
                    return(SyntaxFactory.EndOfLine("\n"));
                }

                return(null);
            }
        }
Beispiel #22
0
        public void ParseIN()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        SELECT * FROM FPC_SERVICE
                        WHERE svc_idnty IN ('0415783039')  
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);

            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.AreNotEqual(null, oWhere);
            Assert.AreEqual(1, oWhere.Count);
            Assert.AreEqual(SyntaxKind.InKeyword, oWhere[0].ExpectedType);
            Assert.AreEqual(2, oWhere[0].Count);

            Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oWhere[0][0].ExpectedType);
            Assert.AreEqual(SyntaxKind.OpenParenthesisToken, oWhere[0][1].ExpectedType);
            Assert.AreEqual(1, oWhere[0][1].Count);
        }
Beispiel #23
0
        public void ParseSingleFunctionInWhere()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        SELECT  
                        svc_idnty
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc     
                        WHERE MAX(svc.somecode) > 100   
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.IsTrue(oSelect != null);

            SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword);

            Assert.AreEqual(1, oWhere.Count);

            SyntaxNode oGreaterThan = oWhere[0];

            Assert.AreEqual(SyntaxKind.GreaterThanToken, oGreaterThan.ExpectedType);

            SyntaxNode oFunc = oGreaterThan[0];

            Assert.AreEqual(SyntaxKind.MaxKeyword, oFunc.ExpectedType);
        }
Beispiel #24
0
        public void ParseSingleFunctionInColumn()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        SELECT  
                        COALESCE(svc_idnty, 1, 10)
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc        
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.IsTrue(oSelect != null);

            SyntaxNode oColumnList = oSelect[0];

            Assert.AreEqual(1, oColumnList.Count);

            SyntaxNode oFunction = oColumnList[0];

            Assert.AreEqual(SyntaxKind.CoalesceKeyword, oFunction.ExpectedType);
            Assert.AreEqual(1, oFunction.Count);
            Assert.AreEqual(3, oFunction[0].Count);
        }
Beispiel #25
0
        public void ParseMultipleColumnParenthesised()
        {
            SlidingTextWindow oText = new SlidingTextWindow(
                @"   
                        /* TEST */      
                        SELECT  
                        (col1), (col2), (col3)
                        FROM
                        APSHARE_FPVIEWS..FPC_SERVICE svc          
                ");

            // Initialises the Parser
            SyntaxParser oParser = new SyntaxParser(oText);
            // Try and generate a tree
            SyntaxNode oTemp = oParser.ParseTree();

            SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword);

            Assert.AreNotEqual(oSelect, null);

            SyntaxNode oColList = oSelect[0];

            Assert.AreEqual(3, oColList.Count);

            foreach (SyntaxNode oChild in oColList)
            {
                Assert.AreEqual(oChild.ExpectedType, SyntaxKind.OpenParenthesisToken);
                SyntaxNode oColInner = oChild[0];
                Assert.IsTrue(
                    oColInner.ExpectedType == SyntaxKind.StarToken ||
                    oColInner.ExpectedType == SyntaxKind.IdentifierColumnSymbol ||
                    oColInner.ExpectedType == SyntaxKind.IdentifierTableSymbol);
            }
        }
Beispiel #26
0
        public static Boolean ScanLiteral(SlidingTextWindow TextWindow, out SyntaxToken xoToken)
        {
            // Initialise a return string
            String sCharacterScannedSoFar = String.Empty;

            //
            for (int iIndex = 1; TextWindow.Position + iIndex < TextWindow.Count; iIndex++)
            {
                //
                char cNextChar = TextWindow.PeekCharacter(iIndex);

                // If we find an ending character
                if (cNextChar == '\'' || cNextChar == '\"')
                {
                    xoToken = new SyntaxToken(SyntaxKind.LiteralToken, sCharacterScannedSoFar);
                    // Plus 2 to skip passed the quotation marks
                    TextWindow.SkipAhead(sCharacterScannedSoFar.Length + 2);
                    return(true);
                }

                // Add the character after
                sCharacterScannedSoFar += cNextChar;
            }

            // If we reach here, no literal could be built.
            xoToken = null;
            return(false);
        }
Beispiel #27
0
        public void Offset_WithNewSlidingTextWindow_IsZero()
        {
            var sourceText        = SourceText.From("abcdefghijklmnopqrstuvwyx0123456789");
            var slidingTextWindow = new SlidingTextWindow(sourceText);

            Assert.AreEqual(0, slidingTextWindow.Offset);
        }
Beispiel #28
0
        public void Text_WithSlidingTextWindowCreatedWithSetText_ReturnsText()
        {
            var sourceText        = SourceText.From("abcdefghijklmnopqrstuvwyx0123456789");
            var slidingTextWindow = new SlidingTextWindow(sourceText);

            Assert.AreEqual(sourceText, slidingTextWindow.Text);
        }
Beispiel #29
0
        public void NextChar_WithNoText_DoesNotChangePosition()
        {
            var slidingTextWindow = new SlidingTextWindow(SourceText.From(""));

            slidingTextWindow.NextChar();

            Assert.AreEqual(0, slidingTextWindow.Position);
        }
Beispiel #30
0
        public void NextChar_WithValidCharacter_IncrementsPosition()
        {
            var slidingTextWindow = new SlidingTextWindow(SourceText.From("A"));

            slidingTextWindow.NextChar();

            Assert.AreEqual(1, slidingTextWindow.Position);
        }