private WDataTypeReference ParseDataType(DataTypeReference dataType) { if (dataType == null) return null; var pDataType = dataType as ParameterizedDataTypeReference; if (pDataType == null) throw new NotImplementedException(); var wDataType = new WParameterizedDataTypeReference { Name = ParseSchemaObjectName(pDataType.Name), FirstTokenIndex = pDataType.FirstTokenIndex, LastTokenIndex = pDataType.LastTokenIndex }; if (pDataType.Parameters == null) return wDataType; wDataType.Parameters = new List<Literal>(pDataType.Parameters.Count); foreach (var param in pDataType.Parameters) wDataType.Parameters.Add(param); return wDataType; }
private static bool ParseParameterizedDataType( IList<TSqlParserToken> tokens, ref int nextToken, ref WDataTypeReference result, ref int farestError) { var firstToken = nextToken; var currentToken = nextToken; WSchemaObjectName varName = null; if (!ParseSchemaObjectName(tokens, ref currentToken, ref varName, ref farestError)) return false; List<Literal> parameters = null; ParseLiteralList(tokens, ref currentToken, ref parameters, ref farestError); var dataTypeReference = new WParameterizedDataTypeReference { Name = varName, Parameters = parameters, FirstTokenIndex = firstToken, LastTokenIndex = currentToken - 1, }; nextToken = currentToken; result = dataTypeReference; return true; }