added blob type (progress)
This commit is contained in:
@@ -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
@@ -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_;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user