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,25 @@
|
|
|
1
|
+
print "Using native JDBC (MySQL)\n"
|
|
2
|
+
require_dependency 'fixtures/course'
|
|
3
|
+
require 'logger'
|
|
4
|
+
|
|
5
|
+
RAILS_CONNECTION_ADAPTERS << 'jdbc'
|
|
6
|
+
require "active_record/connection_adapters/jdbc_adapter"
|
|
7
|
+
|
|
8
|
+
ActiveRecord::Base.logger = Logger.new("debug.log")
|
|
9
|
+
|
|
10
|
+
db1 = 'activerecord_unittest'
|
|
11
|
+
db2 = 'activerecord_unittest2'
|
|
12
|
+
|
|
13
|
+
ActiveRecord::Base.establish_connection(
|
|
14
|
+
:adapter => "jdbc",
|
|
15
|
+
:driver => "com.mysql.jdbc.Driver",
|
|
16
|
+
:url => "jdbc:mysql://localhost:3306/#{db1}",
|
|
17
|
+
:username => "rails"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
Course.establish_connection(
|
|
21
|
+
:adapter => "jdbc",
|
|
22
|
+
:driver => "com.mysql.jdbc.Driver",
|
|
23
|
+
:url => "jdbc:mysql://localhost:3306/#{db2}",
|
|
24
|
+
:username => "rails"
|
|
25
|
+
)
|
data/test/db/db2.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
config = {
|
|
2
|
+
# DB2 uses $USER if running locally, just add
|
|
3
|
+
# yourself to your db2 groups in /etc/group
|
|
4
|
+
# :username => "blog",
|
|
5
|
+
# :password => "",
|
|
6
|
+
:adapter => "jdbc",
|
|
7
|
+
:driver => "com.ibm.db2.jcc.DB2Driver",
|
|
8
|
+
:url => "jdbc:db2:weblog_development"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
ActiveRecord::Base.establish_connection(config)
|
data/test/db/derby.rb
ADDED
data/test/db/h2.rb
ADDED
data/test/db/hsqldb.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
config = {
|
|
2
|
+
:adapter => 'hsqldb',
|
|
3
|
+
:database => 'test.db'
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
ActiveRecord::Base.establish_connection(config)
|
|
7
|
+
|
|
8
|
+
at_exit {
|
|
9
|
+
# Clean up hsqldb when done
|
|
10
|
+
require "fileutils"
|
|
11
|
+
Dir['test.db*'].each {|f| FileUtils.rm_rf(f)}
|
|
12
|
+
FileUtils.rm_rf('hsqldb-testdb.log') rescue nil #can't delete on windows
|
|
13
|
+
}
|
data/test/db/informix.rb
ADDED
data/test/db/jdbc.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'jdbc/mysql'
|
|
2
|
+
|
|
3
|
+
config = {
|
|
4
|
+
# see db/mysql.rb
|
|
5
|
+
:username => 'arjdbc',
|
|
6
|
+
:password => 'arjdbc',
|
|
7
|
+
:adapter => 'jdbc',
|
|
8
|
+
:driver => 'com.mysql.jdbc.Driver',
|
|
9
|
+
:url => 'jdbc:mysql://localhost:3306/arjdbc_test'
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
ActiveRecord::Base.establish_connection(config)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'arjdbc'
|
|
3
|
+
|
|
4
|
+
JNDI_CONFIG = {
|
|
5
|
+
:adapter => "jdbc",
|
|
6
|
+
:jndi => 'jdbc/derbydb'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# To test JNDI, grab fscontext-1_2-beta3.zip from
|
|
10
|
+
# http://java.sun.com/products/jndi/downloads/index.html
|
|
11
|
+
# and put fscontext.jar and providerutil.jar in test/
|
|
12
|
+
require 'test/fscontext.jar'
|
|
13
|
+
require 'test/providerutil.jar'
|
|
14
|
+
require 'jdbc/derby'
|
|
15
|
+
|
|
16
|
+
System = java.lang.System
|
|
17
|
+
Context = javax.naming.Context
|
|
18
|
+
InitialContext = javax.naming.InitialContext
|
|
19
|
+
Reference = javax.naming.Reference
|
|
20
|
+
StringRefAddr = javax.naming.StringRefAddr
|
|
21
|
+
|
|
22
|
+
System.set_property(Context::INITIAL_CONTEXT_FACTORY,
|
|
23
|
+
'com.sun.jndi.fscontext.RefFSContextFactory')
|
|
24
|
+
project_path = File.expand_path(File.dirname(__FILE__) + '/../..')
|
|
25
|
+
jndi_dir = project_path + '/jndi_test'
|
|
26
|
+
jdbc_dir = jndi_dir + '/jdbc'
|
|
27
|
+
FileUtils.mkdir_p jdbc_dir unless File.exist?(jdbc_dir)
|
|
28
|
+
|
|
29
|
+
System.set_property(Context::PROVIDER_URL, "file://#{jndi_dir}")
|
|
30
|
+
|
|
31
|
+
ic = InitialContext.new
|
|
32
|
+
ic.rebind(JNDI_CONFIG[:jndi],
|
|
33
|
+
org.apache.derby.jdbc.EmbeddedDataSource.new.tap {|ds|
|
|
34
|
+
ds.database_name = "derby-testdb-jndi"
|
|
35
|
+
ds.create_database = "create"
|
|
36
|
+
ds.user = "sa"
|
|
37
|
+
ds.password = ""})
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
ActiveRecord::Base.establish_connection(JNDI_CONFIG)
|
data/test/db/logger.rb
ADDED
data/test/db/mssql.rb
ADDED
data/test/db/mysql.rb
ADDED
data/test/db/oracle.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
config = {
|
|
2
|
+
:username => 'blog',
|
|
3
|
+
:password => 'blog',
|
|
4
|
+
:adapter => 'oracle',
|
|
5
|
+
:host => ENV["ORACLE_HOST"] || 'localhost',
|
|
6
|
+
:database => ENV["ORACLE_SID"] || 'XE' # XE is the default SID for oracle xe
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
ActiveRecord::Base.establish_connection(config)
|
|
10
|
+
|
|
11
|
+
# Here are some notes of things I had to do to get running on Oracle
|
|
12
|
+
# XE.
|
|
13
|
+
#
|
|
14
|
+
# ON Linux:
|
|
15
|
+
# create tablespace weblog_development
|
|
16
|
+
# datafile '/usr/lib/oracle/xe/oradata/XE/weblog_development.dbf';
|
|
17
|
+
# ON Windows XP:
|
|
18
|
+
# create tablespace weblog_development
|
|
19
|
+
# datafile 'C:\ORACLEXE\ORADATA\XE\WEBLOGD.DBF' size 16m;
|
|
20
|
+
#
|
|
21
|
+
# create user blog identified by blog
|
|
22
|
+
# default tablespace weblog_development;
|
|
23
|
+
# grant all privileges to blog;
|
|
24
|
+
#
|
|
25
|
+
# You might need to up the number of processes and restart the
|
|
26
|
+
# listener. (In my case, I had to reboot.) See
|
|
27
|
+
# http://it.newinstance.it/2007/06/01/ora-12519-tnsno-appropriate-service-handler-found/
|
|
28
|
+
#
|
|
29
|
+
# alter system set PROCESSES=150 scope=SPFILE;
|
|
30
|
+
#
|
|
31
|
+
# These might be helpful too (numbers are rather arbitrary...)
|
|
32
|
+
#
|
|
33
|
+
# alter system set TRANSACTIONS=126 scope=SPFILE;
|
|
34
|
+
# alter system set SESSIONS=115 scope=SPFILE;
|
data/test/db/postgres.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
POSTGRES_CONFIG = {
|
|
2
|
+
:adapter => 'postgresql',
|
|
3
|
+
:database => 'arjdbc_test',
|
|
4
|
+
:host => 'localhost',
|
|
5
|
+
:username => 'arjdbc',
|
|
6
|
+
:password => 'arjdbc'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
POSTGRES_CONFIG[:host] = ENV['PGHOST'] if ENV['PGHOST']
|
|
10
|
+
POSTGRES_CONFIG[:port] = ENV['PGPORT'] if ENV['PGPORT']
|
|
11
|
+
ActiveRecord::Base.establish_connection(POSTGRES_CONFIG)
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
result = ActiveRecord::Base.connection.execute("SHOW server_version_num")
|
|
15
|
+
PG_VERSION = result.first.first[1].to_i
|
|
16
|
+
rescue
|
|
17
|
+
PG_VERSION = 0
|
|
18
|
+
end
|
data/test/db/sqlite3.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/db2'
|
|
3
|
+
|
|
4
|
+
class DB2SimpleTest < Test::Unit::TestCase
|
|
5
|
+
include SimpleTestMethods
|
|
6
|
+
|
|
7
|
+
# For backwards compatibility with how the DB2 code in
|
|
8
|
+
# jdbc_adapter 0.9.x handled booleans.
|
|
9
|
+
#
|
|
10
|
+
# The old DB2 jdbc_db2.rb driver was broken enough that
|
|
11
|
+
# applications were exposed to the underlying type (was DECIMAL)
|
|
12
|
+
# and used 0 and 1 as false and true, respectively.
|
|
13
|
+
#
|
|
14
|
+
# This driver now uses SMALLINT as a boolean, and properly
|
|
15
|
+
# type cast's it to a Ruby boolean. Need to make sure we don't
|
|
16
|
+
# break existing apps!
|
|
17
|
+
def test_boolean_as_integer
|
|
18
|
+
e = DbType.find(:first)
|
|
19
|
+
|
|
20
|
+
# true
|
|
21
|
+
e.sample_boolean = 1
|
|
22
|
+
assert_equal true, e.sample_boolean
|
|
23
|
+
assert_equal true, e.sample_boolean?
|
|
24
|
+
e.save!
|
|
25
|
+
|
|
26
|
+
e = DbType.find(:first)
|
|
27
|
+
assert_equal true, e.sample_boolean
|
|
28
|
+
assert_equal true, e.sample_boolean?
|
|
29
|
+
|
|
30
|
+
# false
|
|
31
|
+
e.sample_boolean = 0
|
|
32
|
+
assert_equal false, e.sample_boolean
|
|
33
|
+
assert_equal false, e.sample_boolean?
|
|
34
|
+
e.save!
|
|
35
|
+
|
|
36
|
+
e = DbType.find(:first)
|
|
37
|
+
assert_equal false, e.sample_boolean
|
|
38
|
+
assert_equal false, e.sample_boolean?
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class DB2HasManyThroughTest < Test::Unit::TestCase
|
|
43
|
+
include HasManyThroughMethods
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class DB2Test < Test::Unit::TestCase
|
|
47
|
+
def setup
|
|
48
|
+
@inst = Object.new
|
|
49
|
+
@inst.extend ArJdbc::DB2
|
|
50
|
+
@column = Object.new
|
|
51
|
+
class << @column
|
|
52
|
+
attr_accessor :type
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_quote_decimal
|
|
57
|
+
assert_equal %q{'123.45'}, @inst.quote("123.45")
|
|
58
|
+
@column.type = :decimal
|
|
59
|
+
assert_equal %q{123.45}, @inst.quote("123.45", @column), "decimal columns should not have quotes"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_primary_key_generation
|
|
63
|
+
@column.type = :primary_key
|
|
64
|
+
assert_equal 'int not null generated by default as identity (start with 1) primary key', @inst.modify_types({:string => {}, :integer => {}, :boolean => {}})[:primary_key]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'jdbc_common'
|
|
2
|
+
require 'db/derby'
|
|
3
|
+
|
|
4
|
+
class CreateDummies < ActiveRecord::Migration
|
|
5
|
+
def self.up
|
|
6
|
+
create_table :dummies, :force => true do |t|
|
|
7
|
+
t.string :year, :default => "", :null => false
|
|
8
|
+
end
|
|
9
|
+
add_index :dummies, :year, :unique => true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class ChangeColumn < ActiveRecord::Migration
|
|
15
|
+
def self.up
|
|
16
|
+
create_table :people, :id => false, :force => true do |t|
|
|
17
|
+
t.string :id, :limit => 22, :null => false
|
|
18
|
+
t.string :name, :null => false
|
|
19
|
+
end
|
|
20
|
+
change_column(:people, :name, :string, {:limit=>22})
|
|
21
|
+
execute("SELECT id FROM people WHERE id = 'some string'")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.down
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class CreateIndex < ActiveRecord::Migration
|
|
30
|
+
def self.up
|
|
31
|
+
create_table :people, :id => false, :force => true do |t|
|
|
32
|
+
t.string :id, :limit => 22, :null => false
|
|
33
|
+
t.string :first_name, :null => false
|
|
34
|
+
t.string :last_name, :null => false
|
|
35
|
+
t.string :nickname, :null => false
|
|
36
|
+
t.string :long_name, :null => false
|
|
37
|
+
t.string :very_long_name, :null => false
|
|
38
|
+
t.string :extremely_long_name, :null => false
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
add_index(:people, [:first_name, :last_name, :nickname, :long_name, :very_long_name, :extremely_long_name], :unique => true)
|
|
42
|
+
|
|
43
|
+
remove_index(:people, [:first_name, :last_name, :nickname, :long_name, :very_long_name, :extremely_long_name])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.down
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class DerbyMigrationTest < Test::Unit::TestCase
|
|
52
|
+
include FixtureSetup
|
|
53
|
+
|
|
54
|
+
def test_create_table_column_quoting_vs_keywords
|
|
55
|
+
CreateDummies.up
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_migrate_change_column_for_non_standard_id
|
|
59
|
+
ChangeColumn.up
|
|
60
|
+
ChangeColumn.down
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_migrate_create_index
|
|
64
|
+
CreateIndex.up
|
|
65
|
+
CreateIndex.down
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# To run this script, run the following in a mysql instance:
|
|
2
|
+
#
|
|
3
|
+
# drop database if exists weblog_development;
|
|
4
|
+
# create database weblog_development;
|
|
5
|
+
# grant all on weblog_development.* to blog@localhost;
|
|
6
|
+
|
|
7
|
+
require 'jdbc_common'
|
|
8
|
+
require 'db/derby'
|
|
9
|
+
|
|
10
|
+
class DerbyMultibyteTest < Test::Unit::TestCase
|
|
11
|
+
include MultibyteTestMethods
|
|
12
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# To run this script, run the following in a mysql instance:
|
|
2
|
+
#
|
|
3
|
+
# drop database if exists weblog_development;
|
|
4
|
+
# create database weblog_development;
|
|
5
|
+
# grant all on weblog_development.* to blog@localhost;
|
|
6
|
+
|
|
7
|
+
require 'jdbc_common'
|
|
8
|
+
require 'db/derby'
|
|
9
|
+
|
|
10
|
+
class DerbySimpleTest < Test::Unit::TestCase
|
|
11
|
+
include SimpleTestMethods
|
|
12
|
+
|
|
13
|
+
# Check that a table-less VALUES(xxx) query (like SELECT works.
|
|
14
|
+
def test_values
|
|
15
|
+
value = nil
|
|
16
|
+
assert_nothing_raised do
|
|
17
|
+
value = ActiveRecord::Base.connection.send(:select_rows, "VALUES('ur', 'doin', 'it', 'right')")
|
|
18
|
+
end
|
|
19
|
+
assert_equal [['ur', 'doin', 'it', 'right']], value
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_find_with_include_and_order
|
|
23
|
+
users = User.find(:all, :include=>[:entries], :order=>"entries.rating DESC", :limit=>2)
|
|
24
|
+
|
|
25
|
+
assert users.include?(@user)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_text_and_string_conversions
|
|
29
|
+
e = DbType.find(:first)
|
|
30
|
+
|
|
31
|
+
# Derby will normally reject any non text value.
|
|
32
|
+
# The adapter has been patched to convert non text values to strings
|
|
33
|
+
['string', 45, 4.3, 18488425889503641645].each do |value|
|
|
34
|
+
assert_nothing_raised do
|
|
35
|
+
e.sample_string = value
|
|
36
|
+
e.sample_text = value
|
|
37
|
+
e.save!
|
|
38
|
+
e.reload
|
|
39
|
+
assert_equal [value.to_s]*2, [e.sample_string, e.sample_text]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
[true, false].each do |value|
|
|
43
|
+
assert_nothing_raised do
|
|
44
|
+
e.sample_string = value
|
|
45
|
+
e.sample_text = value
|
|
46
|
+
e.save!
|
|
47
|
+
e.reload
|
|
48
|
+
assert_equal [value ? "1" : "0"]*2, [e.sample_string, e.sample_text]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
assert_nothing_raised do
|
|
52
|
+
value = Time.now
|
|
53
|
+
if ActiveRecord::VERSION::MAJOR >= 3
|
|
54
|
+
str = value.utc.to_s(:db)
|
|
55
|
+
else # AR 2 #quoted_date did not do TZ conversions
|
|
56
|
+
str = value.to_s(:db)
|
|
57
|
+
end
|
|
58
|
+
e.sample_string = value
|
|
59
|
+
e.sample_text = value
|
|
60
|
+
e.save!
|
|
61
|
+
e.reload
|
|
62
|
+
assert_equal [str]*2, [e.sample_string, e.sample_text]
|
|
63
|
+
end
|
|
64
|
+
assert_nothing_raised do
|
|
65
|
+
value = Date.today
|
|
66
|
+
e.sample_string = value
|
|
67
|
+
e.sample_text = value
|
|
68
|
+
e.save!
|
|
69
|
+
e.reload
|
|
70
|
+
assert_equal [value.to_s(:db)]*2, [e.sample_string, e.sample_text]
|
|
71
|
+
end
|
|
72
|
+
value = {'a' => 7}
|
|
73
|
+
assert_nothing_raised do
|
|
74
|
+
e.sample_string = value
|
|
75
|
+
e.sample_text = value
|
|
76
|
+
e.save!
|
|
77
|
+
e.reload
|
|
78
|
+
assert_equal [value.to_yaml]*2, [e.sample_string, e.sample_text]
|
|
79
|
+
end
|
|
80
|
+
value = BigDecimal.new("0")
|
|
81
|
+
assert_nothing_raised do
|
|
82
|
+
e.sample_string = value
|
|
83
|
+
e.sample_text = value
|
|
84
|
+
e.save!
|
|
85
|
+
e.reload
|
|
86
|
+
assert_equal ['0.0']*2, [e.sample_string, e.sample_text]
|
|
87
|
+
end
|
|
88
|
+
# An empty string is treated as a null value in Oracle: http://www.techonthenet.com/oracle/questions/empty_null.php
|
|
89
|
+
unless ActiveRecord::Base.connection.adapter_name =~ /oracle/i
|
|
90
|
+
assert_nothing_raised do
|
|
91
|
+
e.sample_string = nil
|
|
92
|
+
e.sample_text = nil
|
|
93
|
+
e.save!
|
|
94
|
+
e.reload
|
|
95
|
+
assert_equal [nil]*2, [e.sample_string, e.sample_text]
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_data_types
|
|
101
|
+
# From test/models/data_types.rb, with the modifications as noted in the comments.
|
|
102
|
+
expected_types = [
|
|
103
|
+
["id", :integer, { }],
|
|
104
|
+
["sample_timestamp", :datetime, { }], # :timestamp is just an alias for :datetime in Derby
|
|
105
|
+
["sample_datetime", :datetime, { }],
|
|
106
|
+
["sample_date", :date, { }],
|
|
107
|
+
["sample_time", :time, { }],
|
|
108
|
+
["sample_decimal", :integer, { :precision => 15, :scale => 0 }], # it's an :integer because the :scale is 0 (...right?)
|
|
109
|
+
["sample_small_decimal", :decimal, { :precision => 3, :scale => 2 }],
|
|
110
|
+
["sample_default_decimal", :integer, { }], # decimal and integer are the same type in Derby
|
|
111
|
+
["sample_float", :float, { }],
|
|
112
|
+
["sample_binary", :binary, { }],
|
|
113
|
+
["sample_boolean", :boolean, { }],
|
|
114
|
+
["sample_string", :string, { :default => '' }],
|
|
115
|
+
["sample_integer", :integer, { }], # don't care about the limit
|
|
116
|
+
["sample_integer_with_limit_2", :integer, { }], # don't care about the limit
|
|
117
|
+
["sample_integer_with_limit_8", :integer, { }], # don't care about the limit
|
|
118
|
+
["sample_integer_no_limit", :integer, { }],
|
|
119
|
+
["sample_integer_neg_default", :integer, { :default => -1 }],
|
|
120
|
+
["sample_text", :text, { }],
|
|
121
|
+
].sort{|a,b| a[0] <=> b[0]}
|
|
122
|
+
|
|
123
|
+
column_names = (expected_types.map{|et| et[0]} + DbType.column_names).sort.uniq
|
|
124
|
+
result = []
|
|
125
|
+
column_names.each do |column_name|
|
|
126
|
+
et = expected_types.detect{|t| t[0] == column_name }
|
|
127
|
+
col = DbType.columns_hash[column_name]
|
|
128
|
+
if col
|
|
129
|
+
attrs = et && Hash[et[2].keys.map{|k| [k, col.send(k)]}]
|
|
130
|
+
result << [col.name, col.type, attrs]
|
|
131
|
+
else
|
|
132
|
+
result << [column_name, nil, nil]
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
result.sort!{|a,b| a[0] <=> b[0]}
|
|
136
|
+
|
|
137
|
+
assert_equal expected_types, result
|
|
138
|
+
end
|
|
139
|
+
end
|