Kea 2.7.5
versioned_csv_file.h
Go to the documentation of this file.
1// Copyright (C) 2015-2024 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
12namespace isc {
13namespace util {
14
17public:
18 VersionedCSVFileError(const char* file, size_t line, const char* what) :
19 isc::Exception(file, line, what) { }
20};
21
24public:
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
53typedef boost::shared_ptr<VersionedColumn> VersionedColumnPtr;
54
120class VersionedCSVFile : public CSVFile {
121public:
122
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
261
263 bool needsConversion() const;
264
265protected:
266
280 virtual bool validateHeader(const CSVRow& header);
281
289 void columnCountError(const CSVRow& row, const std::string& reason);
290
291private:
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
int version()
returns Kea hooks version.
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Provides input/output access to CSV files.
Definition csv_file.h:358
Represents a single row of the CSV file.
Definition csv_file.h:51
Exception thrown when an error occurs during CSV file processing.
VersionedCSVFileError(const char *file, size_t line, const char *what)
Implements a CSV file that supports multiple versions of the file's "schema".
bool needsConversion() const
Returns true if the input file schema state is not CURRENT.
virtual void open(const bool seek_to_end=false)
Opens existing file or creates a new one.
virtual ~VersionedCSVFile()
Destructor.
const VersionedColumnPtr & getVersionedColumn(const size_t index) const
Fetch the column descriptor for a given index.
std::string getSchemaVersion() const
text version of current schema supported by the file's metadata
InputSchemaState
Possible input file schema states.
size_t getInputHeaderCount() const
Returns the number of columns found in the input header.
virtual bool validateHeader(const CSVRow &header)
Validates the header of a VersionedCSVFile.
VersionedCSVFile(const std::string &filename)
Constructor.
std::string getInputSchemaVersion() const
Returns the schema version of the physical file.
virtual void recreate()
Creates a new CSV file.
void setMinimumValidColumns(const std::string &column_name)
Sets the minimum number of valid columns based on a given column.
bool next(CSVRow &row)
Reads next row from the file file.
void addColumn(const std::string &col_name, const std::string &version, const std::string &default_value="")
Adds metadata for a single column to the schema.
size_t getMinimumValidColumns() const
Returns the minimum number of columns which must be present for the file to be considered valid.
void columnCountError(const CSVRow &row, const std::string &reason)
Convenience method for adding an error message.
size_t getValidColumnCount() const
Returns the number of valid columns found in the header For newly created files this will always matc...
enum InputSchemaState getInputSchemaState() const
Fetches the state of the input file's schema.
Contains the metadata for a single column in a file.
std::string default_value_
default_value The value the column should be assigned if it is not present in a data row.
virtual ~VersionedColumn()
Destructor.
std::string version_
Text representation of the schema version in which this column first appeared.
std::string name_
Name of the column.
VersionedColumn(const std::string &name, const std::string &version, const std::string &default_value="")
Constructor.
boost::shared_ptr< VersionedColumn > VersionedColumnPtr
Defines a smart pointer to VersionedColumn.
Defines the logger used by the top-level component of kea-lfc.