ActiveRecord::Base has a "table_exists?" method which currently assumes that not all the connection adapters can provide the list of tables. Since all adapters do have the "tables" method for getting a list of tables there appears to be no good reason to make such assumptions which only make the code more complex.
Additionally, since "table_exists?" is only defined in AR::Base it can not be used for other purposes, for example in migrations.
For those reasons I've added "table_exits?(table_name)" method to abstract adapter, implemented in the simple way that assumes that the adapter does support getting a list of all tables.
I refactored the method in AR::Base to use the one added to the adapters.
And in addition to that I changed "create_table :force => true" to actually check if the table exists and not ignore errors when dropping the table fails (in a way this fixes #5818, though it does not fix all the errors, at least it allows the user to see that dropping the table failed and why it failed).