date and boolean data types added
This commit is contained in:
57
row.h
57
row.h
@@ -2,44 +2,48 @@
|
||||
|
||||
#include "exception.h"
|
||||
#include "parser.h"
|
||||
#include "settings.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace usql {
|
||||
|
||||
|
||||
struct ColValue {
|
||||
|
||||
virtual bool isNull() { return false; };
|
||||
virtual long getIntValue() = 0;
|
||||
virtual double getDoubleValue() = 0;
|
||||
virtual std::string getStringValue() = 0;
|
||||
virtual long getDateValue() = 0;
|
||||
virtual bool getBoolValue() = 0;
|
||||
|
||||
virtual int compare(ColValue * other) = 0;
|
||||
|
||||
virtual ~ColValue() = default;
|
||||
|
||||
};
|
||||
|
||||
|
||||
struct ColNullValue : ColValue {
|
||||
|
||||
bool isNull() override { return true; };
|
||||
long getIntValue() override { throw Exception("Not supported"); };
|
||||
double getDoubleValue() override { throw Exception("Not supported"); };
|
||||
std::string getStringValue() override { return "null"; };
|
||||
long getDateValue() override { throw Exception("Not supported"); };
|
||||
bool getBoolValue() override { throw Exception("Not supported"); };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
};
|
||||
|
||||
|
||||
struct ColIntegerValue : ColValue {
|
||||
|
||||
ColIntegerValue(long value) : m_integer(value) {};
|
||||
ColIntegerValue(const ColIntegerValue &other) : m_integer(other.m_integer) {};
|
||||
|
||||
long getIntValue() override { return m_integer; };
|
||||
double getDoubleValue() override { return (double) m_integer; };
|
||||
std::string getStringValue() override { return std::to_string(m_integer); };
|
||||
long getDateValue() override { return m_integer; };
|
||||
bool getBoolValue() override { throw Exception("Not supported"); };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
|
||||
@@ -48,13 +52,14 @@ namespace usql {
|
||||
|
||||
|
||||
struct ColDoubleValue : ColValue {
|
||||
|
||||
ColDoubleValue(double value) : m_double(value) {};
|
||||
ColDoubleValue(const ColDoubleValue &other) : m_double(other.m_double) {}
|
||||
|
||||
long getIntValue() override { return (long) m_double; };
|
||||
double getDoubleValue() override { return m_double; };
|
||||
std::string getStringValue() override { return std::to_string(m_double); };
|
||||
long getDateValue() override { return (long) m_double; };
|
||||
bool getBoolValue() override { throw Exception("Not supported"); };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
|
||||
@@ -63,19 +68,49 @@ namespace usql {
|
||||
|
||||
|
||||
struct ColStringValue : ColValue {
|
||||
|
||||
ColStringValue(const std::string &value) : m_string(value) {};
|
||||
ColStringValue(const ColStringValue &other) : m_string(other.m_string) {};
|
||||
|
||||
long getIntValue() override { return std::stoi(m_string); };
|
||||
double getDoubleValue() override { return std::stod(m_string); };
|
||||
std::string getStringValue() override { return m_string; };
|
||||
long getDateValue() override { return std::stoi(m_string); };
|
||||
bool getBoolValue() override { throw Exception("Not supported"); };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
|
||||
std::string m_string;
|
||||
};
|
||||
|
||||
struct ColDateValue : ColValue {
|
||||
ColDateValue(long value) : m_date(value) {};
|
||||
ColDateValue(const ColDateValue &other) : m_date(other.m_date) {};
|
||||
|
||||
long getIntValue() override { return m_date; };
|
||||
double getDoubleValue() override { return (double) m_date; };
|
||||
std::string getStringValue() override { return Settings::date_to_string(m_date); };
|
||||
long getDateValue() override { return m_date; };
|
||||
bool getBoolValue() override { throw Exception("Not supported"); };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
|
||||
long m_date; // seconds since epoch for now
|
||||
};
|
||||
|
||||
struct ColBooleanValue : ColValue {
|
||||
ColBooleanValue(bool value) : m_bool(value) {};
|
||||
ColBooleanValue(const ColBooleanValue &other) : m_bool(other.m_bool) {};
|
||||
|
||||
long getIntValue() override { return (long) m_bool; };
|
||||
double getDoubleValue() override { return (double) m_bool; };
|
||||
std::string getStringValue() override { return m_bool ? "Y" : "N"; };
|
||||
long getDateValue() override { throw Exception("Not supported"); };
|
||||
bool getBoolValue() override { return m_bool; };
|
||||
|
||||
int compare(ColValue * other) override;
|
||||
|
||||
bool m_bool;
|
||||
};
|
||||
|
||||
class Row {
|
||||
|
||||
@@ -87,9 +122,13 @@ namespace usql {
|
||||
bool operator==(const Row &other) const {return this->compare(other) == 0; };
|
||||
|
||||
void setColumnNull(int col_index);
|
||||
void setColumnValue(int col_index, long value);
|
||||
void setColumnValue(int col_index, double value);
|
||||
void setColumnValue(int col_index, const std::string &value);
|
||||
void setIntColumnValue(int col_index, long value);
|
||||
void setFloatColumnValue(int col_index, double value);
|
||||
void setStringColumnValue(int col_index, const std::string &value);
|
||||
void setDateColumnValue(int col_index, long value);
|
||||
void setDateColumnValue(int col_index, const std::string &value);
|
||||
void setBoolColumnValue(int col_index, bool value);
|
||||
void setBoolColumnValue(int col_index, const std::string &value);
|
||||
void setColumnValue(ColDefNode *col_def, ColValue *col_value);
|
||||
void setColumnValue(ColDefNode *col_def, ValueNode *col_value);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user