activerecord-jdbc-adapter 1.0.3-java → 50.1-java
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.
- checksums.yaml +7 -0
- data/.gitignore +33 -0
- data/.travis.yml +79 -0
- data/.yardopts +4 -0
- data/CONTRIBUTING.md +50 -0
- data/Gemfile +91 -0
- data/History.md +1191 -0
- data/LICENSE.txt +22 -17
- data/README.md +169 -0
- data/RUNNING_TESTS.md +127 -0
- data/Rakefile +294 -5
- data/Rakefile.jdbc +20 -0
- data/activerecord-jdbc-adapter.gemspec +55 -0
- data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/db2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/firebird_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mariadb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +1 -0
- data/lib/activerecord-jdbc-adapter.rb +0 -5
- data/lib/arel/visitors/compat.rb +60 -0
- data/lib/arel/visitors/db2.rb +128 -6
- data/lib/arel/visitors/derby.rb +103 -10
- data/lib/arel/visitors/firebird.rb +79 -0
- data/lib/arel/visitors/h2.rb +25 -0
- data/lib/arel/visitors/hsqldb.rb +18 -10
- data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
- data/lib/arel/visitors/sql_server.rb +225 -0
- data/lib/arel/visitors/sql_server/ng42.rb +293 -0
- data/lib/arjdbc.rb +11 -21
- data/lib/arjdbc/abstract/connection_management.rb +35 -0
- data/lib/arjdbc/abstract/core.rb +64 -0
- data/lib/arjdbc/abstract/database_statements.rb +64 -0
- data/lib/arjdbc/abstract/statement_cache.rb +58 -0
- data/lib/arjdbc/abstract/transaction_support.rb +86 -0
- data/lib/arjdbc/db2.rb +3 -1
- data/lib/arjdbc/db2/adapter.rb +630 -250
- data/lib/arjdbc/db2/as400.rb +130 -0
- data/lib/arjdbc/db2/column.rb +167 -0
- data/lib/arjdbc/db2/connection_methods.rb +44 -0
- data/lib/arjdbc/derby.rb +1 -5
- data/lib/arjdbc/derby/active_record_patch.rb +13 -0
- data/lib/arjdbc/derby/adapter.rb +409 -217
- data/lib/arjdbc/derby/connection_methods.rb +16 -14
- data/lib/arjdbc/derby/schema_creation.rb +15 -0
- data/lib/arjdbc/discover.rb +62 -50
- data/lib/arjdbc/firebird.rb +3 -1
- data/lib/arjdbc/firebird/adapter.rb +365 -62
- data/lib/arjdbc/firebird/connection_methods.rb +23 -0
- data/lib/arjdbc/h2.rb +2 -3
- data/lib/arjdbc/h2/adapter.rb +273 -6
- data/lib/arjdbc/h2/connection_methods.rb +23 -8
- data/lib/arjdbc/hsqldb.rb +2 -3
- data/lib/arjdbc/hsqldb/adapter.rb +204 -77
- data/lib/arjdbc/hsqldb/connection_methods.rb +24 -10
- data/lib/arjdbc/hsqldb/explain_support.rb +35 -0
- data/lib/arjdbc/hsqldb/schema_creation.rb +11 -0
- data/lib/arjdbc/informix.rb +4 -2
- data/lib/arjdbc/informix/adapter.rb +78 -54
- data/lib/arjdbc/informix/connection_methods.rb +8 -9
- data/lib/arjdbc/jdbc.rb +59 -2
- data/lib/arjdbc/jdbc/adapter.rb +356 -166
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
- data/lib/arjdbc/jdbc/base_ext.rb +15 -0
- data/lib/arjdbc/jdbc/callbacks.rb +27 -18
- data/lib/arjdbc/jdbc/column.rb +79 -20
- data/lib/arjdbc/jdbc/connection.rb +5 -119
- data/lib/arjdbc/jdbc/connection_methods.rb +32 -4
- data/lib/arjdbc/jdbc/error.rb +65 -0
- data/lib/arjdbc/jdbc/extension.rb +41 -29
- data/lib/arjdbc/jdbc/java.rb +5 -6
- data/lib/arjdbc/jdbc/jdbc.rake +3 -126
- data/lib/arjdbc/jdbc/railtie.rb +2 -9
- data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
- data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -0
- data/lib/arjdbc/jdbc/type_cast.rb +166 -0
- data/lib/arjdbc/jdbc/type_converter.rb +35 -19
- data/lib/arjdbc/mssql.rb +6 -3
- data/lib/arjdbc/mssql/adapter.rb +630 -298
- data/lib/arjdbc/mssql/column.rb +200 -0
- data/lib/arjdbc/mssql/connection_methods.rb +66 -17
- data/lib/arjdbc/mssql/explain_support.rb +99 -0
- data/lib/arjdbc/mssql/limit_helpers.rb +189 -50
- data/lib/arjdbc/mssql/lock_methods.rb +77 -0
- data/lib/arjdbc/mssql/types.rb +343 -0
- data/lib/arjdbc/mssql/utils.rb +82 -0
- data/lib/arjdbc/mysql.rb +2 -3
- data/lib/arjdbc/mysql/adapter.rb +86 -356
- data/lib/arjdbc/mysql/connection_methods.rb +159 -23
- data/lib/arjdbc/oracle/adapter.rb +714 -263
- data/lib/arjdbc/postgresql.rb +2 -3
- data/lib/arjdbc/postgresql/_bc_time_cast_patch.rb +24 -0
- data/lib/arjdbc/postgresql/adapter.rb +570 -400
- data/lib/arjdbc/postgresql/base/array_decoder.rb +26 -0
- data/lib/arjdbc/postgresql/base/array_encoder.rb +25 -0
- data/lib/arjdbc/postgresql/base/array_parser.rb +95 -0
- data/lib/arjdbc/postgresql/base/pgconn.rb +11 -0
- data/lib/arjdbc/postgresql/column.rb +51 -0
- data/lib/arjdbc/postgresql/connection_methods.rb +57 -18
- data/lib/arjdbc/postgresql/name.rb +24 -0
- data/lib/arjdbc/postgresql/oid_types.rb +192 -0
- data/lib/arjdbc/railtie.rb +11 -0
- data/lib/arjdbc/sqlite3.rb +2 -3
- data/lib/arjdbc/sqlite3/adapter.rb +518 -198
- data/lib/arjdbc/sqlite3/connection_methods.rb +49 -24
- data/lib/arjdbc/sybase.rb +2 -2
- data/lib/arjdbc/sybase/adapter.rb +7 -6
- data/lib/arjdbc/tasks.rb +13 -0
- data/lib/arjdbc/tasks/database_tasks.rb +52 -0
- data/lib/arjdbc/tasks/databases.rake +91 -0
- data/lib/arjdbc/tasks/databases3.rake +215 -0
- data/lib/arjdbc/tasks/databases4.rake +39 -0
- data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
- data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
- data/lib/arjdbc/tasks/h2_database_tasks.rb +31 -0
- data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
- data/lib/arjdbc/tasks/jdbc_database_tasks.rb +169 -0
- data/lib/arjdbc/tasks/mssql_database_tasks.rb +46 -0
- data/lib/arjdbc/util/quoted_cache.rb +60 -0
- data/lib/arjdbc/util/serialized_attributes.rb +98 -0
- data/lib/arjdbc/util/table_copier.rb +110 -0
- data/lib/arjdbc/version.rb +1 -6
- data/lib/generators/jdbc/USAGE +9 -0
- data/lib/generators/jdbc/jdbc_generator.rb +8 -0
- data/lib/jdbc_adapter.rb +1 -1
- data/lib/jdbc_adapter/rake_tasks.rb +3 -2
- data/lib/jdbc_adapter/version.rb +2 -1
- data/pom.xml +114 -0
- data/rails_generators/jdbc_generator.rb +1 -1
- data/rails_generators/templates/config/initializers/jdbc.rb +8 -5
- data/rails_generators/templates/lib/tasks/jdbc.rake +7 -4
- data/rakelib/01-tomcat.rake +51 -0
- data/rakelib/02-test.rake +132 -0
- data/rakelib/bundler_ext.rb +11 -0
- data/rakelib/compile.rake +67 -22
- data/rakelib/db.rake +61 -0
- data/rakelib/rails.rake +204 -29
- data/src/java/arjdbc/ArJdbcModule.java +286 -0
- data/src/java/arjdbc/db2/DB2Module.java +76 -0
- data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +126 -0
- data/src/java/arjdbc/derby/DerbyModule.java +99 -243
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +152 -0
- data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +174 -0
- data/src/java/arjdbc/{jdbc/JdbcConnectionFactory.java → h2/H2Module.java} +20 -6
- data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +27 -12
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +73 -0
- data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +7 -6
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +7 -29
- data/src/java/arjdbc/jdbc/Callable.java +44 -0
- data/src/java/arjdbc/jdbc/ConnectionFactory.java +132 -0
- data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +157 -0
- data/src/java/arjdbc/jdbc/DriverConnectionFactory.java +63 -0
- data/src/java/arjdbc/jdbc/DriverWrapper.java +119 -0
- data/src/java/arjdbc/jdbc/JdbcResult.java +130 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +3622 -948
- data/src/java/arjdbc/mssql/MSSQLModule.java +90 -0
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +181 -0
- data/src/java/arjdbc/mysql/MySQLModule.java +99 -81
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +294 -0
- data/src/java/arjdbc/oracle/OracleModule.java +80 -0
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +387 -17
- data/src/java/arjdbc/postgresql/ByteaUtils.java +157 -0
- data/src/java/arjdbc/postgresql/PgResultSetMetaDataWrapper.java +23 -0
- data/src/java/arjdbc/postgresql/PostgreSQLModule.java +77 -0
- data/src/java/arjdbc/postgresql/PostgreSQLResult.java +184 -0
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +952 -0
- data/src/java/arjdbc/sqlite3/SQLite3Module.java +73 -0
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +525 -0
- data/src/java/arjdbc/util/CallResultSet.java +826 -0
- data/src/java/arjdbc/util/DateTimeUtils.java +580 -0
- data/src/java/arjdbc/util/ObjectSupport.java +65 -0
- data/src/java/arjdbc/util/QuotingUtils.java +138 -0
- data/src/java/arjdbc/util/StringCache.java +63 -0
- data/src/java/arjdbc/util/StringHelper.java +159 -0
- metadata +245 -268
- data/History.txt +0 -369
- data/Manifest.txt +0 -180
- data/README.txt +0 -181
- data/lib/active_record/connection_adapters/oracle_adapter.rb +0 -1
- data/lib/arel/engines/sql/compilers/db2_compiler.rb +0 -9
- data/lib/arel/engines/sql/compilers/derby_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/h2_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +0 -15
- data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/mssql_compiler.rb +0 -46
- data/lib/arel/visitors/mssql.rb +0 -44
- data/lib/arjdbc/jdbc/compatibility.rb +0 -51
- data/lib/arjdbc/jdbc/core_ext.rb +0 -24
- data/lib/arjdbc/jdbc/discover.rb +0 -18
- data/lib/arjdbc/jdbc/driver.rb +0 -44
- data/lib/arjdbc/jdbc/missing_functionality_helper.rb +0 -87
- data/lib/arjdbc/jdbc/quoted_primary_key.rb +0 -28
- data/lib/arjdbc/jdbc/require_driver.rb +0 -16
- data/lib/arjdbc/mimer.rb +0 -2
- data/lib/arjdbc/mimer/adapter.rb +0 -142
- data/lib/arjdbc/mssql/tsql_helper.rb +0 -61
- data/lib/arjdbc/oracle.rb +0 -3
- data/lib/arjdbc/oracle/connection_methods.rb +0 -11
- data/lib/pg.rb +0 -4
- data/rakelib/package.rake +0 -92
- data/rakelib/test.rake +0 -81
- data/src/java/arjdbc/jdbc/SQLBlock.java +0 -48
- data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +0 -127
- data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +0 -57
- data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +0 -64
- data/test/abstract_db_create.rb +0 -117
- data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -31
- data/test/activerecord/connections/native_jdbc_mysql/connection.rb +0 -25
- data/test/db/db2.rb +0 -11
- data/test/db/derby.rb +0 -12
- data/test/db/h2.rb +0 -11
- data/test/db/hsqldb.rb +0 -13
- data/test/db/informix.rb +0 -11
- data/test/db/jdbc.rb +0 -11
- data/test/db/jndi_config.rb +0 -40
- data/test/db/logger.rb +0 -3
- data/test/db/mssql.rb +0 -9
- data/test/db/mysql.rb +0 -10
- data/test/db/oracle.rb +0 -34
- data/test/db/postgres.rb +0 -9
- data/test/db/sqlite3.rb +0 -11
- data/test/db2_simple_test.rb +0 -66
- data/test/derby_migration_test.rb +0 -68
- data/test/derby_multibyte_test.rb +0 -12
- data/test/derby_simple_test.rb +0 -99
- data/test/generic_jdbc_connection_test.rb +0 -29
- data/test/h2_simple_test.rb +0 -41
- data/test/has_many_through.rb +0 -79
- data/test/helper.rb +0 -5
- data/test/hsqldb_simple_test.rb +0 -6
- data/test/informix_simple_test.rb +0 -48
- data/test/jdbc_common.rb +0 -25
- data/test/jndi_callbacks_test.rb +0 -40
- data/test/jndi_test.rb +0 -25
- data/test/manualTestDatabase.rb +0 -191
- data/test/models/add_not_null_column_to_table.rb +0 -12
- data/test/models/auto_id.rb +0 -18
- data/test/models/data_types.rb +0 -28
- data/test/models/entry.rb +0 -43
- data/test/models/mixed_case.rb +0 -25
- data/test/models/reserved_word.rb +0 -18
- data/test/models/string_id.rb +0 -18
- data/test/models/validates_uniqueness_of_string.rb +0 -19
- data/test/mssql_db_create_test.rb +0 -26
- data/test/mssql_identity_insert_test.rb +0 -19
- data/test/mssql_legacy_types_test.rb +0 -58
- data/test/mssql_limit_offset_test.rb +0 -136
- data/test/mssql_multibyte_test.rb +0 -18
- data/test/mssql_simple_test.rb +0 -55
- data/test/mysql_db_create_test.rb +0 -27
- data/test/mysql_info_test.rb +0 -113
- data/test/mysql_multibyte_test.rb +0 -10
- data/test/mysql_nonstandard_primary_key_test.rb +0 -42
- data/test/mysql_simple_test.rb +0 -49
- data/test/oracle_simple_test.rb +0 -18
- data/test/oracle_specific_test.rb +0 -83
- data/test/pick_rails_version.rb +0 -3
- data/test/postgres_db_create_test.rb +0 -32
- data/test/postgres_drop_db_test.rb +0 -16
- data/test/postgres_mixed_case_test.rb +0 -29
- data/test/postgres_nonseq_pkey_test.rb +0 -38
- data/test/postgres_reserved_test.rb +0 -22
- data/test/postgres_schema_search_path_test.rb +0 -44
- data/test/postgres_simple_test.rb +0 -51
- data/test/postgres_table_alias_length_test.rb +0 -15
- data/test/simple.rb +0 -546
- data/test/sqlite3_simple_test.rb +0 -233
- data/test/sybase_jtds_simple_test.rb +0 -28
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
module ArJdbc
|
|
2
|
-
module MissingFunctionalityHelper
|
|
3
|
-
#Taken from SQLite adapter
|
|
4
|
-
|
|
5
|
-
def alter_table(table_name, options = {}) #:nodoc:
|
|
6
|
-
table_name = table_name.to_s.downcase
|
|
7
|
-
altered_table_name = "altered_#{table_name}"
|
|
8
|
-
caller = lambda {|definition| yield definition if block_given?}
|
|
9
|
-
|
|
10
|
-
transaction do
|
|
11
|
-
# A temporary table might improve performance here, but
|
|
12
|
-
# it doesn't seem to maintain indices across the whole move.
|
|
13
|
-
move_table(table_name, altered_table_name,
|
|
14
|
-
options)
|
|
15
|
-
move_table(altered_table_name, table_name, &caller)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def move_table(from, to, options = {}, &block) #:nodoc:
|
|
20
|
-
copy_table(from, to, options, &block)
|
|
21
|
-
drop_table(from)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def copy_table(from, to, options = {}) #:nodoc:
|
|
25
|
-
options = options.merge(:id => (!columns(from).detect{|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s))
|
|
26
|
-
create_table(to, options) do |definition|
|
|
27
|
-
@definition = definition
|
|
28
|
-
columns(from).each do |column|
|
|
29
|
-
column_name = options[:rename] ?
|
|
30
|
-
(options[:rename][column.name] ||
|
|
31
|
-
options[:rename][column.name.to_sym] ||
|
|
32
|
-
column.name) : column.name
|
|
33
|
-
|
|
34
|
-
@definition.column(column_name, column.type,
|
|
35
|
-
:limit => column.limit, :default => column.default,
|
|
36
|
-
:null => column.null)
|
|
37
|
-
end
|
|
38
|
-
@definition.primary_key(primary_key(from)) if primary_key(from)
|
|
39
|
-
yield @definition if block_given?
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
copy_table_indexes(from, to, options[:rename] || {})
|
|
43
|
-
copy_table_contents(from, to,
|
|
44
|
-
@definition.columns.map {|column| column.name},
|
|
45
|
-
options[:rename] || {})
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def copy_table_indexes(from, to, rename = {}) #:nodoc:
|
|
49
|
-
indexes(from).each do |index|
|
|
50
|
-
name = index.name.downcase
|
|
51
|
-
if to == "altered_#{from}"
|
|
52
|
-
name = "temp_#{name}"
|
|
53
|
-
elsif from == "altered_#{to}"
|
|
54
|
-
name = name[5..-1]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
to_column_names = columns(to).map(&:name)
|
|
58
|
-
columns = index.columns.map {|c| rename[c] || c }.select do |column|
|
|
59
|
-
to_column_names.include?(column)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
unless columns.empty?
|
|
63
|
-
# index name can't be the same
|
|
64
|
-
opts = { :name => name.gsub(/(_?)(#{from})_/, "\\1#{to}_") }
|
|
65
|
-
opts[:unique] = true if index.unique
|
|
66
|
-
add_index(to, columns, opts)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def copy_table_contents(from, to, columns, rename = {}) #:nodoc:
|
|
72
|
-
column_mappings = Hash[*columns.map {|name| [name, name]}.flatten]
|
|
73
|
-
rename.inject(column_mappings) {|map, a| map[a.last] = a.first; map}
|
|
74
|
-
from_columns = columns(from).collect {|col| col.name}
|
|
75
|
-
columns = columns.find_all{|col| from_columns.include?(column_mappings[col])}
|
|
76
|
-
quoted_columns = columns.map { |col| quote_column_name(col) } * ','
|
|
77
|
-
|
|
78
|
-
quoted_to = quote_table_name(to)
|
|
79
|
-
execute("SELECT * FROM #{quote_table_name(from)}").each do |row|
|
|
80
|
-
sql = "INSERT INTO #{quoted_to} (#{quoted_columns}) VALUES ("
|
|
81
|
-
sql << columns.map {|col| quote row[column_mappings[col]]} * ', '
|
|
82
|
-
sql << ')'
|
|
83
|
-
execute sql
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module ArJdbc
|
|
2
|
-
module QuotedPrimaryKeyExtension
|
|
3
|
-
def self.extended(base)
|
|
4
|
-
# Rails 3 method Rails 2 method
|
|
5
|
-
meth = [:arel_attributes_values, :attributes_with_quotes].detect do |m|
|
|
6
|
-
base.private_instance_methods.include?(m.to_s)
|
|
7
|
-
end
|
|
8
|
-
pk_hash_key = "self.class.primary_key"
|
|
9
|
-
pk_hash_value = '"?"'
|
|
10
|
-
if meth == :arel_attributes_values
|
|
11
|
-
pk_hash_key = "self.class.arel_table[#{pk_hash_key}]"
|
|
12
|
-
pk_hash_value = "Arel::SqlLiteral.new(#{pk_hash_value})"
|
|
13
|
-
end
|
|
14
|
-
if meth
|
|
15
|
-
base.module_eval <<-PK, __FILE__, __LINE__
|
|
16
|
-
alias :#{meth}_pre_pk :#{meth}
|
|
17
|
-
def #{meth}(include_primary_key = true, *args) #:nodoc:
|
|
18
|
-
aq = #{meth}_pre_pk(include_primary_key, *args)
|
|
19
|
-
if connection.is_a?(ArJdbc::Oracle) || connection.is_a?(ArJdbc::Mimer)
|
|
20
|
-
aq[#{pk_hash_key}] = #{pk_hash_value} if include_primary_key && aq[#{pk_hash_key}].nil?
|
|
21
|
-
end
|
|
22
|
-
aq
|
|
23
|
-
end
|
|
24
|
-
PK
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Kernel
|
|
2
|
-
# load a JDBC driver library/gem, failing silently. If failed, trust
|
|
3
|
-
# that the driver jar is already present through some other means
|
|
4
|
-
def jdbc_require_driver(path, gem_name = nil)
|
|
5
|
-
gem_name ||= path.sub('/', '-')
|
|
6
|
-
2.times do
|
|
7
|
-
begin
|
|
8
|
-
require path
|
|
9
|
-
break
|
|
10
|
-
rescue LoadError
|
|
11
|
-
require 'rubygems'
|
|
12
|
-
begin; gem gem_name; rescue LoadError; end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
data/lib/arjdbc/mimer.rb
DELETED
data/lib/arjdbc/mimer/adapter.rb
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
module ArJdbc
|
|
2
|
-
module Mimer
|
|
3
|
-
def self.extended(mod)
|
|
4
|
-
require 'arjdbc/jdbc/quoted_primary_key'
|
|
5
|
-
ActiveRecord::Base.extend ArJdbc::QuotedPrimaryKeyExtension
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def modify_types(tp)
|
|
9
|
-
tp[:primary_key] = "INTEGER NOT NULL PRIMARY KEY"
|
|
10
|
-
tp[:boolean][:limit] = nil
|
|
11
|
-
tp[:string][:limit] = 255
|
|
12
|
-
tp[:binary] = {:name => "BINARY VARYING", :limit => 4096}
|
|
13
|
-
tp[:text] = {:name => "VARCHAR", :limit => 4096}
|
|
14
|
-
tp[:datetime] = { :name => "TIMESTAMP" }
|
|
15
|
-
tp[:timestamp] = { :name => "TIMESTAMP" }
|
|
16
|
-
tp[:time] = { :name => "TIMESTAMP" }
|
|
17
|
-
tp[:date] = { :name => "TIMESTAMP" }
|
|
18
|
-
tp
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def default_sequence_name(table, column) #:nodoc:
|
|
22
|
-
"#{table}_seq"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def create_table(name, options = {}) #:nodoc:
|
|
26
|
-
super(name, options)
|
|
27
|
-
execute "CREATE SEQUENCE #{name}_seq" unless options[:id] == false
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def drop_table(name, options = {}) #:nodoc:
|
|
31
|
-
super(name) rescue nil
|
|
32
|
-
execute "DROP SEQUENCE #{name}_seq" rescue nil
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def change_column(table_name, column_name, type, options = {}) #:nodoc:
|
|
36
|
-
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} #{type_to_sql(type, options[:limit])}"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def change_column_default(table_name, column_name, default) #:nodoc:
|
|
40
|
-
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} SET DEFAULT #{quote(default)}"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def remove_index(table_name, options = {}) #:nodoc:
|
|
44
|
-
execute "DROP INDEX #{index_name(table_name, options)}"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
|
|
48
|
-
if pk.nil? # Who called us? What does the sql look like? No idea!
|
|
49
|
-
execute sql, name
|
|
50
|
-
elsif id_value # Pre-assigned id
|
|
51
|
-
log(sql, name) { @connection.execute_insert sql,pk }
|
|
52
|
-
else # Assume the sql contains a bind-variable for the id
|
|
53
|
-
id_value = select_one("SELECT NEXT_VALUE OF #{sequence_name} AS val FROM MIMER.ONEROW")['val']
|
|
54
|
-
log(sql, name) {
|
|
55
|
-
execute_prepared_insert(sql,id_value)
|
|
56
|
-
}
|
|
57
|
-
end
|
|
58
|
-
id_value
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def execute_prepared_insert(sql, id)
|
|
62
|
-
@stmts ||= {}
|
|
63
|
-
@stmts[sql] ||= @connection.ps(sql)
|
|
64
|
-
stmt = @stmts[sql]
|
|
65
|
-
stmt.setLong(1,id)
|
|
66
|
-
stmt.executeUpdate
|
|
67
|
-
id
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def quote(value, column = nil) #:nodoc:
|
|
71
|
-
return value.quoted_id if value.respond_to?(:quoted_id)
|
|
72
|
-
|
|
73
|
-
if String === value && column && column.type == :binary
|
|
74
|
-
return "X'#{quote_string(value.unpack("C*").collect {|v| v.to_s(16)}.join)}'"
|
|
75
|
-
end
|
|
76
|
-
case value
|
|
77
|
-
when String
|
|
78
|
-
%Q{'#{quote_string(value)}'}
|
|
79
|
-
when NilClass
|
|
80
|
-
'NULL'
|
|
81
|
-
when TrueClass
|
|
82
|
-
'1'
|
|
83
|
-
when FalseClass
|
|
84
|
-
'0'
|
|
85
|
-
when Numeric
|
|
86
|
-
value.to_s
|
|
87
|
-
when Date, Time
|
|
88
|
-
%Q{TIMESTAMP '#{value.strftime("%Y-%m-%d %H:%M:%S")}'}
|
|
89
|
-
else
|
|
90
|
-
%Q{'#{quote_string(value.to_yaml)}'}
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def quoted_true
|
|
95
|
-
'1'
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def quoted_false
|
|
99
|
-
'0'
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def add_limit_offset!(sql, options) # :nodoc:
|
|
103
|
-
@limit = options[:limit]
|
|
104
|
-
@offset = options[:offset]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def select_all(sql, name = nil)
|
|
108
|
-
@offset ||= 0
|
|
109
|
-
if !@limit || @limit == -1
|
|
110
|
-
range = @offset..-1
|
|
111
|
-
else
|
|
112
|
-
range = @offset...(@offset+@limit)
|
|
113
|
-
end
|
|
114
|
-
select(sql, name)[range]
|
|
115
|
-
ensure
|
|
116
|
-
@limit = @offset = nil
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def select_one(sql, name = nil)
|
|
120
|
-
@offset ||= 0
|
|
121
|
-
select(sql, name)[@offset]
|
|
122
|
-
ensure
|
|
123
|
-
@limit = @offset = nil
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def _execute(sql, name = nil)
|
|
127
|
-
if sql =~ /^select/i
|
|
128
|
-
@offset ||= 0
|
|
129
|
-
if !@limit || @limit == -1
|
|
130
|
-
range = @offset..-1
|
|
131
|
-
else
|
|
132
|
-
range = @offset...(@offset+@limit)
|
|
133
|
-
end
|
|
134
|
-
@connection.execute_query(sql)[range]
|
|
135
|
-
else
|
|
136
|
-
@connection.execute_update(sql)
|
|
137
|
-
end
|
|
138
|
-
ensure
|
|
139
|
-
@limit = @offset = nil
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Common methods for handling TSQL databases.
|
|
2
|
-
module TSqlMethods
|
|
3
|
-
|
|
4
|
-
def modify_types(tp) #:nodoc:
|
|
5
|
-
tp[:primary_key] = "int NOT NULL IDENTITY(1, 1) PRIMARY KEY"
|
|
6
|
-
tp[:integer][:limit] = nil
|
|
7
|
-
tp[:boolean] = {:name => "bit"}
|
|
8
|
-
tp[:binary] = { :name => "image"}
|
|
9
|
-
tp
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def type_to_sql(type, limit = nil, precision = nil, scale = nil) #:nodoc:
|
|
13
|
-
limit = nil if %w(text binary).include? type.to_s
|
|
14
|
-
return 'uniqueidentifier' if (type.to_s == 'uniqueidentifier')
|
|
15
|
-
return super unless type.to_s == 'integer'
|
|
16
|
-
|
|
17
|
-
if limit.nil? || limit == 4
|
|
18
|
-
'int'
|
|
19
|
-
elsif limit == 2
|
|
20
|
-
'smallint'
|
|
21
|
-
elsif limit == 1
|
|
22
|
-
'tinyint'
|
|
23
|
-
else
|
|
24
|
-
'bigint'
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def add_limit_offset!(sql, options)
|
|
29
|
-
if options[:limit] and options[:offset]
|
|
30
|
-
total_rows = select_all("SELECT count(*) as TotalRows from (#{sql.gsub(/\bSELECT(\s+DISTINCT)?\b/i, "SELECT\\1 TOP 1000000000")}) tally")[0]["TotalRows"].to_i
|
|
31
|
-
if (options[:limit] + options[:offset]) >= total_rows
|
|
32
|
-
options[:limit] = (total_rows - options[:offset] >= 0) ? (total_rows - options[:offset]) : 0
|
|
33
|
-
end
|
|
34
|
-
sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i, "SELECT * FROM (SELECT TOP #{options[:limit]} * FROM (SELECT\\1 TOP #{options[:limit] + options[:offset]} ")
|
|
35
|
-
sql << ") AS tmp1"
|
|
36
|
-
if options[:order]
|
|
37
|
-
options[:order] = options[:order].split(',').map do |field|
|
|
38
|
-
parts = field.split(" ")
|
|
39
|
-
tc = parts[0]
|
|
40
|
-
if sql =~ /\.\[/ and tc =~ /\./ # if column quoting used in query
|
|
41
|
-
tc.gsub!(/\./, '\\.\\[')
|
|
42
|
-
tc << '\\]'
|
|
43
|
-
end
|
|
44
|
-
if sql =~ /#{tc} AS (t\d_r\d\d?)/
|
|
45
|
-
parts[0] = $1
|
|
46
|
-
elsif parts[0] =~ /\w+\.(\w+)/
|
|
47
|
-
parts[0] = $1
|
|
48
|
-
end
|
|
49
|
-
parts.join(' ')
|
|
50
|
-
end.join(', ')
|
|
51
|
-
sql << " ORDER BY #{change_order_direction(options[:order])}) AS tmp2 ORDER BY #{options[:order]}"
|
|
52
|
-
else
|
|
53
|
-
sql << " ) AS tmp2"
|
|
54
|
-
end
|
|
55
|
-
elsif sql !~ /^\s*SELECT (@@|COUNT\()/i
|
|
56
|
-
sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i) do
|
|
57
|
-
"SELECT#{$1} TOP #{options[:limit]}"
|
|
58
|
-
end unless options[:limit].nil?
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
data/lib/arjdbc/oracle.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
class ActiveRecord::Base
|
|
2
|
-
class << self
|
|
3
|
-
def oracle_connection(config)
|
|
4
|
-
config[:port] ||= 1521
|
|
5
|
-
config[:url] ||= "jdbc:oracle:thin:@#{config[:host]}:#{config[:port]}:#{config[:database]}"
|
|
6
|
-
config[:driver] ||= "oracle.jdbc.driver.OracleDriver"
|
|
7
|
-
jdbc_connection(config)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
data/lib/pg.rb
DELETED
data/rakelib/package.rake
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt",
|
|
2
|
-
"Rakefile", "LICENSE.txt", "lib/**/*.rb", "lib/arjdbc/jdbc/adapter_java.jar", "test/**/*.rb",
|
|
3
|
-
"lib/**/*.rake", "src/**/*.java", "rakelib/*.rake", "rails_generators/**/*"]
|
|
4
|
-
|
|
5
|
-
file "Manifest.txt" => :manifest
|
|
6
|
-
task :manifest do
|
|
7
|
-
File.open("Manifest.txt", "w") {|f| MANIFEST.each {|n| f << "#{n}\n"} }
|
|
8
|
-
end
|
|
9
|
-
Rake::Task['manifest'].invoke # Always regen manifest, so Hoe has up-to-date list of files
|
|
10
|
-
|
|
11
|
-
require File.dirname(__FILE__) + "/../lib/arjdbc/version"
|
|
12
|
-
begin
|
|
13
|
-
require 'hoe'
|
|
14
|
-
Hoe.plugin :gemcutter
|
|
15
|
-
hoe = Hoe.spec("activerecord-jdbc-adapter") do |p|
|
|
16
|
-
p.version = ArJdbc::Version::VERSION
|
|
17
|
-
p.spec_extras[:platform] = Gem::Platform.new("java")
|
|
18
|
-
p.spec_extras[:files] = MANIFEST
|
|
19
|
-
p.rubyforge_name = "jruby-extras"
|
|
20
|
-
p.url = "http://jruby-extras.rubyforge.org/activerecord-jdbc-adapter"
|
|
21
|
-
p.author = "Nick Sieger, Ola Bini and JRuby contributors"
|
|
22
|
-
p.email = "nick@nicksieger.com, ola.bini@gmail.com"
|
|
23
|
-
p.summary = "JDBC adapter for ActiveRecord, for use within JRuby on Rails."
|
|
24
|
-
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
|
25
|
-
p.description = p.paragraphs_of('README.txt', 0...1).join("\n\n")
|
|
26
|
-
end
|
|
27
|
-
hoe.spec.rdoc_options += ["-SHN", "-f", "darkfish"]
|
|
28
|
-
|
|
29
|
-
task :gemspec do
|
|
30
|
-
File.open("#{hoe.name}.gemspec", "w") {|f| f << hoe.spec.to_ruby }
|
|
31
|
-
end
|
|
32
|
-
task :package => :gemspec
|
|
33
|
-
rescue LoadError => le
|
|
34
|
-
puts le.to_s, *le.backtrace
|
|
35
|
-
puts "Problem loading Hoe; please check the error above to ensure that Hoe is installed correctly"
|
|
36
|
-
rescue => e
|
|
37
|
-
puts "ignoring error while loading Hoe: #{e.to_s}"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def rake(*args)
|
|
41
|
-
ruby "-S", "rake", *args
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
%w(test package install_gem release clean).each do |task|
|
|
45
|
-
desc "Run rake #{task} on all available adapters and drivers"
|
|
46
|
-
task "all:#{task}" => task
|
|
47
|
-
task "adapters:#{task}" => task
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
(Dir["drivers/*/Rakefile"] + Dir["adapters/*/Rakefile"]).each do |rakefile|
|
|
51
|
-
dir = File.dirname(rakefile)
|
|
52
|
-
prefix = dir.sub(%r{/}, ':')
|
|
53
|
-
tasks = %w(package install_gem debug_gem clean gemspec)
|
|
54
|
-
tasks << "test" if File.directory?(File.join(dir, "test"))
|
|
55
|
-
tasks.each do |task|
|
|
56
|
-
desc "Run rake #{task} on #{dir}"
|
|
57
|
-
task "#{prefix}:#{task}" do
|
|
58
|
-
Dir.chdir(dir) do
|
|
59
|
-
rake task
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
task "#{File.dirname(dir)}:#{task}" => "#{prefix}:#{task}"
|
|
64
|
-
task "all:#{task}" => "#{prefix}:#{task}"
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Copy all generated gems to the top-level pkg directory for convenience
|
|
68
|
-
task "#{prefix}:package" do
|
|
69
|
-
FileList["#{dir}/pkg/*.gem"].each {|gem| cp gem, "pkg"}
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
desc "Run rake release on #{dir}"
|
|
73
|
-
task "#{prefix}:release" do
|
|
74
|
-
Dir.chdir(dir) do
|
|
75
|
-
version = nil
|
|
76
|
-
if dir =~ /adapters/
|
|
77
|
-
version = ENV['VERSION']
|
|
78
|
-
else
|
|
79
|
-
Dir["lib/**/*.rb"].each do |file|
|
|
80
|
-
version ||= File.open(file) {|f| f.read =~ /VERSION = "([^"]+)"/ && $1}
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
rake "release", "VERSION=#{version}"
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
# Only release adapters synchronously with main release. Drivers are versioned
|
|
87
|
-
# according to their JDBC driver versions.
|
|
88
|
-
if dir =~ /adapters/
|
|
89
|
-
task "adapters:release" => "#{prefix}:release"
|
|
90
|
-
task "all:release" => "#{prefix}:release"
|
|
91
|
-
end
|
|
92
|
-
end
|