def __show_interface(self, database: Database) -> bool: """ Function shows a command line for this app. On receiving a command from user, it passes query to Database entity, which tries to proceed it. If Database got an Error, function prints this error. In other case, it prints a result. On \\q command from user, it simply returns False. :param database: Database :return: bool """ command = input(self.__present_command_line(database.get_name())) if command == '\q': return False database.proceed_query(command) if database.has_error(): print(database.get_error()) return True if database.get_query().get_aggregate_function() != '': print(database.get_query().get_result()[0]) else: for row in database.get_query().get_result(): join_str = ', ' print(join_str.join(row)) return True
def test_database_proceed_filled_query_string_with_table_exist_fills_query_table_field( self): query = Query() database = Database('database_name', query) database.add_table(Table('drivers', [])) database.proceed_query('SELECT company, country FROM drivers;') self.assertEqual(database.get_query().get_table(), 'drivers')
def test_database_default(self): query = Query() database = Database('database_name', query) self.assertEqual(database.get_name(), 'database_name') self.assertEqual(database.get_tables(), {}) self.assertEqual(database.get_error(), '') self.assertEqual(database.has_error(), False) self.assertEqual(database.get_query(), query)
def test_it_parses_complicated_where_statement_with_lots_of_spaces(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, country FROM drivers WHERE country = 'USA' OR company = 'sdf';" ) self.assertEqual(database.get_query().get_select_expression(), ['first_name', 'country']) self.assertEqual(database.get_query().get_where_clause(), [('', 'country', 'USA'), ('OR', 'company', 'sdf')])
def test_database_setters(self): query = Query() query.set_table('tada') table = Table('table_name', []) error_text = 'some error' database = Database('database_name', query) database.add_table(table) database.set_error(error_text) self.assertEqual(database.get_name(), 'database_name') self.assertEqual(database.get_tables(), {'table_name': table}) self.assertEqual(database.get_error(), error_text) self.assertEqual(database.has_error(), True) self.assertEqual(database.get_query(), query)
def test_it_fills_select_expression_with_multiple_fields(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, last_name FROM drivers;') self.assertEqual(database.get_query().get_select_expression(), ['first_name', 'last_name'])
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')