date and boolean data types added
This commit is contained in:
44
parser.h
44
parser.h
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user