예제 #1
0
        private IExpression CreateFunction(TextSpan token, IParser parser)
        {
            var nameExpr = parser.ConsumeObjectId();

            parser.Scanner.Consume(SqlToken.LParen);
            var arguments = parser.ConsumeArgumentList();

            parser.Scanner.Consume(SqlToken.RParen);

            parser.Scanner.Consume(SqlToken.Returns);

            parser.Scanner.TryConsumeVariable(out var returnVariableExpr);


            var returnTypeExpr = parser.ConsumeDataType();

            parser.Scanner.Consume(SqlToken.As);

            var body = parser.ConsumeBeginBody();

            return(new CreateFunctionSqlCodeExpr
            {
                Name = nameExpr,
                Arguments = arguments,
                ReturnVariable = returnVariableExpr,
                ReturnType = returnTypeExpr,
                Body = body
            });
        }
예제 #2
0
        public IExpression Parse(TextSpan token, IParser parser)
        {
            var boolExpr = parser.ParseExpIgnoreComment();
            var body     = parser.ConsumeBeginBody();

            return(new WhileSqlCodeExpr
            {
                BooleanExpr = boolExpr,
                Body = body
            });
        }
예제 #3
0
        public IExpression Parse(TextSpan token, IParser parser)
        {
            if (parser.Scanner.IsTokenAny(SqlToken.TRANSACTION, SqlToken.TRAN))
            {
                return(ParseBeginTransaction(parser));
            }

            parser.Scanner.SetOffset(token.Offset - 1);
            var exprList = parser.ConsumeBeginBody();

            return(new BeginSqlCodeExpr()
            {
                Items = exprList,
            });
        }