2014-10-09 01:30:22 +02:00
|
|
|
/*
|
|
|
|
* sql_tests.cpp
|
|
|
|
*/
|
|
|
|
|
2014-10-16 15:54:51 +02:00
|
|
|
#include "SQLParser.h"
|
2014-11-26 16:20:55 +01:00
|
|
|
#include "tests/test.h"
|
2014-10-09 01:30:22 +02:00
|
|
|
|
|
|
|
|
2014-11-26 16:20:55 +01:00
|
|
|
using namespace hsql;
|
2014-10-09 01:30:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-26 16:20:55 +01:00
|
|
|
TEST(SelectTest) {
|
|
|
|
StatementList* stmt_list = SQLParser::parseSQLString("SELECT * FROM students;");
|
|
|
|
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 == kStmtSelect);
|
2014-10-09 01:30:22 +02:00
|
|
|
|
2014-11-26 16:20:55 +01:00
|
|
|
SelectStatement* stmt = (SelectStatement*) stmt_list->at(0);
|
2014-11-26 18:20:10 +01:00
|
|
|
ASSERT_NULL(stmt->where_clause);
|
2014-10-09 01:30:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-11-26 16:20:55 +01:00
|
|
|
TEST(DeleteTest) {
|
|
|
|
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-11-26 18:20:10 +01:00
|
|
|
TEST(CreateTable) {
|
|
|
|
StatementList* stmt_list = SQLParser::parseSQLString("CREATE TABLE students (name TEXT, student_number INTEGER, city TEXT, grade DOUBLE)");
|
|
|
|
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");
|
|
|
|
ASSERT_EQ(stmt->columns->at(0)->type, ColumnDefinition::TEXT);
|
|
|
|
ASSERT_STREQ(stmt->columns->at(3)->name, "grade");
|
|
|
|
ASSERT_EQ(stmt->columns->at(3)->type, ColumnDefinition::DOUBLE);
|
|
|
|
}
|