Kea  2.3.5-git
versioned_csv_file.h
Go to the documentation of this file.
1 // Copyright (C) 2015,2017 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef VERSIONED_CSV_FILE_H
8 #define VERSIONED_CSV_FILE_H
9 
10 #include <util/csv_file.h>
11 
12 namespace isc {
13 namespace util {
14 
17 public:
18  VersionedCSVFileError(const char* file, size_t line, const char* what) :
19  isc::Exception(file, line, what) { };
20 };
21 
24 public:
32  VersionedColumn(const std::string& name, const std::string& version,
33  const std::string& default_value = "")
34  : name_(name), version_(version), default_value_(default_value) {
35  };
36 
38  virtual ~VersionedColumn(){};
39 
41  std::string name_;
42 
45  std::string version_;
46 
49  std::string default_value_;
50 };
51 
53 typedef boost::shared_ptr<VersionedColumn> VersionedColumnPtr;
54 
120 class VersionedCSVFile : public CSVFile {
121 public:
122 
129  NEEDS_DOWNGRADE
130  };
131 
135  VersionedCSVFile(const std::string& filename);
136 
138  virtual ~VersionedCSVFile();
139 
154  void addColumn(const std::string& col_name, const std::string& version,
155  const std::string& default_value = "");
156 
162  void setMinimumValidColumns(const std::string& column_name);
163 
166  size_t getMinimumValidColumns() const;
167 
169  size_t getInputHeaderCount() const;
170 
178  size_t getValidColumnCount() const;
179 
197  virtual void open(const bool seek_to_end = false);
198 
208  virtual void recreate();
209 
230  bool next(CSVRow& row);
231 
236  std::string getInputSchemaVersion() const;
237 
243  std::string getSchemaVersion() const;
244 
250  const VersionedColumnPtr& getVersionedColumn(const size_t index) const;
251 
260  enum InputSchemaState getInputSchemaState() const;
261 
263  bool needsConversion() const;
264 
265 protected:
266 
280  virtual bool validateHeader(const CSVRow& header);
281 
289  void columnCountError(const CSVRow& row, const std::string& reason);
290 
291 private:
293  std::vector<VersionedColumnPtr> columns_;
294 
298  size_t valid_column_count_;
299 
302  size_t minimum_valid_columns_;
303 
307  size_t input_header_count_;
308 
310  enum InputSchemaState input_schema_state_;
311 };
312 
313 
314 } // namespace isc::util
315 } // namespace isc
316 
317 #endif // VERSIONED_CSV_FILE_H
std::string default_value_
default_value The value the column should be assigned if it is not present in a data row...
InputSchemaState
Possible input file schema states.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Contains the metadata for a single column in a file.
virtual ~VersionedColumn()
Destructor.
boost::shared_ptr< VersionedColumn > VersionedColumnPtr
Defines a smart pointer to VersionedColumn.
VersionedColumn(const std::string &name, const std::string &version, const std::string &default_value="")
Constructor.
int version()
returns Kea hooks version.
Represents a single row of the CSV file.
Definition: csv_file.h:51
Exception thrown when an error occurs during CSV file processing.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-lfc.
Implements a CSV file that supports multiple versions of the file&#39;s "schema".
const Name & name_
Definition: dns/message.cc:693
VersionedCSVFileError(const char *file, size_t line, const char *what)
Provides input/output access to CSV files.
Definition: csv_file.h:358
std::string version_
Text representation of the schema version in which this column first appeared.