added blob type (progress)

This commit is contained in:
2024-01-22 07:11:35 +01:00
parent b158b41556
commit 102a7fc604
24 changed files with 240 additions and 149 deletions
@@ -1,4 +1,6 @@
#include "matador/sql/any_type_to_visitor.hpp"
#include "matador/sql/convert.hpp"
#include <cstring>
namespace matador::sql {
@@ -1,4 +1,4 @@
#include "matador/sql/types.hpp"
#include "matador/sql/data_type_traits.hpp"
#include "matador/sql/parameter_binder.hpp"
#include "matador/sql/query_result_reader.hpp"
@@ -245,4 +245,19 @@ void data_type_traits<std::string, void>::bind_result_value(result_parameter_bin
{
binder.bind_result_value(index, value, size);
}
void data_type_traits<utils::blob, void>::read_value(query_result_reader &reader, const char *id, size_t index, utils::blob &value)
{
}
void data_type_traits<utils::blob, void>::bind_value(parameter_binder &binder, size_t index, utils::blob &value)
{
}
void data_type_traits<utils::blob, void>::bind_result_value(result_parameter_binder &binder, size_t index, utils::blob &value)
{
}
}
+27 -27
View File
@@ -94,7 +94,7 @@ query_builder &query_builder::create()
{
initialize(command_t::CREATE, state_t::QUERY_CREATE);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::CREATE));
query_parts_.emplace_back(dialect::token_t::CREATE, dialect_.token_at(dialect::token_t::CREATE));
return *this;
}
@@ -103,7 +103,7 @@ query_builder &query_builder::drop()
{
initialize(command_t::DROP, state_t::QUERY_DROP);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::DROP));
query_parts_.emplace_back(dialect::token_t::DROP, dialect_.token_at(dialect::token_t::DROP));
return *this;
}
@@ -117,7 +117,7 @@ query_builder &query_builder::select(const std::vector<column> &columns)
{
initialize(command_t::SELECT, state_t::QUERY_SELECT);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::SELECT) + " ");
query_parts_.emplace_back(dialect::token_t::SELECT, dialect_.token_at(dialect::token_t::SELECT) + " ");
query_.prototype.clear();
@@ -141,7 +141,7 @@ query_builder &query_builder::select(const std::vector<column> &columns)
}
}
query_parts_.emplace_back(result);
query_parts_.emplace_back(dialect::token_t::COLUMNS, result);
return *this;
}
@@ -149,7 +149,7 @@ query_builder &query_builder::insert()
{
initialize(command_t::INSERT, state_t::QUERY_INSERT);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::INSERT));
query_parts_.emplace_back(dialect::token_t::INSERT, dialect_.token_at(dialect::token_t::INSERT));
return *this;
}
@@ -159,7 +159,7 @@ query_builder &query_builder::update(const std::string &table)
initialize(command_t::UPDATE, state_t::QUERY_UPDATE);
query_.table_name = table;
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::UPDATE) + " " + dialect_.prepare_identifier(table));
query_parts_.emplace_back(dialect::token_t::UPDATE, dialect_.token_at(dialect::token_t::UPDATE) + " " + dialect_.prepare_identifier(table));
return *this;
}
@@ -168,7 +168,7 @@ query_builder &query_builder::remove()
{
initialize(command_t::REMOVE, state_t::QUERY_DELETE);
query_parts_.emplace_back(dialect_.token_at(dialect::token_t::REMOVE));
query_parts_.emplace_back(dialect::token_t::REMOVE, dialect_.token_at(dialect::token_t::REMOVE));
return *this;
}
@@ -197,7 +197,7 @@ query_builder &query_builder::table(const std::string &table, const std::vector<
{
transition_to(state_t::QUERY_TABLE_CREATE);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::TABLE) + " " + dialect_.prepare_identifier(table) + " ");
query_parts_.emplace_back(dialect::token_t::TABLE, " " + dialect_.token_at(dialect::token_t::TABLE) + " " + dialect_.prepare_identifier(table) + " ");
query_.table_name = table;
std::string result = "(";
@@ -228,7 +228,7 @@ query_builder &query_builder::table(const std::string &table, const std::vector<
}
result += ")";
query_parts_.emplace_back(result);
query_parts_.emplace_back(dialect::token_t::COLUMNS, result);
return *this;
}
@@ -236,7 +236,7 @@ query_builder &query_builder::table(const std::string &table)
{
transition_to(state_t::QUERY_TABLE_DROP);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::TABLE) + " " + dialect_.prepare_identifier(table));
query_parts_.emplace_back(dialect::token_t::TABLE, " " + dialect_.token_at(dialect::token_t::TABLE) + " " + dialect_.prepare_identifier(table));
query_.table_name = table;
return *this;
@@ -251,7 +251,7 @@ query_builder &query_builder::into(const std::string &table, const std::vector<s
{
transition_to(state_t::QUERY_INTO);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::INTO) + " " + dialect_.prepare_identifier(table) + " ");
query_parts_.emplace_back(dialect::token_t::INTO, " " + dialect_.token_at(dialect::token_t::INTO) + " " + dialect_.prepare_identifier(table) + " ");
query_.table_name = table;
std::string result{"("};
@@ -269,7 +269,7 @@ query_builder &query_builder::into(const std::string &table, const std::vector<s
}
result += (")");
query_parts_.emplace_back(result);
query_parts_.emplace_back(dialect::token_t::COLUMNS, result);
return *this;
}
@@ -282,7 +282,7 @@ query_builder &query_builder::values(const std::vector<any_type> &values)
{
transition_to(state_t::QUERY_VALUES);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::VALUES) + " ");
query_parts_.emplace_back(dialect::token_t::VALUES, " " + dialect_.token_at(dialect::token_t::VALUES) + " ");
std::string result{"("};
if (values.size() < 2) {
@@ -307,7 +307,7 @@ query_builder &query_builder::values(const std::vector<any_type> &values)
}
result += (")");
query_parts_.emplace_back(result);
query_parts_.emplace_back(dialect::token_t::INSERT_VALUES, result);
return *this;
}
@@ -316,11 +316,11 @@ query_builder &query_builder::from(const std::string &table, const std::string &
transition_to(state_t::QUERY_FROM);
if (dialect_.default_schema_name().empty()) {
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::FROM) +
query_parts_.emplace_back(dialect::token_t::FROM, " " + dialect_.token_at(dialect::token_t::FROM) +
" " + dialect_.prepare_identifier(table) +
(as.empty() ? "" : " " + as));
} else {
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::FROM) +
query_parts_.emplace_back(dialect::token_t::FROM, " " + dialect_.token_at(dialect::token_t::FROM) +
" " + dialect_.prepare_identifier(dialect_.default_schema_name()) +
"." + dialect_.prepare_identifier(table) +
(as.empty() ? "" : " " + as));
@@ -349,7 +349,7 @@ query_builder &query_builder::set(const std::vector<key_value_pair> &key_values)
{
transition_to(state_t::QUERY_SET);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::SET) + " ");
query_parts_.emplace_back(dialect::token_t::SET, " " + dialect_.token_at(dialect::token_t::SET) + " ");
std::string result;
if (key_values.size() < 2) {
@@ -374,7 +374,7 @@ query_builder &query_builder::set(const std::vector<key_value_pair> &key_values)
}
}
query_parts_.emplace_back(result);
query_parts_.emplace_back(dialect::token_t::UPDATE_VALUES, result);
return *this;
}
@@ -382,8 +382,8 @@ query_builder &query_builder::where(const basic_condition &cond)
{
transition_to(state_t::QUERY_WHERE);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::WHERE) + " ");
query_parts_.emplace_back(cond.evaluate(const_cast<dialect &>(dialect_), query_));
query_parts_.emplace_back(dialect::token_t::WHERE, " " + dialect_.token_at(dialect::token_t::WHERE) + " ");
query_parts_.emplace_back(dialect::token_t::WHERE_CLAUSE, cond.evaluate(const_cast<dialect &>(dialect_), query_));
return *this;
}
@@ -392,7 +392,7 @@ query_builder &query_builder::order_by(const std::string &column)
{
transition_to(state_t::QUERY_ORDER_BY);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::ORDER_BY) + " " + dialect_.prepare_identifier(column));
query_parts_.emplace_back(dialect::token_t::ORDER_BY, " " + dialect_.token_at(dialect::token_t::ORDER_BY) + " " + dialect_.prepare_identifier(column));
return *this;
}
@@ -401,7 +401,7 @@ query_builder &query_builder::group_by(const std::string &column)
{
transition_to(state_t::QUERY_GROUP_BY);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::GROUP_BY) + " " + dialect_.prepare_identifier(column));
query_parts_.emplace_back(dialect::token_t::GROUP_BY, " " + dialect_.token_at(dialect::token_t::GROUP_BY) + " " + dialect_.prepare_identifier(column));
return *this;
}
@@ -410,7 +410,7 @@ query_builder &query_builder::asc()
{
transition_to(state_t::QUERY_ORDER_DIRECTION);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::ASC));
query_parts_.emplace_back(dialect::token_t::ASC, " " + dialect_.token_at(dialect::token_t::ASC));
return *this;
}
@@ -419,7 +419,7 @@ query_builder &query_builder::desc()
{
transition_to(state_t::QUERY_ORDER_DIRECTION);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::DESC));
query_parts_.emplace_back(dialect::token_t::DESC, " " + dialect_.token_at(dialect::token_t::DESC));
return *this;
}
@@ -428,7 +428,7 @@ query_builder &query_builder::offset(size_t count)
{
transition_to(state_t::QUERY_OFFSET);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::OFFSET) + " " + std::to_string(count));
query_parts_.emplace_back(dialect::token_t::OFFSET, " " + dialect_.token_at(dialect::token_t::OFFSET) + " " + std::to_string(count));
return *this;
}
@@ -437,7 +437,7 @@ query_builder &query_builder::limit(size_t count)
{
transition_to(state_t::QUERY_LIMIT);
query_parts_.emplace_back(" " + dialect_.token_at(dialect::token_t::LIMIT) + " " + std::to_string(count));
query_parts_.emplace_back(dialect::token_t::LIMIT, " " + dialect_.token_at(dialect::token_t::LIMIT) + " " + std::to_string(count));
return *this;
}
@@ -445,7 +445,7 @@ query_builder &query_builder::limit(size_t count)
query_context query_builder::compile()
{
for (const auto &part: query_parts_) {
query_.sql.append(part);
query_.sql.append(part.part);
}
query_.command_name = command_strings_[command_];
return query_;
+5
View File
@@ -98,6 +98,11 @@ void query_result_reader::read_value(const char *id, size_t index, std::string &
value.assign(column(index));
}
void query_result_reader::read_value(const char *id, size_t index, utils::blob &value)
{
}
template < typename Type >
void convert(const char *valstr, sql::any_type &value)
{