implemented DEALLOCATE PREPARE
This commit is contained in:
parent
ab9a85704f
commit
2f110b8168
|
@ -15,7 +15,8 @@ struct DropStatement : SQLStatement {
|
||||||
kTable,
|
kTable,
|
||||||
kSchema,
|
kSchema,
|
||||||
kIndex,
|
kIndex,
|
||||||
kView
|
kView,
|
||||||
|
kPreparedStatement
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -353,7 +353,8 @@ column_type:
|
||||||
|
|
||||||
/******************************
|
/******************************
|
||||||
* Drop Statement
|
* Drop Statement
|
||||||
* DROP TABLE students
|
* DROP TABLE students;
|
||||||
|
* DEALLOCATE PREPARE stmt;
|
||||||
******************************/
|
******************************/
|
||||||
|
|
||||||
drop_statement:
|
drop_statement:
|
||||||
|
@ -361,6 +362,11 @@ drop_statement:
|
||||||
$$ = new DropStatement(DropStatement::kTable);
|
$$ = new DropStatement(DropStatement::kTable);
|
||||||
$$->name = $3;
|
$$->name = $3;
|
||||||
}
|
}
|
||||||
|
| DEALLOCATE PREPARE IDENTIFIER {
|
||||||
|
$$ = new DropStatement(DropStatement::kPreparedStatement);
|
||||||
|
$$->name = $3;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
/******************************
|
/******************************
|
||||||
* Delete Statement / Truncate statement
|
* Delete Statement / Truncate statement
|
||||||
|
|
|
@ -96,26 +96,22 @@ TEST(PrepareStatementTest) {
|
||||||
"INSERT INTO test VALUES(?);"
|
"INSERT INTO test VALUES(?);"
|
||||||
"SELECT ?, test FROM test WHERE c1 = ?;"
|
"SELECT ?, test FROM test WHERE c1 = ?;"
|
||||||
"};"
|
"};"
|
||||||
"PREPARE stmt: SELECT * FROM data WHERE c1 = ?;";
|
"PREPARE stmt: SELECT * FROM data WHERE c1 = ?;"
|
||||||
|
"DEALLOCATE PREPARE stmt;";
|
||||||
|
|
||||||
TEST_PARSE_SQL_QUERY(query, stmt_list, 2);
|
TEST_PARSE_SQL_QUERY(query, stmt_list, 3);
|
||||||
|
|
||||||
ASSERT_EQ(stmt_list->getStatement(0)->type(), kStmtPrepare);
|
TEST_CAST_STMT(stmt_list, 0, kStmtPrepare, PrepareStatement, prep1);
|
||||||
ASSERT_EQ(stmt_list->getStatement(1)->type(), kStmtPrepare);
|
TEST_CAST_STMT(stmt_list, 1, kStmtPrepare, PrepareStatement, prep2);
|
||||||
|
TEST_CAST_STMT(stmt_list, 2, kStmtDrop, DropStatement, drop);
|
||||||
PrepareStatement* prep1 = (PrepareStatement*) stmt_list->getStatement(0);
|
|
||||||
PrepareStatement* prep2 = (PrepareStatement*) stmt_list->getStatement(1);
|
|
||||||
|
|
||||||
// Prepare Statement #1
|
// Prepare Statement #1
|
||||||
ASSERT_STREQ(prep1->name, "test");
|
ASSERT_STREQ(prep1->name, "test");
|
||||||
ASSERT_EQ(prep1->placeholders.size(), 3);
|
ASSERT_EQ(prep1->placeholders.size(), 3);
|
||||||
|
|
||||||
ASSERT_EQ(prep1->query->numStatements(), 2);
|
ASSERT_EQ(prep1->query->numStatements(), 2);
|
||||||
ASSERT_EQ(prep1->query->getStatement(0)->type(), kStmtInsert);
|
|
||||||
ASSERT_EQ(prep1->query->getStatement(1)->type(), kStmtSelect);
|
|
||||||
|
|
||||||
InsertStatement* insert = (InsertStatement*) prep1->query->getStatement(0);
|
TEST_CAST_STMT(prep1->query, 0, kStmtInsert, InsertStatement, insert);
|
||||||
SelectStatement* select = (SelectStatement*) prep1->query->getStatement(1);
|
TEST_CAST_STMT(prep1->query, 1, kStmtSelect, SelectStatement, select);
|
||||||
|
|
||||||
ASSERT(insert->values->at(0)->isType(kExprPlaceholder));
|
ASSERT(insert->values->at(0)->isType(kExprPlaceholder));
|
||||||
ASSERT(select->select_list->at(0)->isType(kExprPlaceholder));
|
ASSERT(select->select_list->at(0)->isType(kExprPlaceholder));
|
||||||
|
@ -134,6 +130,10 @@ TEST(PrepareStatementTest) {
|
||||||
// Prepare Statement #2
|
// Prepare Statement #2
|
||||||
ASSERT_STREQ(prep2->name, "stmt");
|
ASSERT_STREQ(prep2->name, "stmt");
|
||||||
ASSERT_EQ(prep2->placeholders.size(), 1);
|
ASSERT_EQ(prep2->placeholders.size(), 1);
|
||||||
|
|
||||||
|
// Deallocate Statement
|
||||||
|
ASSERT_EQ(drop->type, DropStatement::kPreparedStatement);
|
||||||
|
ASSERT_STREQ(drop->name, "stmt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,4 +14,9 @@
|
||||||
stmt_class* output_var = (stmt_class*) stmt_list->getStatement(0);
|
stmt_class* output_var = (stmt_class*) stmt_list->getStatement(0);
|
||||||
|
|
||||||
|
|
||||||
|
#define TEST_CAST_STMT(stmt_list, stmt_index, stmt_type, stmt_class, output_var) \
|
||||||
|
ASSERT_EQ(stmt_list->getStatement(stmt_index)->type(), stmt_type); \
|
||||||
|
stmt_class* output_var = (stmt_class*) stmt_list->getStatement(stmt_index);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -36,3 +36,4 @@ PREPARE prep_inst: INSERT INTO test VALUES (?, ?, ?);
|
||||||
PREPARE prep2 { INSERT INTO test VALUES (?, 0, 0); INSERT INTO test VALUES (0, ?, 0); INSERT INTO test VALUES (0, 0, ?); };
|
PREPARE prep2 { INSERT INTO test VALUES (?, 0, 0); INSERT INTO test VALUES (0, ?, 0); INSERT INTO test VALUES (0, 0, ?); };
|
||||||
EXECUTE prep_inst(1, 2, 3);
|
EXECUTE prep_inst(1, 2, 3);
|
||||||
EXECUTE prep;
|
EXECUTE prep;
|
||||||
|
DEALLOCATE PREPARE prep;
|
Loading…
Reference in New Issue