Пример #1
0
        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;
        }
Пример #2
0
        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;
                }
            }
        }