public Column(string name, DataTypeToken dataType, ValueToken defaultValue, bool isPrimaryKey, bool autogeneratePrimaryKey, bool isNullable, ForeignKeyDetailsToken foreignKey, int?maxLength, bool isUnique) { if (foreignKey != null && isPrimaryKey) { throw new ArgumentException($"A column cannot be both a primary and foreign key. Column: {Name}."); } Name = name?.ToPostgresStyle() ?? throw new ArgumentNullException(nameof(name)); CSharpStyleName = ColumnPlaceholder.GetCSharpName(name); CSharpStyleNameLower = ColumnPlaceholder.GetCSharpName(name, true); DataType = dataType ?? throw new ArgumentNullException(nameof(dataType)); DefaultValue = defaultValue; IsPrimaryKey = isPrimaryKey; AutogeneratePrimaryKey = autogeneratePrimaryKey; IsNullable = isNullable; ForeignKey = foreignKey; MaxLength = maxLength; IsUnique = isUnique; }
public IEnumerable <IElephantToken> Tokenize(string input) { var lastWasNewline = false; for (int i = 0; i < input.Length; i++) { var c = input[i]; if (IsNewline(c)) { if (lastWasNewline) { continue; } lastWasNewline = true; yield return(NewLineToken.Value); continue; } lastWasNewline = false; if (char.IsWhiteSpace(c)) { continue; } switch (c) { case ',': yield return(CommaToken.Value); break; case '[': yield return(ReadValue(input, ref i)); break; case '{': yield return(OpenTableToken.Value); break; case '}': yield return(CloseTableToken.Value); break; default: var result = ReadTillEnd(input, ref i, out var bracketed); if (Tokens.TryGetValue(result, out var factory)) { yield return(factory()); break; } var dotIndex = result.IndexOf('.'); if (!string.IsNullOrEmpty(bracketed)) { if (dotIndex >= 0) { var schema = result.Substring(0, dotIndex); var table = result.Substring(dotIndex + 1); yield return(new ForeignKeyDetailsToken(table, bracketed, schema)); break; } yield return(new ForeignKeyDetailsToken(result, bracketed)); break; } if (dotIndex >= 0) { yield return(new ColumnTableReferenceToken(result.Substring(0, dotIndex), result.Substring(dotIndex + 1))); break; } if (DataTypeToken.TryParse(result, out var dataTypeToken)) { yield return(dataTypeToken); break; } yield return(new NameToken(result)); break; } } }