public override ISqlNode VisitDataType(SqlDataTypeNode n) { _result.AssertNotNull(n, nameof(n.DataType), n.DataType); if (n.Size == null) { } else if (n.Size is SqlKeywordNode isMax) { _result.AssertIsValue(n, nameof(n.Size), isMax.Keyword, "MAX"); } else if (n.Size is SqlNumberNode asNumber) { _result.AssertIsPositiveNumber(n, nameof(n.Size), asNumber.Numeric); } else if (n.Size is SqlListNode <SqlNumberNode> asList) { _result.AssertIsNotEmpty(n, nameof(n.Size), asList); asList.Select((i, x) => _result.AssertIsPositiveNumber(asList, x.ToString(), i.Numeric)).All(x => x); } else { _result.UnexpectedNodeType(n, nameof(n.Size), n.Size); } return(base.VisitDataType(n)); }
public virtual ISqlNode VisitDataType(SqlDataTypeNode n) { var d = Visit(n.DataType) as SqlKeywordNode; var s = Visit(n.Size); return(n.Update(d, s)); }
public ISqlNode VisitDataType(SqlDataTypeNode n) { Visit(n.DataType); if (n.Size != null) { Append("(", n.Size, ")"); } return(n); }
private SqlDataTypeNode ParseDataType(ITokenizer t) { // <Keyword> ("(" ("MAX" | <SizeList>)? ")")? var next = t.GetNext(); // TODO: Array types // TODO: Should we add TABLE declaration parsing? if (next.IsKeyword("TABLE")) { return(null); } var dataType = new SqlDataTypeNode { Location = next.Location, DataType = new SqlKeywordNode(next), }; if (t.Peek().IsSymbol("(")) { t.GetNext(); var lookahead = t.Peek(); if (lookahead.IsKeyword("MAX")) { dataType.Size = new SqlKeywordNode(t.GetNext()); } else if (lookahead.IsType(SqlTokenType.Number)) { dataType.Size = ParseList(t, ParseNumber); } else { throw ParsingException.CouldNotParseRule(nameof(ParseDataType), lookahead); } t.Expect(SqlTokenType.Symbol, ")"); } return(dataType); }