activerecord-jdbc-adapter-onsite 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +22 -0
- data/.travis.yml +14 -0
- data/Appraisals +16 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +45 -0
- data/History.txt +488 -0
- data/LICENSE.txt +21 -0
- data/README.rdoc +214 -0
- data/Rakefile +62 -0
- data/activerecord-jdbc-adapter.gemspec +23 -0
- data/bench/bench_attributes.rb +13 -0
- data/bench/bench_attributes_new.rb +14 -0
- data/bench/bench_create.rb +12 -0
- data/bench/bench_find_all.rb +12 -0
- data/bench/bench_find_all_mt.rb +25 -0
- data/bench/bench_model.rb +85 -0
- data/bench/bench_new.rb +12 -0
- data/bench/bench_new_valid.rb +12 -0
- data/bench/bench_valid.rb +13 -0
- data/gemfiles/rails23.gemfile +10 -0
- data/gemfiles/rails23.gemfile.lock +38 -0
- data/gemfiles/rails30.gemfile +9 -0
- data/gemfiles/rails30.gemfile.lock +33 -0
- data/gemfiles/rails31.gemfile +9 -0
- data/gemfiles/rails31.gemfile.lock +35 -0
- data/gemfiles/rails32.gemfile +9 -0
- data/gemfiles/rails32.gemfile.lock +35 -0
- data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
- data/lib/activerecord-jdbc-adapter.rb +8 -0
- data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
- data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +15 -0
- data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/mssql_compiler.rb +46 -0
- data/lib/arel/visitors/compat.rb +13 -0
- data/lib/arel/visitors/db2.rb +17 -0
- data/lib/arel/visitors/derby.rb +32 -0
- data/lib/arel/visitors/firebird.rb +24 -0
- data/lib/arel/visitors/hsqldb.rb +26 -0
- data/lib/arel/visitors/sql_server.rb +46 -0
- data/lib/arjdbc.rb +24 -0
- data/lib/arjdbc/db2.rb +2 -0
- data/lib/arjdbc/db2/adapter.rb +541 -0
- data/lib/arjdbc/derby.rb +7 -0
- data/lib/arjdbc/derby/adapter.rb +358 -0
- data/lib/arjdbc/derby/connection_methods.rb +19 -0
- data/lib/arjdbc/discover.rb +92 -0
- data/lib/arjdbc/firebird.rb +2 -0
- data/lib/arjdbc/firebird/adapter.rb +140 -0
- data/lib/arjdbc/h2.rb +4 -0
- data/lib/arjdbc/h2/adapter.rb +54 -0
- data/lib/arjdbc/h2/connection_methods.rb +13 -0
- data/lib/arjdbc/hsqldb.rb +4 -0
- data/lib/arjdbc/hsqldb/adapter.rb +184 -0
- data/lib/arjdbc/hsqldb/connection_methods.rb +15 -0
- data/lib/arjdbc/informix.rb +3 -0
- data/lib/arjdbc/informix/adapter.rb +142 -0
- data/lib/arjdbc/informix/connection_methods.rb +11 -0
- data/lib/arjdbc/jdbc.rb +2 -0
- data/lib/arjdbc/jdbc/adapter.rb +356 -0
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/base_ext.rb +15 -0
- data/lib/arjdbc/jdbc/callbacks.rb +44 -0
- data/lib/arjdbc/jdbc/column.rb +47 -0
- data/lib/arjdbc/jdbc/compatibility.rb +51 -0
- data/lib/arjdbc/jdbc/connection.rb +134 -0
- data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
- data/lib/arjdbc/jdbc/core_ext.rb +24 -0
- data/lib/arjdbc/jdbc/discover.rb +18 -0
- data/lib/arjdbc/jdbc/driver.rb +35 -0
- data/lib/arjdbc/jdbc/extension.rb +47 -0
- data/lib/arjdbc/jdbc/java.rb +14 -0
- data/lib/arjdbc/jdbc/jdbc.rake +131 -0
- data/lib/arjdbc/jdbc/missing_functionality_helper.rb +88 -0
- data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
- data/lib/arjdbc/jdbc/railtie.rb +9 -0
- data/lib/arjdbc/jdbc/rake_tasks.rb +10 -0
- data/lib/arjdbc/jdbc/require_driver.rb +16 -0
- data/lib/arjdbc/jdbc/type_converter.rb +126 -0
- data/lib/arjdbc/mimer.rb +2 -0
- data/lib/arjdbc/mimer/adapter.rb +142 -0
- data/lib/arjdbc/mssql.rb +4 -0
- data/lib/arjdbc/mssql/adapter.rb +477 -0
- data/lib/arjdbc/mssql/connection_methods.rb +31 -0
- data/lib/arjdbc/mssql/limit_helpers.rb +101 -0
- data/lib/arjdbc/mssql/lock_helpers.rb +72 -0
- data/lib/arjdbc/mssql/tsql_helper.rb +61 -0
- data/lib/arjdbc/mysql.rb +4 -0
- data/lib/arjdbc/mysql/adapter.rb +505 -0
- data/lib/arjdbc/mysql/connection_methods.rb +28 -0
- data/lib/arjdbc/oracle.rb +3 -0
- data/lib/arjdbc/oracle/adapter.rb +432 -0
- data/lib/arjdbc/oracle/connection_methods.rb +12 -0
- data/lib/arjdbc/postgresql.rb +4 -0
- data/lib/arjdbc/postgresql/adapter.rb +861 -0
- data/lib/arjdbc/postgresql/connection_methods.rb +23 -0
- data/lib/arjdbc/sqlite3.rb +4 -0
- data/lib/arjdbc/sqlite3/adapter.rb +389 -0
- data/lib/arjdbc/sqlite3/connection_methods.rb +35 -0
- data/lib/arjdbc/sybase.rb +2 -0
- data/lib/arjdbc/sybase/adapter.rb +46 -0
- data/lib/arjdbc/version.rb +8 -0
- data/lib/generators/jdbc/USAGE +10 -0
- data/lib/generators/jdbc/jdbc_generator.rb +9 -0
- data/lib/jdbc_adapter.rb +2 -0
- data/lib/jdbc_adapter/rake_tasks.rb +3 -0
- data/lib/jdbc_adapter/version.rb +3 -0
- data/lib/pg.rb +26 -0
- data/pom.xml +57 -0
- data/rails_generators/jdbc_generator.rb +15 -0
- data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
- data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
- data/rakelib/bundler_ext.rb +11 -0
- data/rakelib/compile.rake +23 -0
- data/rakelib/db.rake +39 -0
- data/rakelib/rails.rake +41 -0
- data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +69 -0
- data/src/java/arjdbc/derby/DerbyModule.java +324 -0
- data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +70 -0
- data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +74 -0
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +68 -0
- data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +36 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1346 -0
- data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
- data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +127 -0
- data/src/java/arjdbc/mysql/MySQLModule.java +134 -0
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +161 -0
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +85 -0
- data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +82 -0
- data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +126 -0
- data/test/abstract_db_create.rb +135 -0
- data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
- data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
- data/test/activerecord/jall.sh +7 -0
- data/test/activerecord/jtest.sh +3 -0
- data/test/db/db2.rb +11 -0
- data/test/db/derby.rb +12 -0
- data/test/db/h2.rb +11 -0
- data/test/db/hsqldb.rb +13 -0
- data/test/db/informix.rb +11 -0
- data/test/db/jdbc.rb +12 -0
- data/test/db/jndi_config.rb +40 -0
- data/test/db/logger.rb +3 -0
- data/test/db/mssql.rb +9 -0
- data/test/db/mysql.rb +10 -0
- data/test/db/oracle.rb +34 -0
- data/test/db/postgres.rb +18 -0
- data/test/db/sqlite3.rb +11 -0
- data/test/db2_reset_column_information_test.rb +8 -0
- data/test/db2_simple_test.rb +66 -0
- data/test/derby_migration_test.rb +68 -0
- data/test/derby_multibyte_test.rb +12 -0
- data/test/derby_reset_column_information_test.rb +8 -0
- data/test/derby_row_locking_test.rb +9 -0
- data/test/derby_simple_test.rb +139 -0
- data/test/generic_jdbc_connection_test.rb +29 -0
- data/test/h2_change_column_test.rb +68 -0
- data/test/h2_simple_test.rb +41 -0
- data/test/has_many_through.rb +79 -0
- data/test/helper.rb +108 -0
- data/test/hsqldb_simple_test.rb +6 -0
- data/test/informix_simple_test.rb +48 -0
- data/test/jdbc_common.rb +28 -0
- data/test/jndi_callbacks_test.rb +36 -0
- data/test/jndi_test.rb +25 -0
- data/test/manualTestDatabase.rb +191 -0
- data/test/models/add_not_null_column_to_table.rb +9 -0
- data/test/models/auto_id.rb +15 -0
- data/test/models/custom_pk_name.rb +14 -0
- data/test/models/data_types.rb +30 -0
- data/test/models/entry.rb +40 -0
- data/test/models/mixed_case.rb +22 -0
- data/test/models/reserved_word.rb +15 -0
- data/test/models/string_id.rb +17 -0
- data/test/models/thing.rb +16 -0
- data/test/models/validates_uniqueness_of_string.rb +19 -0
- data/test/mssql_db_create_test.rb +26 -0
- data/test/mssql_identity_insert_test.rb +19 -0
- data/test/mssql_ignore_system_views_test.rb +27 -0
- data/test/mssql_legacy_types_test.rb +58 -0
- data/test/mssql_limit_offset_test.rb +136 -0
- data/test/mssql_multibyte_test.rb +18 -0
- data/test/mssql_null_test.rb +14 -0
- data/test/mssql_reset_column_information_test.rb +8 -0
- data/test/mssql_row_locking_sql_test.rb +159 -0
- data/test/mssql_row_locking_test.rb +9 -0
- data/test/mssql_simple_test.rb +55 -0
- data/test/mysql_db_create_test.rb +27 -0
- data/test/mysql_index_length_test.rb +58 -0
- data/test/mysql_info_test.rb +123 -0
- data/test/mysql_multibyte_test.rb +10 -0
- data/test/mysql_nonstandard_primary_key_test.rb +42 -0
- data/test/mysql_reset_column_information_test.rb +8 -0
- data/test/mysql_simple_test.rb +125 -0
- data/test/oracle_reset_column_information_test.rb +8 -0
- data/test/oracle_simple_test.rb +18 -0
- data/test/oracle_specific_test.rb +83 -0
- data/test/postgres_db_create_test.rb +32 -0
- data/test/postgres_drop_db_test.rb +16 -0
- data/test/postgres_information_schema_leak_test.rb +29 -0
- data/test/postgres_mixed_case_test.rb +29 -0
- data/test/postgres_native_type_mapping_test.rb +93 -0
- data/test/postgres_nonseq_pkey_test.rb +38 -0
- data/test/postgres_reserved_test.rb +22 -0
- data/test/postgres_reset_column_information_test.rb +8 -0
- data/test/postgres_schema_search_path_test.rb +48 -0
- data/test/postgres_simple_test.rb +168 -0
- data/test/postgres_table_alias_length_test.rb +15 -0
- data/test/postgres_type_conversion_test.rb +34 -0
- data/test/row_locking.rb +90 -0
- data/test/simple.rb +731 -0
- data/test/sqlite3_reset_column_information_test.rb +8 -0
- data/test/sqlite3_simple_test.rb +316 -0
- data/test/sybase_jtds_simple_test.rb +28 -0
- data/test/sybase_reset_column_information_test.rb +8 -0
- metadata +288 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/jdbc'
|
|
3
|
+
|
|
4
|
+
class GenericJdbcConnectionTest < Test::Unit::TestCase
|
|
5
|
+
def test_connection_available_through_jdbc_adapter
|
|
6
|
+
ActiveRecord::Base.connection.execute("show databases");
|
|
7
|
+
assert ActiveRecord::Base.connected?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_configure_connection_url
|
|
11
|
+
connection = Object.new
|
|
12
|
+
connection.extend ActiveRecord::ConnectionAdapters::JdbcConnection::ConfigHelper
|
|
13
|
+
connection.config = { :url => "jdbc://somehost", :options => { :hoge => "true", :fuya => "false"} }
|
|
14
|
+
assert_equal "jdbc://somehost?hoge=true&fuya=false", connection.configure_url
|
|
15
|
+
|
|
16
|
+
connection.config = { :url => "jdbc://somehost?param=0", :options => { :hoge => "true", :fuya => "false"} }
|
|
17
|
+
assert_equal "jdbc://somehost?param=0&hoge=true&fuya=false", connection.configure_url
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_connection_fails_without_driver_and_url
|
|
21
|
+
conn = ActiveRecord::Base.remove_connection
|
|
22
|
+
assert_raises(ActiveRecord::ConnectionNotEstablished) do
|
|
23
|
+
ActiveRecord::Base.establish_connection :adapter => 'jdbc'
|
|
24
|
+
ActiveRecord::Base.connection
|
|
25
|
+
end
|
|
26
|
+
ensure
|
|
27
|
+
ActiveRecord::Base.establish_connection conn
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/h2'
|
|
3
|
+
|
|
4
|
+
class H2ChangeColumnTest < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
class Person < ActiveRecord::Base; end
|
|
7
|
+
|
|
8
|
+
class CreatePeopleTable < ActiveRecord::Migration
|
|
9
|
+
def self.up
|
|
10
|
+
create_table :people do |t|
|
|
11
|
+
t.integer :phone
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.down
|
|
16
|
+
drop_table :people
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def setup
|
|
21
|
+
CreatePeopleTable.up
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def teardown
|
|
25
|
+
CreatePeopleTable.down
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_should_change_column_type
|
|
29
|
+
ActiveRecord::Migration.change_column :people, :phone, :string
|
|
30
|
+
Person.reset_column_information
|
|
31
|
+
|
|
32
|
+
p = Person.create!(:phone => 'ABC')
|
|
33
|
+
assert_equal 'ABC', p.phone
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_sets_defaults_on_column
|
|
37
|
+
ActiveRecord::Migration.change_column :people, :phone, :string, :default => '123456'
|
|
38
|
+
Person.reset_column_information
|
|
39
|
+
|
|
40
|
+
p = Person.create!
|
|
41
|
+
assert_equal '123456', p.phone
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_should_change_column_default_value
|
|
45
|
+
ActiveRecord::Migration.add_column :people, :email, :string, :default => 'foo@example.com'
|
|
46
|
+
ActiveRecord::Migration.change_column :people, :email, :string, :default => 'bar@example.com'
|
|
47
|
+
Person.reset_column_information
|
|
48
|
+
|
|
49
|
+
p = Person.create!
|
|
50
|
+
assert_equal 'bar@example.com', p.email
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_should_set_non_null_restriction
|
|
54
|
+
ActiveRecord::Migration.change_column :people, :phone, :string, :null => false
|
|
55
|
+
Person.reset_column_information
|
|
56
|
+
assert_raises(ActiveRecord::StatementInvalid) { Person.create! }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_should_set_null_restriction_with_default
|
|
60
|
+
p = Person.create!
|
|
61
|
+
ActiveRecord::Migration.change_column :people, :phone, :string, :null => true, :default => '123456'
|
|
62
|
+
Person.reset_column_information
|
|
63
|
+
|
|
64
|
+
assert_nil p.reload.phone
|
|
65
|
+
assert_equal '123456', Person.create!.phone
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/h2'
|
|
3
|
+
|
|
4
|
+
class H2SimpleTest < Test::Unit::TestCase
|
|
5
|
+
include SimpleTestMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class H2SchemaTest < Test::Unit::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@connection = ActiveRecord::Base.connection
|
|
11
|
+
@connection.execute("create schema s1");
|
|
12
|
+
@connection.execute("set schema s1");
|
|
13
|
+
CreateEntries.up
|
|
14
|
+
@connection.execute("create schema s2");
|
|
15
|
+
@connection.execute("set schema s2");
|
|
16
|
+
CreateUsers.up
|
|
17
|
+
@connection.execute("set schema public");
|
|
18
|
+
Entry.table_name = 's1.entries'
|
|
19
|
+
User.table_name = 's2.users'
|
|
20
|
+
user = User.create! :login => "something"
|
|
21
|
+
Entry.create! :title => "title", :content => "content", :rating => 123.45, :user => user
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def teardown
|
|
25
|
+
@connection.execute("set schema s1");
|
|
26
|
+
CreateEntries.down
|
|
27
|
+
@connection.execute("set schema s2");
|
|
28
|
+
CreateUsers.down
|
|
29
|
+
@connection.execute("drop schema s1");
|
|
30
|
+
@connection.execute("drop schema s2");
|
|
31
|
+
@connection.execute("set schema public");
|
|
32
|
+
Entry.reset_table_name
|
|
33
|
+
Entry.reset_column_information
|
|
34
|
+
User.reset_table_name
|
|
35
|
+
User.reset_column_information
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_find_in_other_schema
|
|
39
|
+
assert !Entry.all(:include => :user).empty?
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
class CreateRbac < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :role_assignments do |t|
|
|
4
|
+
t.column :role_id, :integer
|
|
5
|
+
t.column :user_id, :integer
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
create_table :roles do |t|
|
|
9
|
+
t.column :name, :string
|
|
10
|
+
t.column :description, :string
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
create_table :permission_groups do |t|
|
|
14
|
+
t.column :right_id, :integer
|
|
15
|
+
t.column :role_id, :integer
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
create_table :rights do |t|
|
|
19
|
+
t.column :name, :string
|
|
20
|
+
t.column :controller_name, :string
|
|
21
|
+
t.column :actions, :string
|
|
22
|
+
t.column :hours, :float, :null => false
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.down
|
|
27
|
+
drop_table :role_assignments
|
|
28
|
+
drop_table :roles
|
|
29
|
+
drop_table :permission_groups
|
|
30
|
+
drop_table :rights
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Right < ActiveRecord::Base
|
|
35
|
+
has_many :permission_groups, :dependent => :destroy
|
|
36
|
+
has_many :roles, :through => :permission_groups
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Role < ActiveRecord::Base
|
|
40
|
+
has_many :permission_groups, :dependent => :destroy
|
|
41
|
+
has_many :rights, :through => :permission_groups
|
|
42
|
+
has_many :role_assignments, :dependent => :destroy
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class PermissionGroup < ActiveRecord::Base
|
|
46
|
+
belongs_to :right
|
|
47
|
+
belongs_to :role
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class RoleAssignment < ActiveRecord::Base
|
|
51
|
+
belongs_to :user
|
|
52
|
+
belongs_to :role
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
module HasManyThroughMethods
|
|
56
|
+
def setup
|
|
57
|
+
CreateRbac.up
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def teardown
|
|
61
|
+
CreateRbac.down
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_has_many_through
|
|
65
|
+
admin_role = Role.create( {:name => "Administrator", :description => "System defined super user - access to right and role management."} )
|
|
66
|
+
admin_role.save
|
|
67
|
+
|
|
68
|
+
assert_equal(0, admin_role.rights.sum(:hours))
|
|
69
|
+
|
|
70
|
+
role_rights = Right.create( {:name => "Administrator - Full Access To Roles", :actions => "*", :controller_name => "Admin::RolesController", :hours => 0} )
|
|
71
|
+
right_rights = Right.create( {:name => "Administrator - Full Access To Rights", :actions => "*", :controller_name => "Admin::RightsController", :hours => 1.5} )
|
|
72
|
+
|
|
73
|
+
admin_role.rights << role_rights
|
|
74
|
+
admin_role.rights << right_rights
|
|
75
|
+
admin_role.save
|
|
76
|
+
|
|
77
|
+
assert_equal(1.5, admin_role.rights.sum(:hours))
|
|
78
|
+
end
|
|
79
|
+
end
|
data/test/helper.rb
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module Kernel
|
|
2
|
+
def find_executable?(name)
|
|
3
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).detect {|p| File.executable?(File.join(p, name))}
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def pg_cmdline_params
|
|
7
|
+
params = ""
|
|
8
|
+
params += "-h #{ENV['PGHOST']} " if ENV['PGHOST']
|
|
9
|
+
params += "-p #{ENV['PGPORT']} " if ENV['PGPORT']
|
|
10
|
+
params
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def have_postgres?
|
|
14
|
+
if find_executable?("psql")
|
|
15
|
+
if `psql -c '\\l' -U postgres #{pg_cmdline_params}2>&1` && $?.exitstatus == 0
|
|
16
|
+
true
|
|
17
|
+
else
|
|
18
|
+
warn "No \"postgres\" role? You might need to execute `createuser postgres -drs' first."
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# assert_queries and SQLCounter taken from rails active_record tests
|
|
26
|
+
require 'test/unit'
|
|
27
|
+
class Test::Unit::TestCase
|
|
28
|
+
def assert_queries(num = 1, matching = nil)
|
|
29
|
+
if !ActiveRecord::SQLCounter.enabled?
|
|
30
|
+
warn "SQLCounter assert_queries skipped"
|
|
31
|
+
return
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
ActiveRecord::SQLCounter.log = []
|
|
35
|
+
yield
|
|
36
|
+
ensure
|
|
37
|
+
queries = nil
|
|
38
|
+
ActiveRecord::SQLCounter.log.tap {|log| queries = (matching ? log.select {|s| s =~ matching } : log) }
|
|
39
|
+
assert_equal num, queries.size, "#{queries.size} instead of #{num} queries were executed.#{queries.size == 0 ? '' : "\nQueries:\n#{queries.join("\n")}"}"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
module ActiveRecord
|
|
44
|
+
class SQLCounter
|
|
45
|
+
@@enabled = true
|
|
46
|
+
def self.enabled?
|
|
47
|
+
@@enabled
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.ignored_sql
|
|
51
|
+
@@ignored_sql
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.ignored_sql=(value)
|
|
55
|
+
@@ignored_sql = value
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
self.ignored_sql = [
|
|
59
|
+
/^PRAGMA (?!(table_info))/,
|
|
60
|
+
/^SELECT currval/,
|
|
61
|
+
/^SELECT CAST/,
|
|
62
|
+
/^SELECT @@IDENTITY/,
|
|
63
|
+
/^SELECT @@ROWCOUNT/,
|
|
64
|
+
/^SAVEPOINT/,
|
|
65
|
+
/^ROLLBACK TO SAVEPOINT/,
|
|
66
|
+
/^RELEASE SAVEPOINT/,
|
|
67
|
+
/^SHOW max_identifier_length/,
|
|
68
|
+
/^BEGIN/,
|
|
69
|
+
/^COMMIT/
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
# FIXME: this needs to be refactored so specific database can add their own
|
|
73
|
+
# ignored SQL. This ignored SQL is for Oracle.
|
|
74
|
+
ignored_sql.concat [/^select .*nextval/i,
|
|
75
|
+
/^SAVEPOINT/,
|
|
76
|
+
/^ROLLBACK TO/,
|
|
77
|
+
/^\s*select .* from all_triggers/im
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
def self.log=(v)
|
|
81
|
+
@@log = v
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def self.log
|
|
85
|
+
@@log
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
self.log = []
|
|
89
|
+
|
|
90
|
+
def call(name, start, finish, message_id, values)
|
|
91
|
+
sql = values[:sql]
|
|
92
|
+
|
|
93
|
+
# FIXME: this seems bad. we should probably have a better way to indicate
|
|
94
|
+
# the query was cached
|
|
95
|
+
unless 'CACHE' == values[:name]
|
|
96
|
+
self.class.log << sql unless self.class.ignored_sql.
|
|
97
|
+
any? { |r| sql =~ r }
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
begin
|
|
103
|
+
require 'active_support/notifications'
|
|
104
|
+
ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
|
|
105
|
+
rescue LoadError
|
|
106
|
+
@@enabled = false
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# To run this script, run the following:
|
|
4
|
+
#
|
|
5
|
+
# CREATE DATABASE weblog_development;
|
|
6
|
+
#
|
|
7
|
+
# TODO: Finish the explanation.
|
|
8
|
+
|
|
9
|
+
require 'jdbc_common'
|
|
10
|
+
require 'db/informix'
|
|
11
|
+
|
|
12
|
+
class InformixSimpleTest < Test::Unit::TestCase
|
|
13
|
+
include SimpleTestMethods
|
|
14
|
+
|
|
15
|
+
# Informix does not like "= NULL".
|
|
16
|
+
def test_equals_null
|
|
17
|
+
Entry.create!(:title => "Foo")
|
|
18
|
+
entry = Entry.find(:first, :conditions => ["content = NULL"])
|
|
19
|
+
assert_equal "Foo", entry.title
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Informix does not like "!= NULL" or "<> NULL".
|
|
23
|
+
def test_not_equals_null
|
|
24
|
+
Entry.create!(:title => "Foo", :content => "Bar")
|
|
25
|
+
entry = Entry.find_by_title("Foo", :conditions => ["content != NULL"])
|
|
26
|
+
assert_equal "Foo", entry.title
|
|
27
|
+
entry = Entry.find_by_title("Foo", :conditions => ["content <> NULL"])
|
|
28
|
+
assert_equal "Foo", entry.title
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class InformixMultibyteTest < Test::Unit::TestCase
|
|
33
|
+
include MultibyteTestMethods
|
|
34
|
+
|
|
35
|
+
# Overriding the included test since we can't create text fields via a
|
|
36
|
+
# simple insert in Informix.
|
|
37
|
+
def test_select_multibyte_string
|
|
38
|
+
Entry.create!(:title => 'テスト', :content => '本文')
|
|
39
|
+
entry = Entry.find(:first)
|
|
40
|
+
assert_equal "テスト", entry.title
|
|
41
|
+
assert_equal "本文", entry.content
|
|
42
|
+
assert_equal entry, Entry.find_by_title("テスト")
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class InformixHasManyThroughTest < Test::Unit::TestCase
|
|
47
|
+
include HasManyThroughMethods
|
|
48
|
+
end
|
data/test/jdbc_common.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Simple method to reduce the boilerplate
|
|
2
|
+
def jruby?
|
|
3
|
+
defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
require 'arjdbc' if jruby?
|
|
7
|
+
puts "Using activerecord version #{ActiveRecord::VERSION::STRING}"
|
|
8
|
+
require 'models/auto_id'
|
|
9
|
+
require 'models/entry'
|
|
10
|
+
require 'models/data_types'
|
|
11
|
+
require 'models/add_not_null_column_to_table'
|
|
12
|
+
require 'models/validates_uniqueness_of_string'
|
|
13
|
+
require 'models/string_id'
|
|
14
|
+
require 'models/thing'
|
|
15
|
+
require 'models/custom_pk_name'
|
|
16
|
+
require 'simple'
|
|
17
|
+
require 'has_many_through'
|
|
18
|
+
require 'helper'
|
|
19
|
+
require 'row_locking'
|
|
20
|
+
require 'test/unit'
|
|
21
|
+
|
|
22
|
+
# Comment/uncomment to enable logging to be loaded for any of the database adapters
|
|
23
|
+
if $DEBUG || ENV['DEBUG']
|
|
24
|
+
require 'db/logger'
|
|
25
|
+
require 'ruby-debug'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/jndi_config'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'mocha'
|
|
6
|
+
|
|
7
|
+
class JndiConnectionPoolCallbacksTest < Test::Unit::TestCase
|
|
8
|
+
def setup
|
|
9
|
+
@logger = stub_everything "logger"
|
|
10
|
+
@config = JNDI_CONFIG
|
|
11
|
+
@connection = ActiveRecord::ConnectionAdapters::JdbcConnection.new @config
|
|
12
|
+
Entry.connection_pool.disconnect!
|
|
13
|
+
assert !Entry.connection_pool.connected?
|
|
14
|
+
class << Entry.connection_pool; public :instance_variable_set; end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def teardown
|
|
18
|
+
Entry.connection_pool.disconnect!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_should_call_hooks_on_checkout_and_checkin
|
|
22
|
+
@adapter = ActiveRecord::ConnectionAdapters::JdbcAdapter.new @connection, @logger, @config
|
|
23
|
+
Entry.connection_pool.instance_variable_set "@connections", [@adapter]
|
|
24
|
+
assert !@connection.active?
|
|
25
|
+
|
|
26
|
+
Entry.connection_pool.checkout
|
|
27
|
+
assert @connection.active?
|
|
28
|
+
|
|
29
|
+
Entry.connection_pool.checkin @adapter
|
|
30
|
+
assert !@connection.active?
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
rescue LoadError
|
|
35
|
+
warn "mocha not found, disabling mocha-based tests"
|
|
36
|
+
end if ActiveRecord::Base.respond_to?(:connection_pool)
|