fixed leaks triggered by sql_tests.cpp
This commit is contained in:
		
							parent
							
								
									a362e86da1
								
							
						
					
					
						commit
						69e9673763
					
				| @ -34,8 +34,8 @@ namespace hsql { | |||||||
| 
 | 
 | ||||||
|     CreateType type; |     CreateType type; | ||||||
|     bool ifNotExists; // default: false
 |     bool ifNotExists; // default: false
 | ||||||
|     const char* filePath; // default: NULL
 |     char* filePath; // default: NULL
 | ||||||
|     const char* tableName; // default: NULL
 |     char* tableName; // default: NULL
 | ||||||
|     std::vector<ColumnDefinition*>* columns; // default: NULL
 |     std::vector<ColumnDefinition*>* columns; // default: NULL
 | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ namespace hsql { | |||||||
|     virtual ~DropStatement(); |     virtual ~DropStatement(); | ||||||
| 
 | 
 | ||||||
|     EntityType type; |     EntityType type; | ||||||
|     const char* name; |     char* name; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| } // namespace hsql
 | } // namespace hsql
 | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ namespace hsql { | |||||||
|     ExecuteStatement(); |     ExecuteStatement(); | ||||||
|     virtual ~ExecuteStatement(); |     virtual ~ExecuteStatement(); | ||||||
| 
 | 
 | ||||||
|     const char* name; |     char* name; | ||||||
|     std::vector<Expr*>* parameters; |     std::vector<Expr*>* parameters; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -124,7 +124,7 @@ namespace hsql { | |||||||
| 
 | 
 | ||||||
|   char* substr(const char* source, int from, int to) { |   char* substr(const char* source, int from, int to) { | ||||||
|     int len = to - from; |     int len = to - from; | ||||||
|     char* copy = new char[len + 1]; |     char* copy = (char*) malloc(len + 1);; | ||||||
|     strncpy(copy, source + from, len); |     strncpy(copy, source + from, len); | ||||||
|     copy[len] = '\0'; |     copy[len] = '\0'; | ||||||
|     return copy; |     return copy; | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ namespace hsql { | |||||||
|     virtual ~InsertStatement(); |     virtual ~InsertStatement(); | ||||||
| 
 | 
 | ||||||
|     InsertType type; |     InsertType type; | ||||||
|     const char* tableName; |     char* tableName; | ||||||
|     std::vector<char*>* columns; |     std::vector<char*>* columns; | ||||||
|     std::vector<Expr*>* values; |     std::vector<Expr*>* values; | ||||||
|     SelectStatement* select; |     SelectStatement* select; | ||||||
|  | |||||||
| @ -23,8 +23,12 @@ namespace hsql { | |||||||
|      */ |      */ | ||||||
|     void setPlaceholders(std::vector<void*> ph); |     void setPlaceholders(std::vector<void*> ph); | ||||||
| 
 | 
 | ||||||
|     const char* name; |     char* name; | ||||||
|     SQLParserResult* query; |     SQLParserResult* query; | ||||||
|  | 
 | ||||||
|  |     // The expressions are not owned by this statement.
 | ||||||
|  |     // Rather they are owned by the query and destroyed, when
 | ||||||
|  |     // the query is destroyed.
 | ||||||
|     std::vector<Expr*> placeholders; |     std::vector<Expr*> placeholders; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ namespace hsql { | |||||||
|     type(type) {}; |     type(type) {}; | ||||||
| 
 | 
 | ||||||
|   ColumnDefinition::~ColumnDefinition() { |   ColumnDefinition::~ColumnDefinition() { | ||||||
|     delete name; |     free(name); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // CreateStatemnet
 |   // CreateStatemnet
 | ||||||
| @ -32,9 +32,15 @@ namespace hsql { | |||||||
|     columns(NULL) {}; |     columns(NULL) {}; | ||||||
| 
 | 
 | ||||||
|   CreateStatement::~CreateStatement() { |   CreateStatement::~CreateStatement() { | ||||||
|  |     free(filePath); | ||||||
|  |     free(tableName); | ||||||
|  | 
 | ||||||
|  |     if (columns != NULL) { | ||||||
|  |       for (ColumnDefinition* def : *columns) { | ||||||
|  |         delete def; | ||||||
|  |       } | ||||||
|       delete columns; |       delete columns; | ||||||
|     delete filePath; |     } | ||||||
|     delete tableName; |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // DeleteStatement
 |   // DeleteStatement
 | ||||||
| @ -44,7 +50,7 @@ namespace hsql { | |||||||
|     expr(NULL) {}; |     expr(NULL) {}; | ||||||
| 
 | 
 | ||||||
|   DeleteStatement::~DeleteStatement() { |   DeleteStatement::~DeleteStatement() { | ||||||
|     delete tableName; |     free(tableName); | ||||||
|     delete expr; |     delete expr; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -55,7 +61,7 @@ namespace hsql { | |||||||
|     name(NULL) {} |     name(NULL) {} | ||||||
| 
 | 
 | ||||||
|   DropStatement::~DropStatement() { |   DropStatement::~DropStatement() { | ||||||
|     delete name; |     free(name); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // ExecuteStatement
 |   // ExecuteStatement
 | ||||||
| @ -65,9 +71,15 @@ namespace hsql { | |||||||
|     parameters(NULL) {} |     parameters(NULL) {} | ||||||
| 
 | 
 | ||||||
|   ExecuteStatement::~ExecuteStatement() { |   ExecuteStatement::~ExecuteStatement() { | ||||||
|     delete name; |     free(name); | ||||||
|  | 
 | ||||||
|  |     if (parameters != NULL) { | ||||||
|  |       for (Expr* param : *parameters) { | ||||||
|  |         delete param; | ||||||
|  |       } | ||||||
|       delete parameters; |       delete parameters; | ||||||
|     } |     } | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   // ImportStatement
 |   // ImportStatement
 | ||||||
|   ImportStatement::ImportStatement(ImportType type) : |   ImportStatement::ImportStatement(ImportType type) : | ||||||
| @ -91,10 +103,22 @@ namespace hsql { | |||||||
|     select(NULL) {} |     select(NULL) {} | ||||||
| 
 | 
 | ||||||
|   InsertStatement::~InsertStatement() { |   InsertStatement::~InsertStatement() { | ||||||
|     delete tableName; |     free(tableName); | ||||||
|     delete columns; |  | ||||||
|     delete values; |  | ||||||
|     delete select; |     delete select; | ||||||
|  | 
 | ||||||
|  |     if (columns != NULL) { | ||||||
|  |       for (char* column : *columns) { | ||||||
|  |         free(column); | ||||||
|  |       } | ||||||
|  |       delete columns; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (values != NULL) { | ||||||
|  |       for (Expr* expr : *values) { | ||||||
|  |         delete expr; | ||||||
|  |       } | ||||||
|  |       delete values; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // PrepareStatement
 |   // PrepareStatement
 | ||||||
| @ -105,7 +129,7 @@ namespace hsql { | |||||||
| 
 | 
 | ||||||
|   PrepareStatement::~PrepareStatement() { |   PrepareStatement::~PrepareStatement() { | ||||||
|     delete query; |     delete query; | ||||||
|     delete name; |     free(name); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void PrepareStatement::setPlaceholders(std::vector<void*> ph) { |   void PrepareStatement::setPlaceholders(std::vector<void*> ph) { | ||||||
| @ -189,8 +213,16 @@ namespace hsql { | |||||||
| 
 | 
 | ||||||
|   UpdateStatement::~UpdateStatement() { |   UpdateStatement::~UpdateStatement() { | ||||||
|     delete table; |     delete table; | ||||||
|     delete updates; |  | ||||||
|     delete where; |     delete where; | ||||||
|  | 
 | ||||||
|  |     if (updates != NULL) { | ||||||
|  |       for (UpdateClause* update : *updates) { | ||||||
|  |         free(update->column); | ||||||
|  |         delete update->value; | ||||||
|  |         delete update; | ||||||
|  |       } | ||||||
|  |       delete updates; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // TableRef
 |   // TableRef
 | ||||||
|  | |||||||
| @ -22,6 +22,8 @@ TEST(DeleteStatementTest) { | |||||||
| 	ASSERT(stmt->expr->isType(kExprOperator)); | 	ASSERT(stmt->expr->isType(kExprOperator)); | ||||||
| 	ASSERT_STREQ(stmt->expr->expr->name, "grade"); | 	ASSERT_STREQ(stmt->expr->expr->name, "grade"); | ||||||
| 	ASSERT_EQ(stmt->expr->expr2->fval, 2.0); | 	ASSERT_EQ(stmt->expr->expr2->fval, 2.0); | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TEST(CreateStatementTest) { | TEST(CreateStatementTest) { | ||||||
| @ -43,6 +45,8 @@ TEST(CreateStatementTest) { | |||||||
| 	ASSERT_EQ(stmt->columns->at(1)->type, ColumnDefinition::INT); | 	ASSERT_EQ(stmt->columns->at(1)->type, ColumnDefinition::INT); | ||||||
| 	ASSERT_EQ(stmt->columns->at(2)->type, ColumnDefinition::INT); | 	ASSERT_EQ(stmt->columns->at(2)->type, ColumnDefinition::INT); | ||||||
| 	ASSERT_EQ(stmt->columns->at(3)->type, ColumnDefinition::DOUBLE); | 	ASSERT_EQ(stmt->columns->at(3)->type, ColumnDefinition::DOUBLE); | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -69,25 +73,40 @@ TEST(UpdateStatementTest) { | |||||||
| 	ASSERT(stmt->where->isType(kExprOperator)); | 	ASSERT(stmt->where->isType(kExprOperator)); | ||||||
| 	ASSERT(stmt->where->isSimpleOp('=')); | 	ASSERT(stmt->where->isSimpleOp('=')); | ||||||
| 	ASSERT_STREQ(stmt->where->expr->name, "name"); | 	ASSERT_STREQ(stmt->where->expr->name, "name"); | ||||||
| 	ASSERT_STREQ(stmt->where->expr2->name, "Max Mustermann"); | 	ASSERT_STREQ(stmt->where->expr2->name, "Max Mustermann");\ | ||||||
| 
 | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| TEST(InsertStatementTest) { | TEST(InsertStatementTest) { | ||||||
| 	TEST_PARSE_SINGLE_SQL("INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", kStmtInsert, InsertStatement, stmt); | 	TEST_PARSE_SINGLE_SQL( | ||||||
|  | 		"INSERT INTO students VALUES ('Max Mustermann', 12345, 'Musterhausen', 2.0)", | ||||||
|  | 		kStmtInsert, | ||||||
|  | 		InsertStatement, | ||||||
|  | 		result, | ||||||
|  | 		stmt); | ||||||
| 
 | 
 | ||||||
| 	ASSERT_EQ(stmt->values->size(), 4); | 	ASSERT_EQ(stmt->values->size(), 4); | ||||||
| 	// TODO
 | 	// TODO
 | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| TEST(DropTableStatementTest) { | TEST(DropTableStatementTest) { | ||||||
| 	TEST_PARSE_SINGLE_SQL("DROP TABLE students", kStmtDrop, DropStatement, stmt); | 	TEST_PARSE_SINGLE_SQL( | ||||||
|  | 		"DROP TABLE students", | ||||||
|  | 		kStmtDrop, | ||||||
|  | 		DropStatement, | ||||||
|  | 		result, | ||||||
|  | 		stmt); | ||||||
| 
 | 
 | ||||||
| 	ASSERT_EQ(stmt->type, DropStatement::kTable); | 	ASSERT_EQ(stmt->type, DropStatement::kTable); | ||||||
| 	ASSERT_NOTNULL(stmt->name); | 	ASSERT_NOTNULL(stmt->name); | ||||||
| 	ASSERT_STREQ(stmt->name, "students"); | 	ASSERT_STREQ(stmt->name, "students"); | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -134,12 +153,16 @@ TEST(PrepareStatementTest) { | |||||||
| 	// Deallocate Statement
 | 	// Deallocate Statement
 | ||||||
| 	ASSERT_EQ(drop->type, DropStatement::kPreparedStatement); | 	ASSERT_EQ(drop->type, DropStatement::kPreparedStatement); | ||||||
| 	ASSERT_STREQ(drop->name, "stmt"); | 	ASSERT_STREQ(drop->name, "stmt"); | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| TEST(ExecuteStatementTest) { | TEST(ExecuteStatementTest) { | ||||||
| 	TEST_PARSE_SINGLE_SQL("EXECUTE test(1, 2);", kStmtExecute, ExecuteStatement, stmt); | 	TEST_PARSE_SINGLE_SQL("EXECUTE test(1, 2);", kStmtExecute, ExecuteStatement, result, stmt); | ||||||
| 
 | 
 | ||||||
| 	ASSERT_STREQ(stmt->name, "test"); | 	ASSERT_STREQ(stmt->name, "test"); | ||||||
| 	ASSERT_EQ(stmt->parameters->size(), 2); | 	ASSERT_EQ(stmt->parameters->size(), 2); | ||||||
|  | 
 | ||||||
|  | 	delete result; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Pedro
						Pedro