|
- #pragma once
-
- #include <cppcore/conversion/enum.h>
- #include <cppcore/conversion/string.h>
-
- #include "statement.h"
-
- namespace cppmariadb
- {
-
- /* statement *********************************************************************************/
-
- statement::statement()
- : _changed (true)
- , _connection (nullptr)
- { }
-
- statement::statement(const std::string& query)
- : _changed (true)
- , _connection (nullptr)
- { parse(query); }
-
- void statement::assign(const std::string& query)
- {
- _changed = true;
- parse(query);
- }
-
- const std::string& statement::query(const connection& con) const
- {
- if (_changed || &con != _connection)
- build(con);
- return _query;
- }
-
- size_t statement::find(const std::string& param)
- {
- for (size_t i = 0; i < _parameters.size(); ++i)
- {
- if (_parameters.at(i).first == param)
- return i;
- }
- return npos;
- }
-
- void statement::set_null(const std::string& param)
- {
- auto i = find(param);
- if (i == npos)
- throw exception(std::string("unknown parameter name in statement: ") + param, error_code::Unknown);
- set_null(i);
- }
-
- void statement::set_null(size_t index)
- {
- if (index >= _parameters.size())
- throw exception(std::string("unknown parameter index in statement: ") + std::to_string(index), error_code::Unknown);
- auto& param = _parameters.at(index).second;
- param.has_value = false;
- _changed = true;
- }
-
- bool statement::empty() const
- { return _code.empty(); }
-
- void statement::clear()
- {
- for (auto& param : _parameters)
- param.second.has_value = false;
- }
-
- template<class T>
- void statement::set(const std::string& param, const T& value)
- {
- auto i = find(param);
- if (i == npos)
- throw exception(std::string("unknown parameter name in query: ") + param, error_code::Unknown);
- set<T>(i, value);
- }
-
- template<class T>
- void statement::set(size_t index, const T& value)
- {
- if (index >= _parameters.size())
- throw exception(std::string("unknown parameter index in query: ") + std::to_string(index), error_code::Unknown);
- auto& param = _parameters.at(index).second;
- param.has_value = true;
- param.value = cppcore::to_string(value);
- _changed = true;
- }
-
- }
|