HyriseSQLParser/src/sql_tests.cpp

82 lines
2.8 KiB
C++
Raw Normal View History

2014-10-09 01:30:22 +02:00
/*
* sql_tests.cpp
*/
2014-12-03 16:32:56 +01:00
#include "tests/test.h"
#include "SQLParser.h"
2014-12-02 01:27:02 +01:00
#include "sqlhelper.h"
2014-11-26 16:20:55 +01:00
using namespace hsql;
2014-10-09 01:30:22 +02:00
2014-12-02 01:27:02 +01:00
TEST(Delete) {
2014-11-26 16:20:55 +01:00
StatementList* stmt_list = SQLParser::parseSQLString("DELETE FROM students WHERE grade > 2.0;");
ASSERT(stmt_list->isValid);
2014-11-26 18:20:10 +01:00
ASSERT_EQ(stmt_list->size(), 1);
2014-11-26 16:20:55 +01:00
ASSERT(stmt_list->at(0)->type == kStmtDelete);
2014-10-09 01:30:22 +02:00
2014-11-26 16:20:55 +01:00
DeleteStatement* stmt = (DeleteStatement*) stmt_list->at(0);
ASSERT_STREQ(stmt->table_name, "students");
2014-11-26 18:20:10 +01:00
ASSERT_NOTNULL(stmt->expr);
2014-11-26 16:20:55 +01:00
ASSERT(stmt->expr->isType(kExprOperator));
ASSERT_STREQ(stmt->expr->expr->name, "grade");
ASSERT_EQ(stmt->expr->expr2->fval, 2.0);
2014-10-09 01:30:22 +02:00
}
2014-12-02 01:27:02 +01:00
TEST(Create) {
2014-12-03 16:32:56 +01:00
StatementList* stmt_list = SQLParser::parseSQLString("CREATE TABLE students (name TEXT, student_number INT, city INTEGER, grade DOUBLE)");
2014-11-26 18:20:10 +01:00
ASSERT(stmt_list->isValid);
ASSERT_EQ(stmt_list->size(), 1);
ASSERT_EQ(stmt_list->at(0)->type, kStmtCreate);
CreateStatement* stmt = (CreateStatement*) stmt_list->at(0);
ASSERT_EQ(stmt->create_type, CreateStatement::kTable);
ASSERT_STREQ(stmt->table_name, "students");
ASSERT_NOTNULL(stmt->columns);
ASSERT_EQ(stmt->columns->size(), 4);
ASSERT_STREQ(stmt->columns->at(0)->name, "name");
2014-12-03 16:32:56 +01:00
ASSERT_STREQ(stmt->columns->at(1)->name, "student_number");
ASSERT_STREQ(stmt->columns->at(2)->name, "city");
2014-11-26 18:20:10 +01:00
ASSERT_STREQ(stmt->columns->at(3)->name, "grade");
2014-12-03 16:32:56 +01:00
ASSERT_EQ(stmt->columns->at(0)->type, ColumnDefinition::TEXT);
ASSERT_EQ(stmt->columns->at(1)->type, ColumnDefinition::INT);
ASSERT_EQ(stmt->columns->at(2)->type, ColumnDefinition::INT);
2014-11-26 18:20:10 +01:00
ASSERT_EQ(stmt->columns->at(3)->type, ColumnDefinition::DOUBLE);
2014-12-02 01:27:02 +01:00
}
TEST(Update) {
StatementList* stmt_list = SQLParser::parseSQLString("UPDATE students SET grade = 5.0, name = 'test' WHERE name = 'Max Mustermann';");
ASSERT(stmt_list->isValid);
ASSERT_EQ(stmt_list->size(), 1);
ASSERT_EQ(stmt_list->at(0)->type, kStmtUpdate);
UpdateStatement* stmt = (UpdateStatement*) stmt_list->at(0);
ASSERT_NOTNULL(stmt->table);
ASSERT_STREQ(stmt->table->name, "students");
ASSERT_NOTNULL(stmt->updates);
ASSERT_EQ(stmt->updates->size(), 2);
ASSERT_STREQ(stmt->updates->at(0)->column, "grade");
ASSERT_STREQ(stmt->updates->at(1)->column, "name");
ASSERT(stmt->updates->at(0)->value->isType(kExprLiteralFloat));
ASSERT(stmt->updates->at(1)->value->isType(kExprLiteralString));
ASSERT_EQ(stmt->updates->at(0)->value->fval, 5.0);
ASSERT_STREQ(stmt->updates->at(1)->value->name, "test");
ASSERT_NOTNULL(stmt->where);
ASSERT(stmt->where->isType(kExprOperator));
ASSERT(stmt->where->isSimpleOp('='));
ASSERT_STREQ(stmt->where->expr->name, "name");
ASSERT_STREQ(stmt->where->expr2->name, "Max Mustermann");
}
TEST(Insert) {
StatementList* stmt_list = SQLParser::parseSQLString("INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)");
ASSERT(stmt_list->isValid);
ASSERT_EQ(stmt_list->size(), 1);
ASSERT_EQ(stmt_list->at(0)->type, kStmtInsert);
// TODO
2014-11-26 18:20:10 +01:00
}