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 }); }
public IExpression Parse(TextSpan token, IParser parser) { var boolExpr = parser.ParseExpIgnoreComment(); var body = parser.ConsumeBeginBody(); return(new WhileSqlCodeExpr { BooleanExpr = boolExpr, Body = body }); }
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, }); }