mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:02:46 +00:00 
			
		
		
		
	LibSQL Tests: Add tests for SELECT ... WHERE ...
				
					
				
			This commit is contained in:
		
							parent
							
								
									9022cf99ff
								
							
						
					
					
						commit
						7496f17620
					
				
					 1 changed files with 65 additions and 2 deletions
				
			
		|  | @ -23,11 +23,12 @@ RefPtr<SQL::SQLResult> execute(NonnullRefPtr<SQL::Database> database, String con | |||
|     auto parser = SQL::AST::Parser(SQL::AST::Lexer(sql)); | ||||
|     auto statement = parser.next_statement(); | ||||
|     EXPECT(!parser.has_errors()); | ||||
|     if (parser.has_errors()) { | ||||
|     if (parser.has_errors()) | ||||
|         outln("{}", parser.errors()[0].to_string()); | ||||
|     } | ||||
|     SQL::AST::ExecutionContext context { database }; | ||||
|     auto result = statement->execute(context); | ||||
|     if (result->error().code != SQL::SQLErrorCode::NoError) | ||||
|         outln("{}", result->error().to_string()); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
|  | @ -147,4 +148,66 @@ TEST_CASE(select_from_table) | |||
|     EXPECT_EQ(result->results().size(), 5u); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE(select_with_column_names) | ||||
| { | ||||
|     ScopeGuard guard([]() { unlink(db_name); }); | ||||
|     auto database = SQL::Database::construct(db_name); | ||||
|     create_table(database); | ||||
|     auto result = execute(database, "INSERT INTO TestSchema.TestTable ( TextColumn, IntColumn ) VALUES ( 'Test_1', 42 ), ( 'Test_2', 43 );"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->inserted() == 2); | ||||
|     result = execute(database, "INSERT INTO TestSchema.TestTable ( TextColumn, IntColumn ) VALUES ( 'Test_3', 44 ), ( 'Test_4', 45 );"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->inserted() == 2); | ||||
|     result = execute(database, "INSERT INTO TestSchema.TestTable ( TextColumn, IntColumn ) VALUES ( 'Test_5', 46 );"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->inserted() == 1); | ||||
|     result = execute(database, "SELECT TextColumn FROM TestSchema.TestTable;"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->has_results()); | ||||
|     EXPECT_EQ(result->results().size(), 5u); | ||||
|     EXPECT_EQ(result->results()[0].size(), 1u); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE(select_with_nonexisting_column_name) | ||||
| { | ||||
|     ScopeGuard guard([]() { unlink(db_name); }); | ||||
|     auto database = SQL::Database::construct(db_name); | ||||
|     create_table(database); | ||||
|     auto result = execute(database, | ||||
|         "INSERT INTO TestSchema.TestTable ( TextColumn, IntColumn ) VALUES " | ||||
|         "( 'Test_1', 42 ), " | ||||
|         "( 'Test_2', 43 ), " | ||||
|         "( 'Test_3', 44 ), " | ||||
|         "( 'Test_4', 45 ), " | ||||
|         "( 'Test_5', 46 );"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->inserted() == 5); | ||||
|     result = execute(database, "SELECT Bogus FROM TestSchema.TestTable;"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::ColumnDoesNotExist); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE(select_with_where) | ||||
| { | ||||
|     ScopeGuard guard([]() { unlink(db_name); }); | ||||
|     auto database = SQL::Database::construct(db_name); | ||||
|     create_table(database); | ||||
|     auto result = execute(database, | ||||
|         "INSERT INTO TestSchema.TestTable ( TextColumn, IntColumn ) VALUES " | ||||
|         "( 'Test_1', 42 ), " | ||||
|         "( 'Test_2', 43 ), " | ||||
|         "( 'Test_3', 44 ), " | ||||
|         "( 'Test_4', 45 ), " | ||||
|         "( 'Test_5', 46 );"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->inserted() == 5); | ||||
|     result = execute(database, "SELECT TextColumn, IntColumn FROM TestSchema.TestTable WHERE IntColumn > 44;"); | ||||
|     EXPECT(result->error().code == SQL::SQLErrorCode::NoError); | ||||
|     EXPECT(result->has_results()); | ||||
|     EXPECT_EQ(result->results().size(), 2u); | ||||
|     for (auto& row : result->results()) { | ||||
|         EXPECT(row[1].to_int().value() > 44); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jan de Visser
						Jan de Visser