aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-02-20 21:21:41 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-02-20 21:21:41 +0000
commit101968f3674dfedb0549a54bf6407c287d357f0a (patch)
treef619811941d11d5b59db39f4d4152759eeacb4a7 /activerecord
parent8322ea45c1087325fd428a201749791550bc7859 (diff)
downloadrails-101968f3674dfedb0549a54bf6407c287d357f0a.tar.gz
rails-101968f3674dfedb0549a54bf6407c287d357f0a.tar.bz2
rails-101968f3674dfedb0549a54bf6407c287d357f0a.zip
Added automatic dropping/creating of test tables for running the unit tests on all databases #587 [adelle@bullet.net.au]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@719 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG2
-rwxr-xr-xactiverecord/lib/active_record/connection_adapters/abstract_adapter.rb5
-rw-r--r--activerecord/lib/active_record/connection_adapters/db2_adapter.rb4
-rwxr-xr-xactiverecord/lib/active_record/connection_adapters/mysql_adapter.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb4
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb4
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb4
-rw-r--r--activerecord/test/aaa_create_tables_test.rb58
-rw-r--r--activerecord/test/fixtures/db_definitions/db2.drop.sql18
-rw-r--r--activerecord/test/fixtures/db_definitions/db2.sql1
-rw-r--r--activerecord/test/fixtures/db_definitions/db22.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/db22.sql1
-rw-r--r--activerecord/test/fixtures/db_definitions/mysql.drop.sql18
-rwxr-xr-xactiverecord/test/fixtures/db_definitions/mysql.sql3
-rw-r--r--activerecord/test/fixtures/db_definitions/mysql2.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/mysql2.sql1
-rw-r--r--activerecord/test/fixtures/db_definitions/postgresql.drop.sql18
-rw-r--r--activerecord/test/fixtures/db_definitions/postgresql.sql3
-rw-r--r--activerecord/test/fixtures/db_definitions/postgresql2.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/postgresql2.sql3
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlite.drop.sql18
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlite.sql3
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlite2.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlite2.sql1
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlserver.drop.sql18
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlserver.sql1
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlserver2.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/sqlserver2.sql1
28 files changed, 200 insertions, 5 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index fddfb5ef0b..dafc6a05e1 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added automatic dropping/creating of test tables for running the unit tests on all databases #587 [adelle@bullet.net.au]
+
* Fixed that find_by_* would fail when column names had numbers #670 [demetrius]
* Fixed the SQL Server adapter on a bunch of issues #667 [DeLynn]
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
index 6a9ca8fcf1..5d2c764afe 100755
--- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -356,6 +356,11 @@ module ActiveRecord
name
end
+ # Returns the human-readable name of the adapter. Use mixed case - one can always use downcase if needed.
+ def adapter_name()
+ 'Abstract'
+ end
+
# Returns a string of the CREATE TABLE SQL statements for recreating the entire structure of the database.
def structure_dump() end
diff --git a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb
index 867b17eaa0..225ade0441 100644
--- a/activerecord/lib/active_record/connection_adapters/db2_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/db2_adapter.rb
@@ -74,6 +74,10 @@ begin
def quote_column_name(name) name; end
+ def adapter_name()
+ 'DB2'
+ end
+
def quote_string(s)
s.gsub(/'/, "''") # ' (for ruby-mode)
end
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index 645e5f6dd4..c637a50c5a 100755
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -102,7 +102,11 @@ module ActiveRecord
def quote_column_name(name)
return "`#{name}`"
end
-
+
+ def adapter_name()
+ 'MySQL'
+ end
+
def structure_dump
select_all("SHOW TABLES").inject("") do |structure, table|
structure += select_one("SHOW CREATE TABLE #{table.to_a.first.last}")["Create Table"] + ";\n\n"
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index ef939d747b..67b26739ca 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -89,6 +89,10 @@ module ActiveRecord
return "\"#{name}\""
end
+ def adapter_name()
+ 'PostgreSQL'
+ end
+
private
def last_insert_id(table, column = "id")
sequence_name = "#{table}_#{column || 'id'}_seq"
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
index b8a91929c7..d8f3e04498 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
@@ -141,6 +141,10 @@ module ActiveRecord
return "'#{name}'"
end
+ def adapter_name()
+ 'SQLite'
+ end
+
protected
def table_structure(table_name)
execute "PRAGMA table_info(#{table_name})"
diff --git a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
index 84293736e3..7bddba9b5b 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -43,6 +43,10 @@ module ActiveRecord
raise ArgumentError, "No database specified. Missing argument: database."
end
+ def adapter_name()
+ 'SqlServer'
+ end
+
conn = DBI.connect("DBI:ADO:Provider=SQLOLEDB;Data Source=#{host};Initial Catalog=#{database};User Id=#{username};Password=#{password};")
conn["AutoCommit"] = true
diff --git a/activerecord/test/aaa_create_tables_test.rb b/activerecord/test/aaa_create_tables_test.rb
new file mode 100644
index 0000000000..ba14199d31
--- /dev/null
+++ b/activerecord/test/aaa_create_tables_test.rb
@@ -0,0 +1,58 @@
+require 'abstract_unit'
+
+# The filename for this test begins with "aaa" so that
+# it will be the first test.
+
+class SqlFile < File
+ #Define an iterator that iterates over the statements in a .sql file.
+ #statements are separated by a semicolon.
+ def initialize(path)
+ super(path)
+ end
+
+ def each_statement()
+ statement = ''
+ each_line { |line|
+ #The last character of each line is a line-feed, so we will check the next-to-last character
+ #to see if it is a semicolon. A better way of doing this would be to look for a semicolon anywhere
+ #within the line in case multiple statements have been put on a single line.
+ #The last statement in the file must be followed by a line-feed.
+ if line.slice(-2,1)==';' then
+ statement = statement + line.slice(0,line.length-2) + "\n"
+ yield statement
+ statement = ''
+ else
+ statement = statement + line
+ end
+ }
+ end
+end
+
+class CreateTablesTest < Test::Unit::TestCase
+ def setup
+ # This method is required by rake.
+ end
+
+ def run_sql_file(connection, path)
+ sql_file = SqlFile.new(path)
+ sql_file.each_statement { |statement|
+ begin
+ #Skip errors. If there is a problem creating the tables then it will show up in other tests.
+ connection.execute(statement)
+ rescue ActiveRecord::StatementInvalid
+ end }
+ end
+
+ def test_table_creation
+ adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
+ run_sql_file ActiveRecord::Base.connection, "test/fixtures/db_definitions/" + adapter_name + ".drop.sql"
+ run_sql_file ActiveRecord::Base.connection, "test/fixtures/db_definitions/" + adapter_name + ".sql"
+
+ # Now do the same thing with the connection used by multiple_db_test.rb
+ adapter_name = Course.retrieve_connection.adapter_name.downcase
+ run_sql_file Course.retrieve_connection, "test/fixtures/db_definitions/" + adapter_name + "2.drop.sql"
+ run_sql_file Course.retrieve_connection, "test/fixtures/db_definitions/" + adapter_name + "2.sql"
+
+ assert_equal 1,1
+ end
+end
diff --git a/activerecord/test/fixtures/db_definitions/db2.drop.sql b/activerecord/test/fixtures/db_definitions/db2.drop.sql
new file mode 100644
index 0000000000..1f611c8d5a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/db2.drop.sql
@@ -0,0 +1,18 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE customers;
+DROP TABLE movies;
+DROP TABLE subscribers;
+DROP TABLE booleantests;
+DROP TABLE auto_id_tests;
+DROP TABLE entrants;
+DROP TABLE colnametests;
+DROP TABLE mixins;
+DROP TABLE people;
+DROP TABLE binaries;
+DROP TABLE computers;
+
diff --git a/activerecord/test/fixtures/db_definitions/db2.sql b/activerecord/test/fixtures/db_definitions/db2.sql
index 033efcb088..46e326d504 100644
--- a/activerecord/test/fixtures/db_definitions/db2.sql
+++ b/activerecord/test/fixtures/db_definitions/db2.sql
@@ -127,3 +127,4 @@ CREATE TABLE computers (
id int generated by default as identity (start with +10000),
developer int NOT NULL
);
+
diff --git a/activerecord/test/fixtures/db_definitions/db22.drop.sql b/activerecord/test/fixtures/db_definitions/db22.drop.sql
new file mode 100644
index 0000000000..df00ffd7c9
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/db22.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+
diff --git a/activerecord/test/fixtures/db_definitions/db22.sql b/activerecord/test/fixtures/db_definitions/db22.sql
index dc4f9ed364..9198cf5f6e 100644
--- a/activerecord/test/fixtures/db_definitions/db22.sql
+++ b/activerecord/test/fixtures/db_definitions/db22.sql
@@ -2,3 +2,4 @@ CREATE TABLE courses (
id int NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL
);
+
diff --git a/activerecord/test/fixtures/db_definitions/mysql.drop.sql b/activerecord/test/fixtures/db_definitions/mysql.drop.sql
new file mode 100644
index 0000000000..1f611c8d5a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/mysql.drop.sql
@@ -0,0 +1,18 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE customers;
+DROP TABLE movies;
+DROP TABLE subscribers;
+DROP TABLE booleantests;
+DROP TABLE auto_id_tests;
+DROP TABLE entrants;
+DROP TABLE colnametests;
+DROP TABLE mixins;
+DROP TABLE people;
+DROP TABLE binaries;
+DROP TABLE computers;
+
diff --git a/activerecord/test/fixtures/db_definitions/mysql.sql b/activerecord/test/fixtures/db_definitions/mysql.sql
index 0137cd91d5..1064373f7f 100755
--- a/activerecord/test/fixtures/db_definitions/mysql.sql
+++ b/activerecord/test/fixtures/db_definitions/mysql.sql
@@ -126,4 +126,5 @@ CREATE TABLE `binaries` (
CREATE TABLE `computers` (
`id` INTEGER NOT NULL PRIMARY KEY,
`developer` INTEGER NOT NULL
-); \ No newline at end of file
+);
+
diff --git a/activerecord/test/fixtures/db_definitions/mysql2.drop.sql b/activerecord/test/fixtures/db_definitions/mysql2.drop.sql
new file mode 100644
index 0000000000..df00ffd7c9
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/mysql2.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+
diff --git a/activerecord/test/fixtures/db_definitions/mysql2.sql b/activerecord/test/fixtures/db_definitions/mysql2.sql
index 0a16a0a2f9..551e0ecc7d 100644
--- a/activerecord/test/fixtures/db_definitions/mysql2.sql
+++ b/activerecord/test/fixtures/db_definitions/mysql2.sql
@@ -2,3 +2,4 @@ CREATE TABLE `courses` (
`id` INTEGER NOT NULL PRIMARY KEY,
`name` VARCHAR(255) NOT NULL
);
+
diff --git a/activerecord/test/fixtures/db_definitions/postgresql.drop.sql b/activerecord/test/fixtures/db_definitions/postgresql.drop.sql
new file mode 100644
index 0000000000..1f611c8d5a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/postgresql.drop.sql
@@ -0,0 +1,18 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE customers;
+DROP TABLE movies;
+DROP TABLE subscribers;
+DROP TABLE booleantests;
+DROP TABLE auto_id_tests;
+DROP TABLE entrants;
+DROP TABLE colnametests;
+DROP TABLE mixins;
+DROP TABLE people;
+DROP TABLE binaries;
+DROP TABLE computers;
+
diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql
index 7664c5e6e0..f779027286 100644
--- a/activerecord/test/fixtures/db_definitions/postgresql.sql
+++ b/activerecord/test/fixtures/db_definitions/postgresql.sql
@@ -144,4 +144,5 @@ CREATE TABLE binaries (
CREATE TABLE computers (
id serial,
developer integer NOT NULL
-); \ No newline at end of file
+);
+
diff --git a/activerecord/test/fixtures/db_definitions/postgresql2.drop.sql b/activerecord/test/fixtures/db_definitions/postgresql2.drop.sql
new file mode 100644
index 0000000000..df00ffd7c9
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/postgresql2.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+
diff --git a/activerecord/test/fixtures/db_definitions/postgresql2.sql b/activerecord/test/fixtures/db_definitions/postgresql2.sql
index b58a45eff7..c0d7f79b04 100644
--- a/activerecord/test/fixtures/db_definitions/postgresql2.sql
+++ b/activerecord/test/fixtures/db_definitions/postgresql2.sql
@@ -1,4 +1,5 @@
CREATE TABLE courses (
id serial,
name text
-); \ No newline at end of file
+);
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlite.drop.sql b/activerecord/test/fixtures/db_definitions/sqlite.drop.sql
new file mode 100644
index 0000000000..1f611c8d5a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/sqlite.drop.sql
@@ -0,0 +1,18 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE customers;
+DROP TABLE movies;
+DROP TABLE subscribers;
+DROP TABLE booleantests;
+DROP TABLE auto_id_tests;
+DROP TABLE entrants;
+DROP TABLE colnametests;
+DROP TABLE mixins;
+DROP TABLE people;
+DROP TABLE binaries;
+DROP TABLE computers;
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlite.sql b/activerecord/test/fixtures/db_definitions/sqlite.sql
index 1b9a5ea932..988973b0ff 100644
--- a/activerecord/test/fixtures/db_definitions/sqlite.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlite.sql
@@ -113,4 +113,5 @@ CREATE TABLE 'binaries' (
CREATE TABLE 'computers' (
'id' INTEGER NOT NULL PRIMARY KEY,
'developer' INTEGER NOT NULL
-); \ No newline at end of file
+);
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlite2.drop.sql b/activerecord/test/fixtures/db_definitions/sqlite2.drop.sql
new file mode 100644
index 0000000000..df00ffd7c9
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/sqlite2.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlite2.sql b/activerecord/test/fixtures/db_definitions/sqlite2.sql
index 19b123968a..5c0d231bbc 100644
--- a/activerecord/test/fixtures/db_definitions/sqlite2.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlite2.sql
@@ -2,3 +2,4 @@ CREATE TABLE 'courses' (
'id' INTEGER NOT NULL PRIMARY KEY,
'name' VARCHAR(255) NOT NULL
);
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlserver.drop.sql b/activerecord/test/fixtures/db_definitions/sqlserver.drop.sql
new file mode 100644
index 0000000000..1f611c8d5a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/sqlserver.drop.sql
@@ -0,0 +1,18 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE customers;
+DROP TABLE movies;
+DROP TABLE subscribers;
+DROP TABLE booleantests;
+DROP TABLE auto_id_tests;
+DROP TABLE entrants;
+DROP TABLE colnametests;
+DROP TABLE mixins;
+DROP TABLE people;
+DROP TABLE binaries;
+DROP TABLE computers;
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlserver.sql b/activerecord/test/fixtures/db_definitions/sqlserver.sql
index 95106a7b18..743a5383fe 100644
--- a/activerecord/test/fixtures/db_definitions/sqlserver.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlserver.sql
@@ -127,3 +127,4 @@ CREATE TABLE computers (
developer int NOT NULL,
PRIMARY KEY (id)
);
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlserver2.drop.sql b/activerecord/test/fixtures/db_definitions/sqlserver2.drop.sql
new file mode 100644
index 0000000000..df00ffd7c9
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/sqlserver2.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+
diff --git a/activerecord/test/fixtures/db_definitions/sqlserver2.sql b/activerecord/test/fixtures/db_definitions/sqlserver2.sql
index dc4f9ed364..9198cf5f6e 100644
--- a/activerecord/test/fixtures/db_definitions/sqlserver2.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlserver2.sql
@@ -2,3 +2,4 @@ CREATE TABLE courses (
id int NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL
);
+