/*
  *  Given a set of GTFS column of a table,
  *  returns a list of column from the set with their
  *  specification for the database.
  *  Specification include: column datatype and can have null or not.
  */
 private List <string> GetColumns(GTFSColumnSet gtfsColumnSet)
 {
     return(gtfsColumnSet
            .Select(column => $"{column.name} {column.type} " +
                    $"{(column.primaryKey | !column.allowNull ? " NOT NULL " : " NULL")}")
            .ToList());
 }
        private List <string> GetPrimaryKeys(GTFSColumnSet gtfsColumnSet)
        {
            var primaryKeys = new List <string>();

            foreach (var column in gtfsColumnSet)
            {
                if (column.primaryKey)
                {
                    primaryKeys.Add(column.name);
                }
            }
            return(primaryKeys);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var columnSet = new GTFSColumnSet();

            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                case JsonToken.EndObject:
                    return(columnSet);

                case JsonToken.PropertyName:
                    var columnName = (string)reader.Value;
                    reader.Read();
                    var column = serializer.Deserialize <GTFSColumn>(reader);
                    column.name = columnName;
                    columnSet.Add(column);
                    break;
                }
            }
            return(columnSet);
        }