#include "my-column.h" #include "my-selectcommand.h" #include "my-error.h" #include #include MySQL::ColumnBase::ColumnBase(const char * name, unsigned int i) : DB::Column(name, i), is_null(false), length(0) { } bool MySQL::ColumnBase::isNull() const { return is_null; } MySQL::StringColumn::StringColumn(const char * name, unsigned int field, MYSQL_BIND * b, unsigned int len) : ColumnBase(name, field), value(len), length(0) { b->is_null = &is_null; b->buffer_type = MYSQL_TYPE_STRING; b->is_unsigned = 0; b->buffer = value.data(); b->buffer_length = len; b->length = &length; } void MySQL::StringColumn::apply(DB::HandleField & h) const { if (is_null) { h.null(); } else { h.string({ value.data(), length }); } } MySQL::NullColumn::NullColumn(const char * name, unsigned int field, MYSQL_BIND * b) : ColumnBase(name, field) { b->is_null = &is_null; b->buffer_type = MYSQL_TYPE_NULL; b->buffer = nullptr; b->buffer_length = 0; } void MySQL::NullColumn::apply(DB::HandleField & h) const { h.null(); } namespace MySQL { template Column::Column(const char * name, unsigned int field, MYSQL_BIND * b) : ColumnBase(name, field) { b->is_null = &is_null; b->buffer_type = MT; b->is_unsigned = 0; b->buffer = &value; b->buffer_length = sizeof(T); } template <> void Column::apply(DB::HandleField & h) const { if (is_null) { h.null(); } else { h.integer(value); } } template <> void Column::apply(DB::HandleField & h) const { if (is_null) { h.null(); } else { h.floatingpoint(value); } } template <> void Column::apply(DB::HandleField & h) const { if (is_null) { h.null(); } else { h.timestamp(boost::posix_time::ptime( boost::gregorian::date(value.year, value.month, value.day), boost::posix_time::time_duration(value.hour, value.minute, value.second) + boost::posix_time::microseconds(value.second_part))); } } template <> void Column::apply(DB::HandleField & h) const { if (is_null) { h.null(); } else { h.interval( boost::posix_time::time_duration(value.hour, value.minute, value.second) + boost::posix_time::microseconds(value.second_part)); } } template class Column; template class Column; template class Column; template class Column; }