aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/binary_test.rb6
-rw-r--r--activerecord/test/connections/native_firebird/connection.rb24
-rw-r--r--activerecord/test/default_test_firebird.rb16
-rw-r--r--activerecord/test/fixtures/db_definitions/firebird.drop.sql54
-rw-r--r--activerecord/test/fixtures/db_definitions/firebird.sql259
-rw-r--r--activerecord/test/fixtures/db_definitions/firebird2.drop.sql2
-rw-r--r--activerecord/test/fixtures/db_definitions/firebird2.sql6
7 files changed, 364 insertions, 3 deletions
diff --git a/activerecord/test/binary_test.rb b/activerecord/test/binary_test.rb
index 27f4881e50..8ba758a892 100644
--- a/activerecord/test/binary_test.rb
+++ b/activerecord/test/binary_test.rb
@@ -18,9 +18,9 @@ class BinaryTest < Test::Unit::TestCase
# limited to 8KB.
#
# Without using prepared statements, it makes no sense to test
- # BLOB data with DB2, because the length of a statement is
- # limited to 32KB.
- unless %w(SQLServer DB2 OCI).include? ActiveRecord::Base.connection.adapter_name
+ # BLOB data with DB2 or Firebird, because the length of a statement
+ # is limited to 32KB.
+ unless %w(SQLServer DB2 OCI Firebird).include? ActiveRecord::Base.connection.adapter_name
def test_load_save
bin = Binary.new
bin.data = @data
diff --git a/activerecord/test/connections/native_firebird/connection.rb b/activerecord/test/connections/native_firebird/connection.rb
new file mode 100644
index 0000000000..96baf38376
--- /dev/null
+++ b/activerecord/test/connections/native_firebird/connection.rb
@@ -0,0 +1,24 @@
+print "Using native Firebird\n"
+require 'fixtures/course'
+require 'logger'
+
+ActiveRecord::Base.logger = Logger.new("debug.log")
+
+db1 = 'activerecord_unittest'
+db2 = 'activerecord_unittest2'
+
+ActiveRecord::Base.establish_connection(
+ :adapter => "firebird",
+ :host => "localhost",
+ :username => "rails",
+ :password => "rails",
+ :database => db1
+)
+
+Course.establish_connection(
+ :adapter => "firebird",
+ :host => "localhost",
+ :username => "rails",
+ :password => "rails",
+ :database => db2
+)
diff --git a/activerecord/test/default_test_firebird.rb b/activerecord/test/default_test_firebird.rb
new file mode 100644
index 0000000000..4f3d14ce8e
--- /dev/null
+++ b/activerecord/test/default_test_firebird.rb
@@ -0,0 +1,16 @@
+require 'abstract_unit'
+require 'fixtures/default'
+
+class DefaultTest < Test::Unit::TestCase
+ def test_default_timestamp
+ default = Default.new
+ assert_instance_of(Time, default.default_timestamp)
+ assert_equal(:datetime, default.column_for_attribute(:default_timestamp).type)
+
+ # Variance should be small; increase if required -- e.g., if test db is on
+ # remote host and clocks aren't synchronized.
+ t1 = Time.new
+ accepted_variance = 1.0
+ assert_in_delta(t1.to_f, default.default_timestamp.to_f, accepted_variance)
+ end
+end
diff --git a/activerecord/test/fixtures/db_definitions/firebird.drop.sql b/activerecord/test/fixtures/db_definitions/firebird.drop.sql
new file mode 100644
index 0000000000..44b3be419d
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/firebird.drop.sql
@@ -0,0 +1,54 @@
+DROP TABLE accounts;
+DROP TABLE companies;
+DROP TABLE topics;
+DROP TABLE developers;
+DROP TABLE projects;
+DROP TABLE developers_projects;
+DROP TABLE orders;
+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;
+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 defaults;
+
+DROP DOMAIN D_BOOLEAN;
+
+DROP GENERATOR accounts_seq;
+DROP GENERATOR companies_nonstd_seq;
+DROP GENERATOR topics_seq;
+DROP GENERATOR developers_seq;
+DROP GENERATOR projects_seq;
+DROP GENERATOR orders_seq;
+DROP GENERATOR customers_seq;
+DROP GENERATOR movies_seq;
+DROP GENERATOR booleantests_seq;
+DROP GENERATOR auto_id_tests_seq;
+DROP GENERATOR entrants_seq;
+DROP GENERATOR colnametests_seq;
+DROP GENERATOR mixins_seq;
+DROP GENERATOR people_seq;
+DROP GENERATOR binaries_seq;
+DROP GENERATOR computers_seq;
+DROP GENERATOR posts_seq;
+DROP GENERATOR comments_seq;
+DROP GENERATOR authors_seq;
+DROP GENERATOR tasks_seq;
+DROP GENERATOR categories_seq;
+DROP GENERATOR keyboards_seq;
+DROP GENERATOR defaults_seq;
diff --git a/activerecord/test/fixtures/db_definitions/firebird.sql b/activerecord/test/fixtures/db_definitions/firebird.sql
new file mode 100644
index 0000000000..8d7316d40a
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/firebird.sql
@@ -0,0 +1,259 @@
+CREATE DOMAIN D_BOOLEAN AS SMALLINT CHECK (VALUE IN (0, 1));
+
+CREATE TABLE accounts (
+ id BIGINT NOT NULL,
+ firm_id BIGINT,
+ credit_limit INTEGER,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR accounts_seq;
+SET GENERATOR accounts_seq TO 10000;
+
+CREATE TABLE companies (
+ id BIGINT NOT NULL,
+ "TYPE" VARCHAR(50),
+ ruby_type VARCHAR(50),
+ firm_id BIGINT,
+ name VARCHAR(50),
+ client_of INTEGER,
+ rating INTEGER DEFAULT 1,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR companies_nonstd_seq;
+SET GENERATOR companies_nonstd_seq TO 10000;
+
+CREATE TABLE topics (
+ id BIGINT NOT NULL,
+ title VARCHAR(255),
+ author_name VARCHAR(255),
+ author_email_address VARCHAR(255),
+ written_on TIMESTAMP,
+ bonus_time TIME,
+ last_read DATE,
+ content VARCHAR(4000),
+ approved D_BOOLEAN DEFAULT 1,
+ replies_count INTEGER DEFAULT 0,
+ parent_id BIGINT,
+ "TYPE" VARCHAR(50),
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR topics_seq;
+SET GENERATOR topics_seq TO 10000;
+
+CREATE TABLE developers (
+ id BIGINT NOT NULL,
+ name VARCHAR(100),
+ salary INTEGER DEFAULT 70000,
+ created_at TIMESTAMP,
+ updated_at TIMESTAMP,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR developers_seq;
+SET GENERATOR developers_seq TO 10000;
+
+CREATE TABLE projects (
+ id BIGINT NOT NULL,
+ name VARCHAR(100),
+ "TYPE" VARCHAR(255),
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR projects_seq;
+SET GENERATOR projects_seq TO 10000;
+
+CREATE TABLE developers_projects (
+ developer_id BIGINT NOT NULL,
+ project_id BIGINT NOT NULL,
+ joined_on DATE,
+ access_level SMALLINT DEFAULT 1
+);
+
+CREATE TABLE orders (
+ id BIGINT NOT NULL,
+ name VARCHAR(100),
+ billing_customer_id BIGINT,
+ shipping_customer_id BIGINT,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR orders_seq;
+SET GENERATOR orders_seq TO 10000;
+
+CREATE TABLE customers (
+ id BIGINT NOT NULL,
+ name VARCHAR(100),
+ balance INTEGER DEFAULT 0,
+ address_street VARCHAR(100),
+ address_city VARCHAR(100),
+ address_country VARCHAR(100),
+ gps_location VARCHAR(100),
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR customers_seq;
+SET GENERATOR customers_seq TO 10000;
+
+CREATE TABLE movies (
+ movieid BIGINT NOT NULL,
+ name varchar(100),
+ PRIMARY KEY (movieid)
+);
+CREATE GENERATOR movies_seq;
+SET GENERATOR movies_seq TO 10000;
+
+CREATE TABLE subscribers (
+ nick VARCHAR(100) NOT NULL,
+ name VARCHAR(100),
+ PRIMARY KEY (nick)
+);
+
+CREATE TABLE booleantests (
+ id BIGINT NOT NULL,
+ "VALUE" D_BOOLEAN,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR booleantests_seq;
+SET GENERATOR booleantests_seq TO 10000;
+
+CREATE TABLE auto_id_tests (
+ auto_id BIGINT NOT NULL,
+ "VALUE" INTEGER,
+ PRIMARY KEY (auto_id)
+);
+CREATE GENERATOR auto_id_tests_seq;
+SET GENERATOR auto_id_tests_seq TO 10000;
+
+CREATE TABLE entrants (
+ id BIGINT NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ course_id INTEGER NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR entrants_seq;
+SET GENERATOR entrants_seq TO 10000;
+
+CREATE TABLE colnametests (
+ id BIGINT NOT NULL,
+ "REFERENCES" INTEGER NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR colnametests_seq;
+SET GENERATOR colnametests_seq TO 10000;
+
+CREATE TABLE mixins (
+ id BIGINT NOT NULL,
+ parent_id BIGINT,
+ pos INTEGER,
+ created_at TIMESTAMP,
+ updated_at TIMESTAMP,
+ lft INTEGER,
+ rgt INTEGER,
+ root_id BIGINT,
+ "TYPE" VARCHAR(40),
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR mixins_seq;
+SET GENERATOR mixins_seq TO 10000;
+
+CREATE TABLE people (
+ id BIGINT NOT NULL,
+ first_name VARCHAR(40),
+ lock_version INTEGER DEFAULT 0 NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR people_seq;
+SET GENERATOR people_seq TO 10000;
+
+CREATE TABLE binaries (
+ id BIGINT NOT NULL,
+ data BLOB,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR binaries_seq;
+SET GENERATOR binaries_seq TO 10000;
+
+CREATE TABLE computers (
+ id BIGINT NOT NULL,
+ developer INTEGER NOT NULL,
+ "extendedWarranty" INTEGER NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR computers_seq;
+SET GENERATOR computers_seq TO 10000;
+
+CREATE TABLE posts (
+ id BIGINT NOT NULL,
+ author_id BIGINT,
+ title VARCHAR(255) NOT NULL,
+ "TYPE" VARCHAR(255) NOT NULL,
+ body VARCHAR(3000) NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR posts_seq;
+SET GENERATOR posts_seq TO 10000;
+
+CREATE TABLE comments (
+ id BIGINT NOT NULL,
+ post_id BIGINT NOT NULL,
+ "TYPE" VARCHAR(255) NOT NULL,
+ body VARCHAR(3000) NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR comments_seq;
+SET GENERATOR comments_seq TO 10000;
+
+CREATE TABLE authors (
+ id BIGINT NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR authors_seq;
+SET GENERATOR authors_seq TO 10000;
+
+CREATE TABLE tasks (
+ id BIGINT NOT NULL,
+ "STARTING" TIMESTAMP,
+ ending TIMESTAMP,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR tasks_seq;
+SET GENERATOR tasks_seq TO 10000;
+
+CREATE TABLE categories (
+ id BIGINT NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ "TYPE" VARCHAR(255) NOT NULL,
+ PRIMARY KEY (id)
+);
+CREATE GENERATOR categories_seq;
+SET GENERATOR categories_seq TO 10000;
+
+CREATE TABLE categories_posts (
+ category_id BIGINT NOT NULL,
+ post_id BIGINT NOT NULL,
+ PRIMARY KEY (category_id, post_id)
+);
+
+CREATE TABLE fk_test_has_pk (
+ id BIGINT NOT NULL,
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE fk_test_has_fk (
+ id BIGINT NOT NULL,
+ fk_id BIGINT NOT NULL,
+ PRIMARY KEY (id),
+ FOREIGN KEY (fk_id) REFERENCES fk_test_has_pk(id)
+);
+
+CREATE TABLE keyboards (
+ key_number BIGINT NOT NULL,
+ name VARCHAR(50),
+ PRIMARY KEY (key_number)
+);
+CREATE GENERATOR keyboards_seq;
+SET GENERATOR keyboards_seq TO 10000;
+
+CREATE TABLE defaults (
+ id BIGINT NOT NULL,
+ default_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+CREATE GENERATOR defaults_seq;
+SET GENERATOR defaults_seq TO 10000;
diff --git a/activerecord/test/fixtures/db_definitions/firebird2.drop.sql b/activerecord/test/fixtures/db_definitions/firebird2.drop.sql
new file mode 100644
index 0000000000..c59fb1f2ff
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/firebird2.drop.sql
@@ -0,0 +1,2 @@
+DROP TABLE courses;
+DROP GENERATOR courses_seq;
diff --git a/activerecord/test/fixtures/db_definitions/firebird2.sql b/activerecord/test/fixtures/db_definitions/firebird2.sql
new file mode 100644
index 0000000000..c1bc251fbc
--- /dev/null
+++ b/activerecord/test/fixtures/db_definitions/firebird2.sql
@@ -0,0 +1,6 @@
+CREATE TABLE courses (
+ id BIGINT NOT NULL PRIMARY KEY,
+ name VARCHAR(255) NOT NULL
+);
+CREATE GENERATOR courses_seq;
+SET GENERATOR courses_seq TO 10000;