Skip to content
This repository was archived by the owner on Sep 27, 2019. It is now read-only.

Commit 6a294fc

Browse files
committed
This commit added parser support of alter table
- added alter and rename plan and statements - modified optimizor to bind db name and make plans - modified parsenodes - added node to string support and vice versa - added nodetransform of alter table
1 parent d3b1321 commit 6a294fc

File tree

4 files changed

+108
-169
lines changed

4 files changed

+108
-169
lines changed

src/include/parser/alter_statement.h

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,42 @@ namespace parser {
2222
* @brief Represents "ALTER TABLE add column COLUMN_NAME COLUMN_TYPE"
2323
* TODO: add implementation of AlterTableStatement
2424
*/
25-
class AlterTableStatement : public TableRefStatement {
26-
public:
27-
enum class AlterTableType { INVALID = 0, ADD = 1, DROP = 2 };
25+
struct AlterTableStatement : TableRefStatement {
26+
enum class AlterTableType { INVALID = 0, ADD = 1, DROP = 2, RENAME = 3 };
2827
AlterTableStatement(AlterTableType type)
2928
: TableRefStatement(StatementType::ALTER),
3029
type(type),
31-
names(new std::vector<char *>) {}
30+
names(new std::vector<char*>),
31+
oldName(nullptr),
32+
newName(nullptr)
33+
{};
3234

3335
virtual ~AlterTableStatement() {
36+
/*if (columns != nullptr) {
37+
for (auto col : *columns) delete col;
38+
delete columns;
39+
}*/
3440
if (names != nullptr) {
3541
for (auto name : *names) delete name;
3642
delete names;
3743
}
44+
if (oldName) delete oldName;
45+
if (newName) delete newName;
3846
}
3947

40-
virtual void Accept(SqlNodeVisitor *v) override { v->Visit(this); }
41-
42-
const std::string GetInfo(UNUSED_ATTRIBUTE int num_indent) const override {
43-
return std::string{};
44-
}
45-
46-
const std::string GetInfo() const override { return std::string{}; }
48+
virtual void Accept(SqlNodeVisitor* v) override { v->Visit(this); }
4749

4850
AlterTableType type;
4951

5052
// Dropped columns
51-
std::vector<char *> *names;
53+
std::vector<char*>* names;
5254

5355
// Added columns
54-
// std::vector<ColumnDefinition*>* columns;
56+
//std::vector<ColumnDefinition*>* columns;
57+
58+
// the name that needs to be changed
59+
char *oldName;
60+
char *newName;
5561
};
5662

5763
} // End parser namespace

src/include/parser/rename_function_statement.h

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/include/planner/alter_plan.h

Lines changed: 89 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,106 @@
1515
#include "parser/alter_statement.h"
1616
namespace peloton {
1717

18+
namespace parser {
19+
class AlterTableStatement;
20+
}
21+
namespace catalog {
22+
class Schema;
23+
}
24+
namespace storage {
25+
class DataTable;
26+
}
27+
1828
namespace planner {
1929
/** @brief The plan used for altering
2030
* TODO: adding support for add/drop column
2131
*/
2232
class AlterPlan : public AbstractPlan {
2333
public:
2434
AlterPlan() = delete;
25-
explicit AlterPlan(UNUSED_ATTRIBUTE parser::AlterTableStatement *parse_tree) {
26-
LOG_TRACE("%s", parse_tree->GetInfo().c_str());
27-
}
35+
36+
explicit AlterPlan(const std::string &database_name,
37+
const std::string &table_name,
38+
//std::unique_ptr<catalog::Schema> added_columns,
39+
const std::vector<std::string> &dropped_columns,
40+
AlterType a_type);
41+
explicit AlterPlan(const std::string &database_name,
42+
const std::string &table_name,
43+
const std::vector<std::string> &old_names,
44+
const std::vector<std::string> &new_names, AlterType a_type);
45+
explicit AlterPlan(parser::AlterTableStatement *parse_tree);
46+
2847
virtual ~AlterPlan() {}
2948

30-
virtual PlanNodeType GetPlanNodeType() const override {
31-
return PlanNodeType::ALTER;
49+
virtual PlanNodeType GetPlanNodeType() const { return PlanNodeType::ALTER; }
50+
51+
virtual std::unique_ptr<AbstractPlan> Copy() { return nullptr; }
52+
53+
const std::string GetInfo() const {
54+
return StringUtil::Format("AlterPlan table:%s, database:%s",
55+
this->table_name.c_str(), this->database_name.c_str());
56+
}
57+
58+
std::unique_ptr<AbstractPlan> Copy() const {
59+
switch(this->type) {
60+
case AlterType::DROP:
61+
case AlterType::ADD:
62+
return std::unique_ptr<AbstractPlan>(
63+
new AlterPlan(database_name, table_name,
64+
//std::unique_ptr<catalog::Schema>(
65+
// catalog::Schema::CopySchema(added_columns)),
66+
dropped_columns, type));
67+
case AlterType::RENAME:
68+
return std::unique_ptr<AbstractPlan>(
69+
new AlterPlan(database_name, table_name, old_names_, new_names_, type));
70+
default:
71+
LOG_ERROR("Not supported Copy of Alter type yet");
72+
return nullptr;
73+
}
3274
}
3375

34-
virtual std::unique_ptr<AbstractPlan> Copy() const override { return nullptr; }
76+
std::string GetTableName() const { return table_name; }
77+
78+
std::string GetDatabaseName() const { return database_name; }
79+
80+
//catalog::Schema *GetAddedColumns() const { return added_columns; }
81+
82+
const std::vector<std::string> &GetDroppedColumns() const {
83+
return dropped_columns;
84+
}
85+
86+
AlterType GetAlterTableType() const { return type; }
87+
88+
//function used for rename statement
89+
std::string GetOldName() const { return this->old_names_[0]; }
90+
91+
//function used for rename statement
92+
std::string GetNewName() const { return this->new_names_[0]; }
93+
94+
//return true if the alter plan is rename statement
95+
bool IsRename() const { return this->type==AlterType::RENAME;}
96+
private:
97+
// Target Table
98+
storage::DataTable *target_table_ = nullptr;
99+
100+
// Table Name
101+
std::string table_name;
102+
103+
// Database Name
104+
std::string database_name;
105+
106+
// Schema delta, define the column txn want to add
107+
// catalog::Schema *added_columns;
108+
// dropped_column, define the column you want to drop
109+
std::vector<std::string> dropped_columns;
110+
111+
//used for store rename function data
112+
std::vector<std::string> old_names_;
113+
std::vector<std::string> new_names_;
114+
115+
// Check to either AlterTable Table, INDEX or Rename
116+
AlterType type;
117+
35118
};
36119
}
37120
}

src/include/planner/rename_plan.h

Lines changed: 0 additions & 97 deletions
This file was deleted.

0 commit comments

Comments
 (0)