implemented sqlite fetch
This commit is contained in:
@@ -51,7 +51,6 @@ set(UTILS_HEADER
|
||||
../include/matador/utils/library.hpp
|
||||
../include/matador/utils/os.hpp
|
||||
../include/matador/utils/access.hpp
|
||||
../include/matador/utils/identifiable.hpp
|
||||
../include/matador/utils/identifier.hpp
|
||||
../include/matador/utils/cascade_type.hpp)
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "matador/sql/column_generator.hpp"
|
||||
|
||||
#include "matador/utils/identifiable.hpp"
|
||||
|
||||
namespace matador::sql {
|
||||
|
||||
column_generator::column_generator(std::vector<column> &columns)
|
||||
@@ -17,80 +15,9 @@ void column_generator::on_revision(const char *id, unsigned long long int &x)
|
||||
on_attribute(id, x);
|
||||
}
|
||||
|
||||
void column_generator::on_belongs_to(const char *id, utils::identifiable &x, utils::cascade_type)
|
||||
void fk_column_generator::on_primary_key(const char *, std::string &, size_t size)
|
||||
{
|
||||
columns_.push_back(fk_column_generator_.generate(id, x));
|
||||
type_ = data_type_traits<std::string>::builtin_type(size);
|
||||
}
|
||||
|
||||
void column_generator::on_has_one(const char *id, utils::identifiable &x, utils::cascade_type)
|
||||
{
|
||||
columns_.push_back(fk_column_generator_.generate(id, x));
|
||||
}
|
||||
|
||||
column fk_column_generator::generate(const char *id, utils::identifiable &x)
|
||||
{
|
||||
x.primary_key().serialize(*this);
|
||||
return column{id, type_, { utils::constraints::FOREIGN_KEY }};
|
||||
}
|
||||
|
||||
template < typename Type >
|
||||
data_type_t determine_data_type(const Type &)
|
||||
{
|
||||
return data_type_traits<Type>::builtin_type(0);
|
||||
}
|
||||
|
||||
data_type_t determine_data_type(const std::string&, size_t size)
|
||||
{
|
||||
return data_type_traits<std::string>::builtin_type(size);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(short &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(int &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(long &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(long long int &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(unsigned short &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(unsigned int &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(unsigned long &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(unsigned long long int &i, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(i);
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(std::string &x, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = determine_data_type(x, attributes.size());
|
||||
}
|
||||
|
||||
void fk_column_generator::serialize(utils::null_type_t &type, const utils::field_attributes &attributes)
|
||||
{
|
||||
type_ = data_type_t::type_null;
|
||||
}
|
||||
}
|
||||
@@ -16,14 +16,4 @@ void column_name_generator::on_revision(const char *id, unsigned long long int &
|
||||
column_names_.emplace_back(id);
|
||||
}
|
||||
|
||||
void column_name_generator::on_belongs_to(const char *id, utils::identifiable &, utils::cascade_type)
|
||||
{
|
||||
column_names_.emplace_back(id);
|
||||
}
|
||||
|
||||
void column_name_generator::on_has_one(const char *id, utils::identifiable &, utils::cascade_type)
|
||||
{
|
||||
column_names_.emplace_back(id);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -65,7 +65,8 @@ const connection_info &connection::info() const
|
||||
|
||||
query_result<record> connection::fetch(const std::string &sql)
|
||||
{
|
||||
return query_result<record>(connection_->fetch(sql));
|
||||
auto rec = connection_->describe("person");
|
||||
return {connection_->fetch(sql), [rec](){ return new record(rec); }};
|
||||
}
|
||||
|
||||
std::pair<size_t, std::string> connection::execute(const std::string &sql)
|
||||
|
||||
+27
-17
@@ -97,27 +97,32 @@ query_builder& query_builder::drop() {
|
||||
return *this;
|
||||
}
|
||||
|
||||
query_builder& query_builder::select(std::initializer_list<std::string> column_names) {
|
||||
initialize(command_t::SELECT, state_t::QUERY_SELECT);
|
||||
query_builder& query_builder::select(std::initializer_list<std::string> column_names)
|
||||
{
|
||||
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_at(dialect::token_t::SELECT) + " ");
|
||||
|
||||
std::string result;
|
||||
if (column_names.size() < 2) {
|
||||
for (const auto &col : column_names) {
|
||||
result.append(dialect_.prepare_identifier(col));
|
||||
}
|
||||
} else {
|
||||
auto it = column_names.begin();
|
||||
result.append(dialect_.prepare_identifier(*it++));
|
||||
for (; it != column_names.end(); ++it) {
|
||||
result.append(", ");
|
||||
result.append(dialect_.prepare_identifier(*it));
|
||||
}
|
||||
prototype_.clear();
|
||||
|
||||
std::string result;
|
||||
if (column_names.size() < 2) {
|
||||
for (const auto &col : column_names) {
|
||||
result.append(dialect_.prepare_identifier(col));
|
||||
prototype_.append(column{col});
|
||||
}
|
||||
} else {
|
||||
auto it = column_names.begin();
|
||||
result.append(dialect_.prepare_identifier(*it++));
|
||||
for (; it != column_names.end(); ++it) {
|
||||
result.append(", ");
|
||||
result.append(dialect_.prepare_identifier(*it));
|
||||
prototype_.append(column{*it});
|
||||
}
|
||||
}
|
||||
|
||||
query_parts_.emplace_back(result);
|
||||
return *this;
|
||||
query_parts_.emplace_back(result);
|
||||
return *this;
|
||||
}
|
||||
|
||||
query_builder& query_builder::insert() {
|
||||
@@ -393,6 +398,11 @@ std::string query_builder::compile() {
|
||||
return result;
|
||||
}
|
||||
|
||||
const record& query_builder::prototype() const
|
||||
{
|
||||
return prototype_;
|
||||
}
|
||||
|
||||
void query_builder::transition_to(query_builder::state_t next)
|
||||
{
|
||||
if (transitions_[state_].count(next) == 0) {
|
||||
|
||||
@@ -22,14 +22,10 @@ void query_result_impl::on_attribute(const char *id, std::string &value, const u
|
||||
read_value(id, column_index_++, value, attr.size());
|
||||
}
|
||||
|
||||
void query_result_impl::on_belongs_to(const char *id, utils::identifiable &x, utils::cascade_type)
|
||||
void
|
||||
query_result_impl::on_attribute(const char *id, any_type &value, data_type_t type, const utils::field_attributes &attr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void query_result_impl::on_has_one(const char *id, utils::identifiable &x, utils::cascade_type)
|
||||
{
|
||||
|
||||
read_value(id, column_index_++, value, type, attr.size());
|
||||
}
|
||||
|
||||
}
|
||||
+13
-2
@@ -15,7 +15,7 @@ const column &record::at(const std::string &name) const
|
||||
return columns_by_name_.at(name).first;
|
||||
}
|
||||
|
||||
const column &record::at(size_t index)
|
||||
const column &record::at(size_t index) const
|
||||
{
|
||||
return columns_.at(index);
|
||||
}
|
||||
@@ -72,4 +72,15 @@ size_t record::size() const
|
||||
return columns_.size();
|
||||
}
|
||||
|
||||
}
|
||||
bool record::empty() const
|
||||
{
|
||||
return columns_.empty();
|
||||
}
|
||||
|
||||
void record::clear()
|
||||
{
|
||||
columns_.clear();
|
||||
columns_by_name_.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user