public IExpression Parse(TextSpan token, IParser parser) { var parametersList = new List <SqlCodeExpr>(); parser.Scanner.Consume(SqlToken.LParen); var dataType = parser.ConsumeDataType(); parametersList.Add(dataType); parser.Scanner.Consume(SqlToken.Comma); var expr = parser.ParseExpIgnoreComment(); parametersList.Add(expr); if (parser.Scanner.Match(SqlToken.Comma)) { var styleSpan = parser.Scanner.Consume(); var style = parser.PrefixParse(styleSpan) as SqlCodeExpr; parametersList.Add(style); } parser.Scanner.Consume(SqlToken.RParen); var funcName = new ObjectIdSqlCodeExpr { ObjectName = "CONVERT" }; return(new FuncSqlCodeExpr { Name = funcName, Parameters = parametersList }); }
public IExpression Parse(TextSpan token, IParser parser) { var funcName = parser.Scanner.GetSpanString(token); parser.Scanner.Consume(SqlToken.LParen); var arguments = new List <SqlCodeExpr>(); do { if (arguments.Count >= _maxParameterCount) { ThrowHelper.ThrowParseException(parser, $"Expect Max Parameter Count={_maxParameterCount} for '{funcName}' Function."); } var innerExpr = parser.ParseExpIgnoreComment(); arguments.Add(innerExpr); } while (parser.Scanner.Match(SqlToken.Comma)); parser.Scanner.ConsumeAny(SqlToken.RParen); var funcNameExpr = new ObjectIdSqlCodeExpr { ObjectName = funcName }; return(new FuncSqlCodeExpr { Name = funcNameExpr, Parameters = arguments }); }
private IExpression AlterDatabase(TextSpan databaseSpan, IParser parser) { SqlCodeExpr databaseName = null; if (parser.MatchToken(SqlToken.CURRENT)) { databaseName = new ObjectIdSqlCodeExpr { ObjectName = "CURRENT" }; } else { databaseName = parser.ConsumeObjectId(); } var actionExpr = parser.ConsumeAny( ParseSetOnOff, ParseAddFileGroup); var isSemicolon = parser.MatchToken(SqlToken.Semicolon); return(new AlterDatabaseSqlCodeExpr { DatabaseName = databaseName, ActionExpr = actionExpr, IsSemicolon = isSemicolon, }); }
public IExpression Parse(TextSpan token, IParser parser) { var funcName = parser.Scanner.GetSpanString(token); if (token.Type != TokenType.Identifier.ToString()) { funcName = funcName.ToUpper(); } var funcNameExpr = new ObjectIdSqlCodeExpr { ObjectName = funcName }; if (!parser.IsToken(SqlToken.LParen)) { token.Type = SqlToken.Identifier.ToString(); return(parser.PrefixParse(token)); } var parameterList = parser.ParseParameterList($"Function '{funcName}'", _minParameterCount, _maxParameterCount); return(new FuncSqlCodeExpr { Name = funcNameExpr, Parameters = parameterList }); }
public IExpression Parse(TextSpan token, IParser parser) { parser.Scanner.Consume(SqlToken.LParen); var arguments = new List <SqlCodeExpr>(); var innerExpr = parser.ParseExp() as SqlCodeExpr; arguments.Add(innerExpr); var existsNameExpr = new ObjectIdSqlCodeExpr { DatabaseName = string.Empty, SchemaName = string.Empty, ObjectName = "EXISTS" }; parser.Scanner.ConsumeAny(SqlToken.RParen); return(new FuncSqlCodeExpr { Name = existsNameExpr, Parameters = arguments }); }
public IExpression Parse(TextSpan token, IParser parser) { var intoToken = string.Empty; if (parser.Scanner.Match(SqlToken.Into)) { intoToken = "INTO"; } var targetTable = parser.ConsumeObjectId(); var withOptions = parser.ParseWithOption(); if (!parser.TryConsumeAliasName(out var targetTableAliasName) && parser.Scanner.IsTokenList(SqlToken.As, SqlToken.Target)) { parser.Scanner.Consume(SqlToken.As); parser.Scanner.Consume(SqlToken.Target); targetTableAliasName = new ObjectIdSqlCodeExpr { ObjectName = "Target" }; } parser.Scanner.Consume(SqlToken.Using); var tableSource = parser.ParseExpIgnoreComment(); if (!parser.TryConsumeAliasName(out var tableSourceAliasName) && parser.Scanner.IsTokenList(SqlToken.As, SqlToken.Source)) { parser.Scanner.Consume(SqlToken.As); parser.Scanner.Consume(SqlToken.Source); targetTableAliasName = new ObjectIdSqlCodeExpr { ObjectName = "Source" }; } var sourceColumnList = new List <SqlCodeExpr>(); if (parser.MatchToken(SqlToken.LParen)) { sourceColumnList = parser.ParseColumnList(); parser.ConsumeToken(SqlToken.RParen); } parser.Scanner.Consume(SqlToken.ON); var mergeSearchCondition = parser.ParseExpIgnoreComment(); var whenList = new List <SqlCodeExpr>(); do { SqlCodeExpr whenItem = GetWhenNotMatched(parser); if (whenItem == null) { whenItem = GetWhenMatched(parser); if (whenItem == null) { break; } } whenList.Add(whenItem); } while (true); var outputList = parser.ParseOutputListExpr(); parser.Scanner.Consume(SqlToken.Semicolon); return(new MergeSqlCodeExpr { IntoToken = intoToken, TargetTable = targetTable, TargetTableAliasName = targetTableAliasName, WithOptions = withOptions, TableSource = tableSource, SourceColumnList = sourceColumnList, TableSourceAliasName = tableSourceAliasName, OnMergeSearchCondition = mergeSearchCondition, WhenList = whenList, OutputList = outputList, }); }