def test_it_fails_if_field_not_exist(self): query = Query() table = Table('drivers', [[ 'id', 'first_name', 'last_name', 'country', 'year_of_birth', 'company' ], ['1', 'John', 'Carmack', 'USA', '1970', 'id Software' ], ['2', 'Jonn', 'Romero', 'USA', '1967', 'id Software' ], ['3', 'Elon', 'Musk', 'USA', '1971', 'Tesla' ], ['4', 'Damon', 'Hill', 'UK', '1960', 'Williams']]) database = Database('database_name', query) database.add_table(table) database.proceed_query('SELECT *, id_name FROM drivers;') self.assertEqual(database.get_query().get_select_expression(), []) self.assertEqual(database.get_error(), 'Field not exist')
def select_rows(self, query: Query) -> list: selected = [] keys = self.__get_keys(query.get_select_expression()) for row in self.__rows: formed_row = [] if self.__is_satisfied_by_where_clause(row, query.get_where_clause()): if query.get_aggregate_function() != '': if query.get_aggregate_function() == 'COUNT(*)': formed_row = row else: for key in keys: formed_row.append(row[key]) selected.append(formed_row) if query.get_aggregate_function() != '': return [len(selected)] return selected
def test_it_parses_simple_where_statement_with_existed_field(self): query = Query() table = Table('drivers', [[ 'id', 'first_name', 'last_name', 'country', 'year_of_birth', 'company' ], ['1', 'John', 'Carmack', 'USA', '1970', 'id Software' ], ['2', 'Jonn', 'Romero', 'USA', '1967', 'id Software' ], ['3', 'Elon', 'Musk', 'USA', '1971', 'Tesla' ], ['4', 'Damon', 'Hill', 'UK', '1960', 'Williams']]) database = Database('database_name', query) database.add_table(table) database.proceed_query( "SELECT first_name FROM drivers WHERE country = 'USA';") self.assertEqual(database.get_query().get_where_clause(), [('', 'country', 'USA')])
def test_it_shows_error_if_aggregate_function_witout_if_statement(self): query = Query() table = Table('drivers', [[ 'id', 'first_name', 'last_name', 'country', 'year_of_birth', 'company' ], ['1', 'John', 'Carmack', 'USA', '1970', 'id Software' ], ['2', 'Jonn', 'Romero', 'USA', '1967', 'id Software' ], ['3', 'Elon', 'Musk', 'USA', '1971', 'Tesla' ], ['4', 'Damon', 'Hill', 'UK', '1960', 'Williams']]) database = Database('database_name', query) database.add_table(table) database.proceed_query('SELECT COUNT(*) FROM drivers;') self.assertEqual(database.get_query().get_select_expression(), []) self.assertEqual( database.get_error(), 'Query contains aggregate function, but WHERE statement missed')
def test_it_parses_complicated_where_statement_with_second_non_existed_field( self): query = Query() table = Table('drivers', [[ 'id', 'first_name', 'last_name', 'country', 'year_of_birth', 'company' ], ['1', 'John', 'Carmack', 'USA', '1970', 'id Software' ], ['2', 'Jonn', 'Romero', 'USA', '1967', 'id Software' ], ['3', 'Elon', 'Musk', 'USA', '1971', 'Tesla' ], ['4', 'Damon', 'Hill', 'UK', '1960', 'Williams']]) database = Database('database_name', query) database.add_table(table) database.proceed_query( "SELECT first_name FROM drivers WHERE country = 'USA' AND df = 'sdf';" ) self.assertEqual(database.get_error(), 'Column from where_expression not found')
def test_query_setters(self): query = Query() query.set_select_expression(['country', 'first_name']), query.set_aggregate_function('COUNT(*)'), query.set_table('table_name'), query.add_where_clause('', 'country', 'USA'), query.set_result([3]), self.assertEqual(query.get_select_expression(), ['country', 'first_name']) self.assertEqual(query.get_aggregate_function(), 'COUNT(*)') self.assertEqual(query.get_table(), 'table_name') self.assertEqual(query.get_where_clause(), [('', 'country', 'USA')]) self.assertEqual(query.get_result(), [3])
def test_database_proceed_filled_query_string_with_table_not_exist(self): query = Query() database = Database('database_name', query) database.add_table(Table('drivers', [])) database.proceed_query('SELECT company, country FROM drivers1;') self.assertEqual(database.get_error(), 'Table not exist')
def test_database_proceed_empty_query_string(self): query = Query() database = Database('database_name', query) database.proceed_query('') self.assertEqual(database.get_error(), 'Wrong query syntax, please try again')