date and boolean data types added

This commit is contained in:
2021-08-06 22:46:48 +02:00
parent 4b95be1e31
commit 15a065c2aa
17 changed files with 1123 additions and 907 deletions

View File

@@ -2,8 +2,10 @@
#include "lexer.h"
#include "exception.h"
#include <string>
#include "ml_date.h"
#include "settings.h"
#include <string>
#include <vector>
namespace usql {
@@ -11,7 +13,9 @@ namespace usql {
enum class ColumnType {
integer_type,
float_type,
varchar_type
varchar_type,
date_type,
bool_type
};
enum class NodeType {
@@ -20,6 +24,7 @@ namespace usql {
int_value,
float_value,
string_value,
bool_value,
database_value,
logical_operator,
relational_operator,
@@ -109,11 +114,13 @@ namespace usql {
ValueNode(NodeType type) : Node(type) {}
virtual bool isNull() { return false; }
virtual long getIntValue() = 0;
virtual long getIntegerValue() = 0;
virtual double getDoubleValue() = 0;
virtual std::string getStringValue() = 0;
virtual long getDateValue() = 0;
virtual bool getBooleanValue() = 0;
virtual ~ValueNode() {};
virtual ~ValueNode() = default;
};
struct NullValueNode : ValueNode {
@@ -122,9 +129,11 @@ namespace usql {
bool isNull() override { return true; }
long getIntValue() override { throw Exception("not supported on null value"); };
long getIntegerValue() override { throw Exception("not supported on null value"); };
double getDoubleValue() override { throw Exception("not supported on null value"); };
std::string getStringValue() override { throw Exception("not supported on null value"); };
long getDateValue() override { throw Exception("not supported on null value"); };
bool getBooleanValue() override { return false; };
};
struct IntValueNode : ValueNode {
@@ -132,9 +141,11 @@ namespace usql {
IntValueNode(long value) : ValueNode(NodeType::int_value), value(value) {}
long getIntValue() override { return value; };
long getIntegerValue() override { return value; };
double getDoubleValue() override { return (double) value; };
std::string getStringValue() override { return std::to_string(value); }
long getDateValue() override { return value; };
bool getBooleanValue() override { return value != 0; };
};
struct DoubleValueNode : ValueNode {
@@ -142,9 +153,11 @@ namespace usql {
DoubleValueNode(double value) : ValueNode(NodeType::float_value), value(value) {}
long getIntValue() override { return (long) value; };
long getIntegerValue() override { return (long) value; };
double getDoubleValue() override { return value; };
std::string getStringValue() override { return std::to_string(value); }
long getDateValue() override { return (long) value; };
bool getBooleanValue() override { return value != 0.0; };
};
struct StringValueNode : ValueNode {
@@ -152,11 +165,26 @@ namespace usql {
StringValueNode(std::string value) : ValueNode(NodeType::string_value), value(value) {}
long getIntValue() override { return std::stoi(value); };
long getIntegerValue() override { return std::stoi(value); };
double getDoubleValue() override { return std::stod(value); };
std::string getStringValue() override { return value; };
long getDateValue() override { return Settings::string_to_date(value); };
bool getBooleanValue() override { return value == "true"; };
};
struct BooleanValueNode : ValueNode {
bool value;
BooleanValueNode(bool value) : ValueNode(NodeType::bool_value), value(value) {}
long getIntegerValue() override { return (long) value; };
double getDoubleValue() override { return (double) value; };
std::string getStringValue() override { return value ? "true" : "false"; }
long getDateValue() override { return (long) value; };
bool getBooleanValue() override { return value; };
};
struct DatabaseValueNode : Node {
std::string col_name;