Line data Source code
1 : /*! @brief This file have the interface for DataAccess class.
2 : @file dataaccess.h
3 : @author Alvaro Denis <denisacostaq@gmail.com>
4 : @date 6/22/2019
5 :
6 : @copyright
7 : @attention <h1><center><strong>COPYRIGHT © 2019 </strong>
8 : [<strong>denisacostaq</strong>][denisacostaq-URL].
9 : All rights reserved.</center></h1>
10 : @attention This file is part of [<strong>DAQs</strong>][DAQs-URL].
11 :
12 : Redistribution and use in source and binary forms, with or without
13 : modification, are permitted provided that the following conditions
14 : are met:
15 : - 1. Redistributions of source code must retain the above copyright
16 : notice, this list of conditions and the following disclaimer.
17 : - 2. Redistributions in binary form must reproduce the above copyright
18 : notice, this list of conditions and the following disclaimer in the
19 : documentation and/or other materials provided with the distribution.
20 : - 3. Neither the name of the University nor the names of its contributors
21 : may be used to endorse or promote products derived from this software
22 : without specific prior written permission.
23 :
24 : THIS PRODUCT IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 : AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 : IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 : ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
28 : DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 : (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 : LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 : ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 : (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33 : THIS PRODUCT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 :
35 : [denisacostaq-URL]: https://about.me/denisacostaq "Alvaro Denis Acosta"
36 : [DAQs-URL]: https://github.com/denisacostaq/DAQs "DAQs"
37 : */
38 : #ifndef DATABASESERVER_DATAACCESS_H
39 : #define DATABASESERVER_DATAACCESS_H
40 :
41 : #include "src/database-server/data-access/idataaccess.h"
42 : #include "src/database-server/data-source/idatasource.h"
43 :
44 32 : class DataAccess : public IDataAccess {
45 : public:
46 : explicit DataAccess(IDataSource* ds) noexcept;
47 :
48 : /**
49 : * @brief add_variable add a new variable.
50 : * @param var variable info.
51 : * @return Ok on success.
52 : * @sa IDataAccess::add_variable
53 : */
54 : Err add_variable(const Variable& var) noexcept override;
55 :
56 : /**
57 : * @brief add_variable_value add a new value for a given variable.
58 : * @param var variable value.
59 : * @return Ok on success.
60 : * @sa IDataAccess::add_variable_value
61 : */
62 : Err add_variable_value(const VarValue& var) noexcept override;
63 :
64 : /**
65 : * @brief fetch_variables get all variables.
66 : * @return a vector with the variables.
67 : * @sa IDataSource::add_variable
68 : */
69 : std::tuple<std::vector<Variable>, Err> fetch_variables() noexcept override;
70 :
71 : /**
72 : * @brief fetch_variable_values get values for a given variable.
73 : * @param var_name variable name.
74 : * @param max_len TODO(denisacostaq@gmail.com): not implemented yet
75 : * @return a vector of values if any and an error code.
76 : * @sa IDataAccess::fetch_variable_values
77 : */
78 : std::tuple<std::vector<VarValue>, Err> fetch_variable_values(
79 : const std::string& var_name, size_t max_len) noexcept override;
80 :
81 : /**
82 : * @brief fetch_variable_values get values for a given variable in a period.
83 : * @param var variable value.
84 : * @param start_date start date.
85 : * @param end_date end date
86 : * @param max_len TODO(denisacostaq@gmail.com): not implemented yet
87 : * @return a vector of values if any and an error code.
88 : * @sa IDataAccess::fetch_variable_values
89 : */
90 : std::tuple<std::vector<VarValue>, Err> fetch_variable_values(
91 : const std::string& var_name,
92 : const std::chrono::system_clock::time_point& start_date,
93 : const std::chrono::system_clock::time_point& end_date,
94 : size_t max_len) noexcept override;
95 :
96 : /**
97 : * @brief compress a dumy compression algorithm
98 : * @param in_vals input values.
99 : * @param out_vals output(compressed) values.
100 : * @param max_len len of the compressed values.
101 : * @return Err::Ok on success.
102 : */
103 : Err compress(const std::vector<VarValue>& in_vals,
104 : std::vector<VarValue>* out_vals, size_t max_len) noexcept;
105 :
106 : private:
107 : IDataSource* ds_;
108 : };
109 : #endif // DATABASESERVER_DATAACCESS_H
|