From 72a3221ea114730c8308fd0758d2a483ef9aaba9 Mon Sep 17 00:00:00 2001 From: lawrence Date: Tue, 16 Oct 2007 05:20:13 +0000 Subject: [PATCH] Moving SQL Server tests from AR core to plugin sqlserver adapter. Closes #9884 [lawrence] --- RUNNING_UNIT_TESTS | 44 ++ Rakefile | 42 +- test/aaaa_create_tables_test_sqlserver.rb | 88 ++++ .../native_sqlserver/connection.rb | 46 ++ .../native_sqlserver_odbc/connection.rb | 50 ++ .../db_definitions/sqlserver.drop.sql | 70 +++ test/fixtures/db_definitions/sqlserver.sql | 494 ++++++++++++++++++ .../db_definitions/sqlserver2.drop.sql | 5 + test/fixtures/db_definitions/sqlserver2.sql | 11 + 9 files changed, 849 insertions(+), 1 deletion(-) create mode 100644 RUNNING_UNIT_TESTS create mode 100644 test/aaaa_create_tables_test_sqlserver.rb create mode 100644 test/connections/native_sqlserver/connection.rb create mode 100644 test/connections/native_sqlserver_odbc/connection.rb create mode 100644 test/fixtures/db_definitions/sqlserver.drop.sql create mode 100644 test/fixtures/db_definitions/sqlserver.sql create mode 100644 test/fixtures/db_definitions/sqlserver2.drop.sql create mode 100644 test/fixtures/db_definitions/sqlserver2.sql diff --git a/RUNNING_UNIT_TESTS b/RUNNING_UNIT_TESTS new file mode 100644 index 0000000..627dd1f --- /dev/null +++ b/RUNNING_UNIT_TESTS @@ -0,0 +1,44 @@ +== Creating the test database + +The default names for the test databases are "activerecord_unittest" and +"activerecord_unittest2". If you want to use another database name then be sure +to update the connection adapter setups you want to test with in +test/connections//connection.rb. + + +== Requirements + +The tests of this adapter depend on the existence of rails edge. All the tests +defined by rails edge are re-used. For this to work the following directory +structure is assumed to exist: + +#{RAILS_ROOT}/vendor/plugins/adapters/sqlserver +#{RAILS_ROOT}/vendor/rails/activerecord/test + +Define a user named 'rails' in SQL Server with all privileges granted. Use an empty +password for user 'rails', or alternatively use the OSQLPASSWORD environment variable +which allows you to set a default password for the current session. + +Then run "rake create_databases". + + +== Running with Rake + +The easiest way to run the unit tests is through Rake. Either run "rake test_sqlserver" +or "rake test_sqlserver_odbc". For more information, checkout the full array +of rake tasks with "rake -T" + +Rake can be found at http://rake.rubyforge.org + + +== Running by hand + +Unit tests are located in test directory. If you only want to run a single test suite, +you can do so with: + + rake test_sqlserver TEST=base_test.rb + +That'll run the base suite using the SQLServer-Ruby adapter. + + + diff --git a/Rakefile b/Rakefile index ee8aa6a..098f454 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ require 'rubygems' require 'rake' +require 'rake/testtask' require 'rake/packagetask' require 'rake/gempackagetask' require 'rake/contrib/rubyforgepublisher' @@ -30,7 +31,6 @@ Rake::GemPackageTask.new(spec) do |p| p.need_zip = true end - desc "Publish the beta gem" task :pgem => :package do Rake::SshFilePublisher.new("davidhh@wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_NAME}-#{PKG_VERSION}.gem").upload @@ -47,3 +47,43 @@ task :release => :package do rubyforge.login rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages) end + + +SCHEMA_PATH = File.join(File.dirname(__FILE__), *%w(test fixtures db_definitions)) + +desc 'Create the SQL Server test databases' +task :create_databases do + # Define a user named 'rails' in SQL Server with all privileges granted + # Use an empty password for user 'rails', or alternatively use the OSQLPASSWORD environment variable + # which allows you to set a default password for the current session. + %x( osql -S localhost -U rails -Q "create database activerecord_unittest" -P ) + %x( osql -S localhost -U rails -Q "create database activerecord_unittest2" -P ) + %x( osql -S localhost -U rails -d activerecord_unittest -Q "exec sp_grantdbaccess 'rails'" -P ) + %x( osql -S localhost -U rails -d activerecord_unittest2 -Q "exec sp_grantdbaccess 'rails'" -P ) + %x( osql -S localhost -U rails -d activerecord_unittest -Q "grant BACKUP DATABASE, BACKUP LOG, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW to 'rails';" -P ) + %x( osql -S localhost -U rails -d activerecord_unittest2 -Q "grant BACKUP DATABASE, BACKUP LOG, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW to 'rails';" -P ) +end + +desc 'Drop the SQL Server test databases' +task :drop_databases do + %x( osql -S localhost -U rails -Q "drop database activerecord_unittest" -P ) + %x( osql -S localhost -U rails -Q "drop database activerecord_unittest2" -P ) +end + +desc 'Recreate the SQL Server test databases' +task :recreate_databases => [:drop_databases, :create_databases] + + +for adapter in %w( sqlserver sqlserver_odbc ) + Rake::TestTask.new("test_#{adapter}") { |t| + t.libs << "test" + t.libs << "test/connections/native_#{adapter}" + t.libs << "../../../rails/activerecord/test/" + t.pattern = ["test/**/*_test_sqlserver.rb", "../../../rails/activerecord/test/**/*_test.rb"] + t.verbose = true + } + + namespace adapter do + task :test => "test_#{adapter}" + end +end diff --git a/test/aaaa_create_tables_test_sqlserver.rb b/test/aaaa_create_tables_test_sqlserver.rb new file mode 100644 index 0000000..0c4fd55 --- /dev/null +++ b/test/aaaa_create_tables_test_sqlserver.rb @@ -0,0 +1,88 @@ +# The filename begins with "aaaa" to ensure this is the first test. +require 'abstract_unit' + +class AAAACreateTablesTestSqlserver < Test::Unit::TestCase + self.use_transactional_fixtures = false + + def setup + @ar_path = "../../../rails/activerecord/test/fixtures/db_definitions" + @base_path = "#{File.dirname(__FILE__)}/fixtures/db_definitions" + end + + def test_sqlserver_load_test_schema + execute_sql_file("#{@base_path}/sqlserver.drop.sql", ActiveRecord::Base.connection) + execute_sql_file("#{@base_path}/sqlserver.sql", ActiveRecord::Base.connection) + execute_sql_file("#{@base_path}/sqlserver2.drop.sql", Course.connection) + execute_sql_file("#{@base_path}/sqlserver2.sql", Course.connection) + assert true + end + + #FUTURE + def __test_activerecord_load_test_schema + #FUTURE: eval(File.read("#{@ar_path}/schema.rb")) + eval(File.read("#{@base_path}/schema.rb")) + connection = ActiveRecord::Base.connection + begin + ActiveRecord::Base.connection = Course.connection + #FUTURE: eval(File.read("#{@ar_path}/schema2.rb")) + eval(File.read("#{@base_path}/schema2.rb")) + ensure + ActiveRecord::Base.connection = connection + end + assert true + end + + private + + def execute_sql_file(path, connection) + File.read(path).split(';').each_with_index do |sql, i| + begin + connection.execute("\n\n-- statement ##{i}\n#{sql}\n") unless sql.blank? + rescue ActiveRecord::StatementInvalid + #$stderr.puts "warning: #{$!}" + end + end +# The filename begins with "aaaa" to ensure this is the first test. +require 'abstract_unit' + +class AAAACreateTablesTestSqlserver < Test::Unit::TestCase + self.use_transactional_fixtures = false + + def setup + @ar_path = "../../../rails/activerecord/test/fixtures/db_definitions" + @base_path = "#{File.dirname(__FILE__)}/fixtures/db_definitions" + end + + def test_sqlserver_load_test_schema + execute_sql_file("#{@base_path}/sqlserver.drop.sql", ActiveRecord::Base.connection) + execute_sql_file("#{@base_path}/sqlserver.sql", ActiveRecord::Base.connection) + execute_sql_file("#{@base_path}/sqlserver2.drop.sql", Course.connection) + execute_sql_file("#{@base_path}/sqlserver2.sql", Course.connection) + assert true + end + + #FUTURE + def __test_activerecord_load_test_schema + #FUTURE: eval(File.read("#{@ar_path}/schema.rb")) + eval(File.read("#{@base_path}/schema.rb")) + connection = ActiveRecord::Base.connection + begin + ActiveRecord::Base.connection = Course.connection + #FUTURE: eval(File.read("#{@ar_path}/schema2.rb")) + eval(File.read("#{@base_path}/schema2.rb")) + ensure + ActiveRecord::Base.connection = connection + end + assert true + end + + private + + def execute_sql_file(path, connection) + File.read(path).split(';').each_with_index do |sql, i| + begin + connection.execute("\n\n-- statement ##{i}\n#{sql}\n") unless sql.blank? + rescue ActiveRecord::StatementInvalid + #$stderr.puts "warning: #{$!}" + end + end diff --git a/test/connections/native_sqlserver/connection.rb b/test/connections/native_sqlserver/connection.rb new file mode 100644 index 0000000..bb2c20f --- /dev/null +++ b/test/connections/native_sqlserver/connection.rb @@ -0,0 +1,46 @@ +print "Using native SQLServer\n" +require_dependency 'fixtures/course' +require 'logger' + +ActiveRecord::Base.logger = Logger.new("debug.log") + +ActiveRecord::Base.configurations = { + 'arunit' => { + :adapter => 'sqlserver', + :host => 'localhost', + :username => 'rails', + :database => 'activerecord_unittest' + }, + 'arunit2' => { + :adapter => 'sqlserver', + :host => 'localhost', + :username => 'rails', + :database => 'activerecord_unittest2' + } +} + +ActiveRecord::Base.establish_connection 'arunit' +Course.establish_connection 'arunit2' +print "Using native SQLServer\n" +require_dependency 'fixtures/course' +require 'logger' + +ActiveRecord::Base.logger = Logger.new("debug.log") + +ActiveRecord::Base.configurations = { + 'arunit' => { + :adapter => 'sqlserver', + :host => 'localhost', + :username => 'rails', + :database => 'activerecord_unittest' + }, + 'arunit2' => { + :adapter => 'sqlserver', + :host => 'localhost', + :username => 'rails', + :database => 'activerecord_unittest2' + } +} + +ActiveRecord::Base.establish_connection 'arunit' +Course.establish_connection 'arunit2' diff --git a/test/connections/native_sqlserver_odbc/connection.rb b/test/connections/native_sqlserver_odbc/connection.rb new file mode 100644 index 0000000..99572d9 --- /dev/null +++ b/test/connections/native_sqlserver_odbc/connection.rb @@ -0,0 +1,50 @@ +print "Using native SQLServer via ODBC\n" +require_dependency 'fixtures/course' +require 'logger' + +ActiveRecord::Base.logger = Logger.new("debug.log") + +ActiveRecord::Base.configurations = { + 'arunit' => { + :adapter => 'sqlserver', + :mode => 'ODBC', + :host => 'localhost', + :username => 'rails', + :dsn => 'activerecord_unittest' + }, + 'arunit2' => { + :adapter => 'sqlserver', + :mode => 'ODBC', + :host => 'localhost', + :username => 'rails', + :dsn => 'activerecord_unittest2' + } +} + +ActiveRecord::Base.establish_connection 'arunit' +Course.establish_connection 'arunit2' +print "Using native SQLServer via ODBC\n" +require_dependency 'fixtures/course' +require 'logger' + +ActiveRecord::Base.logger = Logger.new("debug.log") + +ActiveRecord::Base.configurations = { + 'arunit' => { + :adapter => 'sqlserver', + :mode => 'ODBC', + :host => 'localhost', + :username => 'rails', + :dsn => 'activerecord_unittest' + }, + 'arunit2' => { + :adapter => 'sqlserver', + :mode => 'ODBC', + :host => 'localhost', + :username => 'rails', + :dsn => 'activerecord_unittest2' + } +} + +ActiveRecord::Base.establish_connection 'arunit' +Course.establish_connection 'arunit2' diff --git a/test/fixtures/db_definitions/sqlserver.drop.sql b/test/fixtures/db_definitions/sqlserver.drop.sql new file mode 100644 index 0000000..4e69c74 --- /dev/null +++ b/test/fixtures/db_definitions/sqlserver.drop.sql @@ -0,0 +1,70 @@ +DROP TABLE accounts; +DROP TABLE funny_jokes; +DROP TABLE companies; +DROP TABLE topics; +DROP TABLE developers; +DROP TABLE projects; +DROP TABLE developers_projects; +DROP TABLE customers; +DROP TABLE orders; +DROP TABLE movies; +DROP TABLE subscribers; +DROP TABLE booleantests; +DROP TABLE defaults; +DROP TABLE auto_id_tests; +DROP TABLE entrants; +DROP TABLE colnametests; +DROP TABLE mixins; +DROP TABLE people; +DROP TABLE readers; +DROP TABLE binaries; +DROP TABLE computers; +DROP TABLE posts; +DROP TABLE comments; +DROP TABLE authors; +DROP TABLE tasks; +DROP TABLE categories; +DROP TABLE categories_posts; +DROP TABLE fk_test_has_fk; +DROP TABLE fk_test_has_pk; +DROP TABLE keyboards; +DROP TABLE legacy_things; +DROP TABLE numeric_data; +DROP TABLE [order]; +DROP TABLE mixed_case_monkeys; +DROP TABLE minimalistics; +DROP TABLE accounts; +DROP TABLE funny_jokes; +DROP TABLE companies; +DROP TABLE topics; +DROP TABLE developers; +DROP TABLE projects; +DROP TABLE developers_projects; +DROP TABLE customers; +DROP TABLE orders; +DROP TABLE movies; +DROP TABLE subscribers; +DROP TABLE booleantests; +DROP TABLE defaults; +DROP TABLE auto_id_tests; +DROP TABLE entrants; +DROP TABLE colnametests; +DROP TABLE mixins; +DROP TABLE people; +DROP TABLE readers; +DROP TABLE binaries; +DROP TABLE computers; +DROP TABLE posts; +DROP TABLE comments; +DROP TABLE authors; +DROP TABLE tasks; +DROP TABLE categories; +DROP TABLE categories_posts; +DROP TABLE fk_test_has_fk; +DROP TABLE fk_test_has_pk; +DROP TABLE keyboards; +DROP TABLE legacy_things; +DROP TABLE numeric_data; +DROP TABLE [order]; +DROP TABLE mixed_case_monkeys; +DROP TABLE minimalistics; diff --git a/test/fixtures/db_definitions/sqlserver.sql b/test/fixtures/db_definitions/sqlserver.sql new file mode 100644 index 0000000..a43d83c --- /dev/null +++ b/test/fixtures/db_definitions/sqlserver.sql @@ -0,0 +1,494 @@ +CREATE TABLE accounts ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + firm_id int default NULL, + credit_limit int default NULL +); + +CREATE TABLE funny_jokes ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(50) default NULL +); + +CREATE TABLE companies ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + type varchar(50) default NULL, + ruby_type varchar(50) default NULL, + firm_id int default NULL, + name varchar(50) default NULL, + client_of int default NULL, + rating int default 1 +); + +CREATE TABLE topics ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + title varchar(255) default NULL, + author_name varchar(255) default NULL, + author_email_address varchar(255) default NULL, + written_on datetime default NULL, + bonus_time datetime default NULL, + last_read datetime default NULL, + content varchar(255) default NULL, + approved bit default 1, + replies_count int default 0, + parent_id int default NULL, + type varchar(50) default NULL +); + +CREATE TABLE developers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + salary int default 70000, + created_at datetime default NULL, + updated_at datetime default NULL +); + +CREATE TABLE projects ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + type varchar(255) default NULL +); + +CREATE TABLE developers_projects ( + developer_id int NOT NULL, + project_id int NOT NULL, + joined_on datetime default NULL, + access_level int default 1 +); + +CREATE TABLE orders ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + billing_customer_id int default NULL, + shipping_customer_id int default NULL +); + + +CREATE TABLE customers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + balance int default 0, + address_street varchar(100) default NULL, + address_city varchar(100) default NULL, + address_country varchar(100) default NULL, + gps_location varchar(100) default NULL +); + +CREATE TABLE movies ( + movieid int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL +); + +CREATE TABLE subscribers ( + nick varchar(100) NOT NULL PRIMARY KEY, + name varchar(100) default NULL +); + +CREATE TABLE booleantests ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + value bit default NULL +); + +CREATE TABLE defaults ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, +-- these brought from the PostgreSQL defaults_test.rb but +-- tests only exist for integers and decimals, currently +-- modified_date date default CURRENT_DATE, +-- modified_date_function date default now(), +-- fixed_date date default '2004-01-01', +-- modified_time timestamp default CURRENT_TIMESTAMP, +-- modified_time_function timestamp default now(), +-- fixed_time timestamp default '2004-01-01 00:00:00.000000-00', +-- char1 char(1) default 'Y', +-- char2 character varying(50) default 'a varchar field', +-- char3 text default 'a text field', + positive_integer integer default 1, + negative_integer integer default -1, + decimal_number decimal(3,2) default 2.78 +); + +CREATE TABLE auto_id_tests ( + auto_id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + value int default NULL +); + +CREATE TABLE entrants ( + id int NOT NULL PRIMARY KEY, + name varchar(255) NOT NULL, + course_id int NOT NULL +); + +CREATE TABLE colnametests ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + [references] int NOT NULL +); + +CREATE TABLE mixins ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + parent_id int default NULL, + pos int default NULL, + created_at datetime default NULL, + updated_at datetime default NULL, + lft int default NULL, + rgt int default NULL, + root_id int default NULL, + type varchar(40) default NULL +); + +CREATE TABLE people ( + id int NOT NULL IDENTITY(1, 1), + first_name varchar(40) NULL, + lock_version int default 0, + PRIMARY KEY (id) +); + +CREATE TABLE readers ( + id int NOT NULL IDENTITY(1, 1), + post_id int NOT NULL, + person_id int NOT NULL, + primary key (id) +); + +CREATE TABLE binaries ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + data image NULL +); + +CREATE TABLE computers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + developer int NOT NULL, + extendedWarranty int NOT NULL +); + +CREATE TABLE posts ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + author_id int default NULL, + title varchar(255) default NULL, + type varchar(255) default NULL, + body varchar(4096) default NULL +); + +CREATE TABLE comments ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + post_id int default NULL, + type varchar(255) default NULL, + body varchar(4096) default NULL +); + +CREATE TABLE authors ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(255) default NULL +); + +CREATE TABLE tasks ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + starting datetime default NULL, + ending datetime default NULL +); + +CREATE TABLE categories ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(255), + type varchar(255) default NULL +); + +CREATE TABLE categories_posts ( + category_id int NOT NULL, + post_id int NOT NULL +); + +CREATE TABLE fk_test_has_pk ( + id INTEGER NOT NULL PRIMARY KEY +); + +CREATE TABLE fk_test_has_fk ( + id INTEGER NOT NULL PRIMARY KEY, + fk_id INTEGER NOT NULL, + + FOREIGN KEY (fk_id) REFERENCES fk_test_has_pk(id) +); + +CREATE TABLE keyboards ( + key_number int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(50) default NULL +); + +--This table has an altered lock_version column name. +CREATE TABLE legacy_things ( + id int NOT NULL IDENTITY(1, 1), + tps_report_number int default NULL, + version int default 0, + PRIMARY KEY (id) +); + +CREATE TABLE numeric_data ( + id int NOT NULL IDENTITY(1, 1), + bank_balance decimal(10,2), + big_bank_balance decimal(15,2), + world_population decimal(10), + my_house_population decimal(2), + decimal_number_with_default decimal(3,2) DEFAULT 2.78 +); + +CREATE TABLE [order] ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + color varchar(255), + fruit_size varchar(255), + texture varchar(255), + flavor varchar(255) +); + +CREATE TABLE mixed_case_monkeys ( + [monkeyID] int NOT NULL IDENTITY(1, 1), + [fleaCount] int default NULL +); + +CREATE TABLE minimalistics ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY +); +CREATE TABLE accounts ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + firm_id int default NULL, + credit_limit int default NULL +); + +CREATE TABLE funny_jokes ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(50) default NULL +); + +CREATE TABLE companies ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + type varchar(50) default NULL, + ruby_type varchar(50) default NULL, + firm_id int default NULL, + name varchar(50) default NULL, + client_of int default NULL, + rating int default 1 +); + +CREATE TABLE topics ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + title varchar(255) default NULL, + author_name varchar(255) default NULL, + author_email_address varchar(255) default NULL, + written_on datetime default NULL, + bonus_time datetime default NULL, + last_read datetime default NULL, + content varchar(255) default NULL, + approved bit default 1, + replies_count int default 0, + parent_id int default NULL, + type varchar(50) default NULL +); + +CREATE TABLE developers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + salary int default 70000, + created_at datetime default NULL, + updated_at datetime default NULL +); + +CREATE TABLE projects ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + type varchar(255) default NULL +); + +CREATE TABLE developers_projects ( + developer_id int NOT NULL, + project_id int NOT NULL, + joined_on datetime default NULL, + access_level int default 1 +); + +CREATE TABLE orders ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + billing_customer_id int default NULL, + shipping_customer_id int default NULL +); + + +CREATE TABLE customers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL, + balance int default 0, + address_street varchar(100) default NULL, + address_city varchar(100) default NULL, + address_country varchar(100) default NULL, + gps_location varchar(100) default NULL +); + +CREATE TABLE movies ( + movieid int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(100) default NULL +); + +CREATE TABLE subscribers ( + nick varchar(100) NOT NULL PRIMARY KEY, + name varchar(100) default NULL +); + +CREATE TABLE booleantests ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + value bit default NULL +); + +CREATE TABLE defaults ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, +-- these brought from the PostgreSQL defaults_test.rb but +-- tests only exist for integers and decimals, currently +-- modified_date date default CURRENT_DATE, +-- modified_date_function date default now(), +-- fixed_date date default '2004-01-01', +-- modified_time timestamp default CURRENT_TIMESTAMP, +-- modified_time_function timestamp default now(), +-- fixed_time timestamp default '2004-01-01 00:00:00.000000-00', +-- char1 char(1) default 'Y', +-- char2 character varying(50) default 'a varchar field', +-- char3 text default 'a text field', + positive_integer integer default 1, + negative_integer integer default -1, + decimal_number decimal(3,2) default 2.78 +); + +CREATE TABLE auto_id_tests ( + auto_id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + value int default NULL +); + +CREATE TABLE entrants ( + id int NOT NULL PRIMARY KEY, + name varchar(255) NOT NULL, + course_id int NOT NULL +); + +CREATE TABLE colnametests ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + [references] int NOT NULL +); + +CREATE TABLE mixins ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + parent_id int default NULL, + pos int default NULL, + created_at datetime default NULL, + updated_at datetime default NULL, + lft int default NULL, + rgt int default NULL, + root_id int default NULL, + type varchar(40) default NULL +); + +CREATE TABLE people ( + id int NOT NULL IDENTITY(1, 1), + first_name varchar(40) NULL, + lock_version int default 0, + PRIMARY KEY (id) +); + +CREATE TABLE readers ( + id int NOT NULL IDENTITY(1, 1), + post_id int NOT NULL, + person_id int NOT NULL, + primary key (id) +); + +CREATE TABLE binaries ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + data image NULL +); + +CREATE TABLE computers ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + developer int NOT NULL, + extendedWarranty int NOT NULL +); + +CREATE TABLE posts ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + author_id int default NULL, + title varchar(255) default NULL, + type varchar(255) default NULL, + body varchar(4096) default NULL +); + +CREATE TABLE comments ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + post_id int default NULL, + type varchar(255) default NULL, + body varchar(4096) default NULL +); + +CREATE TABLE authors ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(255) default NULL +); + +CREATE TABLE tasks ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + starting datetime default NULL, + ending datetime default NULL +); + +CREATE TABLE categories ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(255), + type varchar(255) default NULL +); + +CREATE TABLE categories_posts ( + category_id int NOT NULL, + post_id int NOT NULL +); + +CREATE TABLE fk_test_has_pk ( + id INTEGER NOT NULL PRIMARY KEY +); + +CREATE TABLE fk_test_has_fk ( + id INTEGER NOT NULL PRIMARY KEY, + fk_id INTEGER NOT NULL, + + FOREIGN KEY (fk_id) REFERENCES fk_test_has_pk(id) +); + +CREATE TABLE keyboards ( + key_number int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + name varchar(50) default NULL +); + +--This table has an altered lock_version column name. +CREATE TABLE legacy_things ( + id int NOT NULL IDENTITY(1, 1), + tps_report_number int default NULL, + version int default 0, + PRIMARY KEY (id) +); + +CREATE TABLE numeric_data ( + id int NOT NULL IDENTITY(1, 1), + bank_balance decimal(10,2), + big_bank_balance decimal(15,2), + world_population decimal(10), + my_house_population decimal(2), + decimal_number_with_default decimal(3,2) DEFAULT 2.78 +); + +CREATE TABLE [order] ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY, + color varchar(255), + fruit_size varchar(255), + texture varchar(255), + flavor varchar(255) +); + +CREATE TABLE mixed_case_monkeys ( + [monkeyID] int NOT NULL IDENTITY(1, 1), + [fleaCount] int default NULL +); + +CREATE TABLE minimalistics ( + id int NOT NULL IDENTITY(1, 1) PRIMARY KEY +); diff --git a/test/fixtures/db_definitions/sqlserver2.drop.sql b/test/fixtures/db_definitions/sqlserver2.drop.sql new file mode 100644 index 0000000..f69e62c --- /dev/null +++ b/test/fixtures/db_definitions/sqlserver2.drop.sql @@ -0,0 +1,5 @@ +DROP TABLE courses; + +DROP TABLE courses; + + diff --git a/test/fixtures/db_definitions/sqlserver2.sql b/test/fixtures/db_definitions/sqlserver2.sql new file mode 100644 index 0000000..e233dfb --- /dev/null +++ b/test/fixtures/db_definitions/sqlserver2.sql @@ -0,0 +1,11 @@ +CREATE TABLE courses ( + id int NOT NULL PRIMARY KEY, + name varchar(255) NOT NULL +); + +CREATE TABLE courses ( + id int NOT NULL PRIMARY KEY, + name varchar(255) NOT NULL +); + +