diff --git a/src/sql/CreateStatement.cpp b/src/sql/CreateStatement.cpp new file mode 100644 index 00000000..21f695ff --- /dev/null +++ b/src/sql/CreateStatement.cpp @@ -0,0 +1,70 @@ +#include "SelectStatement.h" +#include "CreateStatement.h" + +namespace hsql { + +// CreateStatemnet +CreateStatement::CreateStatement(CreateType type) + : SQLStatement(kStmtCreate), + type(type), + ifNotExists(false), + filePath(nullptr), + schema(nullptr), + tableName(nullptr), + indexName(nullptr), + indexColumns(nullptr), + columns(nullptr), + tableConstraints(nullptr), + viewColumns(nullptr), + select(nullptr){}; + +CreateStatement::~CreateStatement() { + free(filePath); + free(schema); + free(tableName); + free(indexName); + delete select; + + if (columns != nullptr) { + for (ColumnDefinition* def : *columns) { + delete def; + } + delete columns; + } + + if (tableConstraints != nullptr) { + for (TableConstraint* def : *tableConstraints) { + delete def; + } + delete tableConstraints; + } + + if (indexColumns != nullptr) { + for (char* column : *indexColumns) { + free(column); + } + delete indexColumns; + } + + if (viewColumns != nullptr) { + for (char* column : *viewColumns) { + free(column); + } + delete viewColumns; + } +} + +void CreateStatement::setColumnDefsAndConstraints(std::vector* tableElements) { + columns = new std::vector(); + tableConstraints = new std::vector(); + + for (auto tableElem : *tableElements) { + if (auto* colDef = dynamic_cast(tableElem)) { + columns->emplace_back(colDef); + } else if (auto* tableConstraint = dynamic_cast(tableElem)) { + tableConstraints->emplace_back(tableConstraint); + } + } +} + +} // namespace hsql diff --git a/src/sql/CreateStatement.h b/src/sql/CreateStatement.h index 908dc382..abe60453 100644 --- a/src/sql/CreateStatement.h +++ b/src/sql/CreateStatement.h @@ -43,7 +43,7 @@ struct ColumnDefinition : TableElement { } nullable = false; } - + return true; } @@ -66,18 +66,7 @@ struct CreateStatement : SQLStatement { CreateStatement(CreateType type); ~CreateStatement() override; - void setColumnDefsAndConstraints(std::vector* tableElements) { - columns = new std::vector(); - tableConstraints = new std::vector(); - - for (auto tableElem : *tableElements) { - if (auto* colDef = dynamic_cast(tableElem)) { - columns->emplace_back(colDef); - } else if (auto* tableConstraint = dynamic_cast(tableElem)) { - tableConstraints->emplace_back(tableConstraint); - } - } - } + void setColumnDefsAndConstraints(std::vector* tableElements); CreateType type; bool ifNotExists; // default: false diff --git a/src/sql/statements.cpp b/src/sql/statements.cpp index 4babd681..2d1cb214 100644 --- a/src/sql/statements.cpp +++ b/src/sql/statements.cpp @@ -87,57 +87,6 @@ std::ostream& operator<<(std::ostream& stream, const ColumnType& column_type) { return stream; } -// CreateStatemnet -CreateStatement::CreateStatement(CreateType type) - : SQLStatement(kStmtCreate), - type(type), - ifNotExists(false), - filePath(nullptr), - schema(nullptr), - tableName(nullptr), - indexName(nullptr), - indexColumns(nullptr), - columns(nullptr), - tableConstraints(nullptr), - viewColumns(nullptr), - select(nullptr){}; - -CreateStatement::~CreateStatement() { - free(filePath); - free(schema); - free(tableName); - free(indexName); - delete select; - - if (columns != nullptr) { - for (ColumnDefinition* def : *columns) { - delete def; - } - delete columns; - } - - if (tableConstraints != nullptr) { - for (TableConstraint* def : *tableConstraints) { - delete def; - } - delete tableConstraints; - } - - if (indexColumns != nullptr) { - for (char* column : *indexColumns) { - free(column); - } - delete indexColumns; - } - - if (viewColumns != nullptr) { - for (char* column : *viewColumns) { - free(column); - } - delete viewColumns; - } -} - // DeleteStatement DeleteStatement::DeleteStatement() : SQLStatement(kStmtDelete), schema(nullptr), tableName(nullptr), expr(nullptr){};