activerecord-jdbc-adapter 1.3.0.beta1 → 1.3.0.beta2
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 +12 -11
- data/.travis.yml +36 -7
- data/Appraisals +3 -3
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -6
- data/History.txt +64 -0
- data/README.md +8 -1
- data/Rakefile +3 -1
- data/gemfiles/rails23.gemfile +1 -1
- data/gemfiles/rails23.gemfile.lock +6 -5
- data/gemfiles/rails30.gemfile +1 -1
- data/gemfiles/rails30.gemfile.lock +7 -6
- data/gemfiles/rails31.gemfile +1 -1
- data/gemfiles/rails31.gemfile.lock +6 -5
- data/gemfiles/rails32.gemfile +1 -1
- data/gemfiles/rails32.gemfile.lock +6 -5
- data/gemfiles/rails40.gemfile +2 -4
- data/gemfiles/rails40.gemfile.lock +37 -51
- data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/db2_adapter.rb +1 -1
- data/lib/arel/visitors/db2.rb +5 -1
- data/lib/arel/visitors/hsqldb.rb +1 -0
- data/lib/arel/visitors/sql_server.rb +55 -13
- data/lib/arjdbc/db2/adapter.rb +197 -227
- data/lib/arjdbc/db2/as400.rb +124 -0
- data/lib/arjdbc/db2/connection_methods.rb +20 -1
- data/lib/arjdbc/derby/adapter.rb +17 -85
- data/lib/arjdbc/derby/connection_methods.rb +2 -1
- data/lib/arjdbc/discover.rb +55 -47
- data/lib/arjdbc/h2/adapter.rb +52 -18
- data/lib/arjdbc/h2/connection_methods.rb +10 -2
- data/lib/arjdbc/hsqldb/adapter.rb +33 -9
- data/lib/arjdbc/hsqldb/connection_methods.rb +10 -2
- data/lib/arjdbc/informix.rb +2 -1
- data/lib/arjdbc/jdbc.rb +5 -1
- data/lib/arjdbc/jdbc/adapter.rb +167 -89
- 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 +25 -3
- data/lib/arjdbc/jdbc/callbacks.rb +9 -8
- data/lib/arjdbc/jdbc/column.rb +8 -20
- data/lib/arjdbc/jdbc/connection.rb +69 -80
- data/lib/arjdbc/jdbc/extension.rb +6 -8
- data/lib/arjdbc/jdbc/jdbc.rake +3 -141
- data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
- data/lib/arjdbc/mssql/adapter.rb +108 -34
- data/lib/arjdbc/mssql/connection_methods.rb +3 -1
- data/lib/arjdbc/mssql/limit_helpers.rb +3 -2
- data/lib/arjdbc/mssql/lock_helpers.rb +5 -1
- data/lib/arjdbc/mysql/adapter.rb +127 -70
- data/lib/arjdbc/mysql/connection_methods.rb +5 -2
- data/lib/arjdbc/oracle/adapter.rb +124 -94
- data/lib/arjdbc/oracle/connection_methods.rb +2 -1
- data/lib/arjdbc/postgresql/adapter.rb +99 -67
- data/lib/arjdbc/postgresql/column_cast.rb +3 -5
- data/lib/arjdbc/postgresql/connection_methods.rb +6 -6
- data/lib/arjdbc/railtie.rb +3 -1
- data/lib/arjdbc/sqlite3/adapter.rb +60 -43
- data/lib/arjdbc/sqlite3/connection_methods.rb +9 -9
- data/lib/arjdbc/sybase.rb +1 -1
- data/lib/arjdbc/tasks.rb +13 -0
- data/lib/arjdbc/tasks/database_tasks.rb +50 -0
- data/lib/arjdbc/tasks/databases.rake +89 -0
- data/lib/arjdbc/tasks/databases3.rake +203 -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 +29 -0
- data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
- data/lib/arjdbc/tasks/jdbc_database_tasks.rb +122 -0
- data/lib/arjdbc/tasks/mssql_database_tasks.rb +36 -0
- data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +297 -0
- data/lib/arjdbc/tasks/oracle_database_tasks.rb +62 -0
- data/lib/arjdbc/version.rb +1 -1
- data/pom.xml +11 -12
- 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/02-test.rake +42 -15
- data/rakelib/compile.rake +29 -2
- data/rakelib/db.rake +2 -1
- data/rakelib/rails.rake +23 -6
- data/src/java/arjdbc/ArJdbcModule.java +175 -0
- data/src/java/arjdbc/db2/DB2Module.java +2 -1
- data/src/java/arjdbc/derby/DerbyModule.java +5 -24
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +3 -2
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -46
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1001 -259
- data/src/java/arjdbc/mssql/MSSQLModule.java +2 -1
- data/src/java/arjdbc/mysql/MySQLModule.java +4 -3
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +12 -7
- data/src/java/arjdbc/oracle/OracleModule.java +2 -1
- data/src/java/arjdbc/sqlite3/SQLite3Module.java +2 -1
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +12 -0
- data/test/db/db2.rb +14 -7
- data/test/db/db2/rake_test.rb +82 -0
- data/test/db/db2/rake_test_data.sql +35 -0
- data/test/db/db2/simple_test.rb +20 -0
- data/test/db/db2/unit_test.rb +3 -1
- data/test/db/derby.rb +7 -5
- data/test/db/derby/rake_test.rb +96 -0
- data/test/db/derby/simple_test.rb +10 -2
- data/test/db/h2.rb +6 -8
- data/test/db/h2/identity_column_test.rb +35 -0
- data/test/db/h2/offset_test.rb +49 -0
- data/test/db/h2/rake_test.rb +98 -0
- data/test/db/h2/schema_dump_test.rb +5 -1
- data/test/db/hsqldb.rb +6 -10
- data/test/db/hsqldb/rake_test.rb +101 -0
- data/test/db/hsqldb/schema_dump_test.rb +5 -1
- data/test/db/hsqldb/simple_test.rb +8 -0
- data/test/db/jndi_config.rb +1 -3
- data/test/db/jndi_pooled_config.rb +1 -3
- data/test/db/mssql/limit_offset_test.rb +23 -14
- data/test/db/mssql/rake_test.rb +143 -0
- data/test/db/mysql/_rails_test_mysql.32.out +1069 -1252
- data/test/db/mysql/nonstandard_primary_key_test.rb +21 -24
- data/test/db/mysql/rake_test.rb +97 -0
- data/test/db/mysql/schema_dump_test.rb +11 -11
- data/test/db/mysql/simple_test.rb +52 -3
- data/test/db/mysql/statement_escaping_test.rb +46 -0
- data/test/db/oracle/rake_test.rb +100 -0
- data/test/db/oracle/simple_test.rb +48 -0
- data/test/db/postgres/_rails_test_postgres.32.out +998 -1370
- data/test/db/postgres/active_schema_unit_test.rb +68 -0
- data/test/db/postgres/connection_test.rb +10 -2
- data/test/db/postgres/data_types_test.rb +2 -2
- data/test/db/postgres/ltree_test.rb +6 -5
- data/test/db/postgres/native_types_test.rb +1 -5
- data/test/db/postgres/rake_test.rb +117 -0
- data/test/db/postgres/schema_dump_test.rb +9 -2
- data/test/db/postgres/schema_test.rb +4 -2
- data/test/db/postgres/simple_test.rb +57 -16
- data/test/db/sqlite3.rb +3 -10
- data/test/db/sqlite3/_rails_test_sqlite3.32.out +1070 -1298
- data/test/db/sqlite3/rake_test.rb +71 -0
- data/test/db/sqlite3/simple_test.rb +9 -9
- data/test/has_many_through.rb +4 -1
- data/test/jdbc/db2.rb +14 -1
- data/test/jdbc_column_test.rb +23 -0
- data/test/{generic_jdbc_connection_test.rb → jdbc_connection_test.rb} +22 -17
- data/test/jndi_callbacks_test.rb +26 -28
- data/test/jndi_test.rb +7 -16
- data/test/models/data_types.rb +2 -1
- data/test/models/thing.rb +1 -0
- data/test/rails/mysql.rb +13 -0
- data/test/rails/sqlite3/version.rb +6 -0
- data/test/rails_stub.rb +31 -0
- data/test/rake_test_support.rb +298 -0
- data/test/serialize.rb +2 -4
- data/test/{helper.rb → shared_helper.rb} +0 -0
- data/test/simple.rb +167 -93
- data/test/test_helper.rb +52 -16
- metadata +388 -354
- data/lib/pg.rb +0 -26
- data/test/abstract_db_create.rb +0 -139
- data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -36
- data/test/db/mssql/db_create_test.rb +0 -29
- data/test/db/mysql/db_create_test.rb +0 -33
- data/test/db/postgres/db_create_test.rb +0 -44
- data/test/db/postgres/db_drop_test.rb +0 -17
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require 'arjdbc/db2/adapter'
|
|
2
|
+
|
|
3
|
+
module ArJdbc
|
|
4
|
+
module AS400
|
|
5
|
+
include DB2
|
|
6
|
+
|
|
7
|
+
def self.extended(base); DB2.extended(base); end
|
|
8
|
+
|
|
9
|
+
def self.column_selector
|
|
10
|
+
[ /as400/i, lambda { |cfg, column| column.extend(::ArJdbc::AS400::Column) } ]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.jdbc_connection_class; DB2.jdbc_connection_class; end
|
|
14
|
+
|
|
15
|
+
def self.arel2_visitors(config)
|
|
16
|
+
visitors = DB2.arel2_visitors(config).dup
|
|
17
|
+
visitors['as400'] = ::Arel::Visitors::DB2
|
|
18
|
+
visitors
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
ADAPTER_NAME = 'AS400'.freeze
|
|
22
|
+
|
|
23
|
+
def adapter_name
|
|
24
|
+
ADAPTER_NAME
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @override
|
|
28
|
+
def prefetch_primary_key?(table_name = nil)
|
|
29
|
+
# TRUE if the table has no identity column
|
|
30
|
+
names = table_name.upcase.split(".")
|
|
31
|
+
sql = "SELECT 1 FROM SYSIBM.SQLPRIMARYKEYS WHERE "
|
|
32
|
+
sql << "TABLE_SCHEM = '#{names.first}' AND " if names.size == 2
|
|
33
|
+
sql << "TABLE_NAME = '#{names.last}'"
|
|
34
|
+
select_one(sql).nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @override
|
|
38
|
+
def rename_column(table_name, column_name, new_column_name) # :nodoc:
|
|
39
|
+
raise NotImplementedError, "rename_column is not supported on IBM iSeries"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @override
|
|
43
|
+
def execute_table_change(sql, table_name, name = nil)
|
|
44
|
+
execute_and_auto_confirm(sql, name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# holy moly batman! all this to tell AS400 "yes i am sure"
|
|
48
|
+
def execute_and_auto_confirm(sql, name = nil)
|
|
49
|
+
|
|
50
|
+
begin
|
|
51
|
+
@connection.execute_update "call qsys.qcmdexc('QSYS/CHGJOB INQMSGRPY(*SYSRPYL)',0000000031.00000)"
|
|
52
|
+
@connection.execute_update "call qsys.qcmdexc('ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY(''I'')',0000000045.00000)"
|
|
53
|
+
rescue Exception => e
|
|
54
|
+
raise "Could not call CHGJOB INQMSGRPY(*SYSRPYL) and ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY('I').\n" +
|
|
55
|
+
"Do you have authority to do this?\n\n#{e.inspect}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
begin
|
|
59
|
+
result = execute(sql, name)
|
|
60
|
+
rescue Exception
|
|
61
|
+
raise
|
|
62
|
+
else
|
|
63
|
+
# Return if all work fine
|
|
64
|
+
result
|
|
65
|
+
ensure
|
|
66
|
+
|
|
67
|
+
# Ensure default configuration restoration
|
|
68
|
+
begin
|
|
69
|
+
@connection.execute_update "call qsys.qcmdexc('QSYS/CHGJOB INQMSGRPY(*DFT)',0000000027.00000)"
|
|
70
|
+
@connection.execute_update "call qsys.qcmdexc('RMVRPYLE SEQNBR(9876)',0000000021.00000)"
|
|
71
|
+
rescue Exception => e
|
|
72
|
+
raise "Could not call CHGJOB INQMSGRPY(*DFT) and RMVRPYLE SEQNBR(9876).\n" +
|
|
73
|
+
"Do you have authority to do this?\n\n#{e.inspect}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
private :execute_and_auto_confirm
|
|
79
|
+
|
|
80
|
+
# disable all schemas browsing when default schema is specified
|
|
81
|
+
def table_exists?(name)
|
|
82
|
+
schema ?
|
|
83
|
+
@connection.table_exists?(name, schema) :
|
|
84
|
+
@connection.table_exists?(name)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
DRIVER_NAME = 'com.ibm.as400.access.AS400JDBCDriver'.freeze
|
|
88
|
+
|
|
89
|
+
# @deprecated no longer used
|
|
90
|
+
def as400?
|
|
91
|
+
true
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
# @override
|
|
97
|
+
def db2_schema
|
|
98
|
+
@db2_schema = false unless defined? @db2_schema
|
|
99
|
+
return @db2_schema if @db2_schema != false
|
|
100
|
+
@db2_schema =
|
|
101
|
+
if config[:schema].present?
|
|
102
|
+
config[:schema]
|
|
103
|
+
elsif config[:jndi].present?
|
|
104
|
+
# Only found method to set db2_schema from jndi
|
|
105
|
+
result = select_one("SELECT CURRENT_SCHEMA FROM SYSIBM.SYSDUMMY1")
|
|
106
|
+
schema = result['00001']
|
|
107
|
+
# If the connection uses the library list schema name will be nil
|
|
108
|
+
if schema == '*LIBL'
|
|
109
|
+
schema = nil
|
|
110
|
+
end
|
|
111
|
+
schema
|
|
112
|
+
else
|
|
113
|
+
# AS400 implementation takes schema from library name (last part of URL)
|
|
114
|
+
# jdbc:as400://localhost/schema;naming=system;libraries=lib1,lib2
|
|
115
|
+
schema = nil
|
|
116
|
+
split = config[:url].split('/')
|
|
117
|
+
# Return nil if schema isn't defined
|
|
118
|
+
schema = split.last.split(';').first.strip if split.size == 4
|
|
119
|
+
schema
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -9,9 +9,28 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
config[:driver] ||= ::ArJdbc::DB2::DRIVER_NAME
|
|
12
|
-
config[:adapter_spec]
|
|
12
|
+
config[:adapter_spec] ||= ::ArJdbc::DB2
|
|
13
13
|
config[:connection_alive_sql] ||= 'SELECT 1 FROM syscat.tables FETCH FIRST 1 ROWS ONLY'
|
|
14
14
|
jdbc_connection(config)
|
|
15
15
|
end
|
|
16
16
|
alias_method :jdbcdb2_connection, :db2_connection
|
|
17
|
+
|
|
18
|
+
def as400_connection(config)
|
|
19
|
+
config[:url] ||= begin
|
|
20
|
+
# jdbc:as400://[host]
|
|
21
|
+
url = 'jdbc:as400://'
|
|
22
|
+
url << config[:host] if config[:host]
|
|
23
|
+
# jdbc:as400://myiSeries;database name=IASP1
|
|
24
|
+
url << ";database name=#{config[:database]}" if config[:database]
|
|
25
|
+
# jdbc:as400://[host];proxy server=HODServerName:proxyServerPort
|
|
26
|
+
url << ";proxy server=#{config[:proxy]}" if config[:proxy]
|
|
27
|
+
url
|
|
28
|
+
end
|
|
29
|
+
require 'arjdbc/db2/as400'
|
|
30
|
+
config[:driver] ||= ::ArJdbc::AS400::DRIVER_NAME
|
|
31
|
+
config[:adapter_spec] ||= ::ArJdbc::AS400
|
|
32
|
+
config[:connection_alive_sql] ||= 'SELECT 1 FROM sysibm.tables FETCH FIRST 1 ROWS ONLY'
|
|
33
|
+
jdbc_connection(config)
|
|
34
|
+
end
|
|
35
|
+
alias_method :jdbcas400_connection, :as400_connection
|
|
17
36
|
end
|
data/lib/arjdbc/derby/adapter.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
ArJdbc.load_java_part :Derby
|
|
1
2
|
require 'arjdbc/jdbc/missing_functionality_helper'
|
|
2
3
|
|
|
3
4
|
module ArJdbc
|
|
@@ -5,10 +6,9 @@ module ArJdbc
|
|
|
5
6
|
|
|
6
7
|
def self.extended(adapter)
|
|
7
8
|
require 'arjdbc/derby/active_record_patch'
|
|
8
|
-
adapter.configure_connection
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def self.included(
|
|
11
|
+
def self.included(base)
|
|
12
12
|
require 'arjdbc/derby/active_record_patch'
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -160,6 +160,10 @@ module ArJdbc
|
|
|
160
160
|
super
|
|
161
161
|
end
|
|
162
162
|
|
|
163
|
+
def empty_insert_statement_value
|
|
164
|
+
'VALUES ( DEFAULT )' # won't work as Derby does need to know the columns count
|
|
165
|
+
end
|
|
166
|
+
|
|
163
167
|
# Set the sequence to the max value of the table's column.
|
|
164
168
|
def reset_sequence!(table, column, sequence = nil)
|
|
165
169
|
mpk = select_value("SELECT MAX(#{quote_column_name(column)}) FROM #{quote_table_name(table)}")
|
|
@@ -195,7 +199,7 @@ module ArJdbc
|
|
|
195
199
|
end
|
|
196
200
|
|
|
197
201
|
def execute(sql, name = nil, binds = [])
|
|
198
|
-
sql = to_sql(sql)
|
|
202
|
+
sql = to_sql(sql, binds)
|
|
199
203
|
if sql =~ /\A\s*(UPDATE|INSERT)/i
|
|
200
204
|
if ( i = sql =~ /\sWHERE\s/im )
|
|
201
205
|
where_part = sql[i..-1]; sql = sql.dup
|
|
@@ -230,69 +234,6 @@ module ArJdbc
|
|
|
230
234
|
sql = "DISTINCT #{columns}, #{order_columns * ', '}"
|
|
231
235
|
sql
|
|
232
236
|
end
|
|
233
|
-
|
|
234
|
-
SIZEABLE = %w(VARCHAR CLOB BLOB) # :nodoc:
|
|
235
|
-
|
|
236
|
-
def structure_dump # :nodoc:
|
|
237
|
-
definition = ""
|
|
238
|
-
meta_data = @connection.connection.meta_data
|
|
239
|
-
tables_rs = meta_data.getTables(nil, nil, nil, ["TABLE"].to_java(:string))
|
|
240
|
-
while tables_rs.next
|
|
241
|
-
table_name = tables_rs.getString(3)
|
|
242
|
-
definition << "CREATE TABLE #{table_name} (\n"
|
|
243
|
-
columns_rs = meta_data.getColumns(nil, nil, table_name, nil)
|
|
244
|
-
first_col = true
|
|
245
|
-
while columns_rs.next
|
|
246
|
-
column_name = add_quotes(columns_rs.getString(4));
|
|
247
|
-
default = ''
|
|
248
|
-
d1 = columns_rs.getString(13)
|
|
249
|
-
if d1 =~ /^GENERATED_/
|
|
250
|
-
default = auto_increment_stmt(table_name, column_name)
|
|
251
|
-
elsif d1
|
|
252
|
-
default = " DEFAULT #{d1}"
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
type = columns_rs.getString(6)
|
|
256
|
-
column_size = columns_rs.getString(7)
|
|
257
|
-
nulling = (columns_rs.getString(18) == 'NO' ? " NOT NULL" : "")
|
|
258
|
-
create_column = add_quotes(expand_double_quotes(strip_quotes(column_name)))
|
|
259
|
-
create_column << " #{type}"
|
|
260
|
-
create_column << ( SIZEABLE.include?(type) ? "(#{column_size})" : "" )
|
|
261
|
-
create_column << nulling
|
|
262
|
-
create_column << default
|
|
263
|
-
|
|
264
|
-
create_column = first_col ? " #{create_column}" : ",\n #{create_column}"
|
|
265
|
-
definition << create_column
|
|
266
|
-
|
|
267
|
-
first_col = false
|
|
268
|
-
end
|
|
269
|
-
definition << ");\n\n"
|
|
270
|
-
end
|
|
271
|
-
definition
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
AUTO_INC_STMT2 = "" +
|
|
275
|
-
"SELECT AUTOINCREMENTSTART, AUTOINCREMENTINC, COLUMNNAME, REFERENCEID, COLUMNDEFAULT " +
|
|
276
|
-
"FROM SYS.SYSCOLUMNS WHERE REFERENCEID = " +
|
|
277
|
-
"(SELECT T.TABLEID FROM SYS.SYSTABLES T WHERE T.TABLENAME = '%s') AND COLUMNNAME = '%s'"
|
|
278
|
-
|
|
279
|
-
def auto_increment_stmt(tname, cname)
|
|
280
|
-
stmt = AUTO_INC_STMT2 % [ tname, strip_quotes(cname) ]
|
|
281
|
-
if data = execute(stmt).first
|
|
282
|
-
if start = data['autoincrementstart']
|
|
283
|
-
coldef = ""
|
|
284
|
-
coldef << " GENERATED " << (data['columndefault'].nil? ? "ALWAYS" : "BY DEFAULT ")
|
|
285
|
-
coldef << "AS IDENTITY (START WITH "
|
|
286
|
-
coldef << start
|
|
287
|
-
coldef << ", INCREMENT BY "
|
|
288
|
-
coldef << data['autoincrementinc']
|
|
289
|
-
coldef << ")"
|
|
290
|
-
return coldef
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
""
|
|
294
|
-
end
|
|
295
|
-
private :auto_increment_stmt
|
|
296
237
|
|
|
297
238
|
def remove_column(table_name, *column_names) # :nodoc:
|
|
298
239
|
for column_name in column_names.flatten
|
|
@@ -354,13 +295,20 @@ module ArJdbc
|
|
|
354
295
|
def tables
|
|
355
296
|
@connection.tables(nil, derby_schema)
|
|
356
297
|
end
|
|
298
|
+
|
|
299
|
+
def recreate_database(name = nil, options = {}) # :nodoc:
|
|
300
|
+
drop_database(name)
|
|
301
|
+
create_database(name, options)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def create_database(name = nil, options = {}); end # :nodoc:
|
|
357
305
|
|
|
358
|
-
def
|
|
359
|
-
tables.each { |table| drop_table
|
|
306
|
+
def drop_database(name = nil) # :nodoc:
|
|
307
|
+
tables.each { |table| drop_table(table) }
|
|
360
308
|
end
|
|
361
309
|
|
|
362
310
|
def quote_column_name(name) # :nodoc:
|
|
363
|
-
%Q{"#{name.to_s.upcase.gsub(
|
|
311
|
+
%Q{"#{name.to_s.upcase.gsub('"', '""')}"}
|
|
364
312
|
end
|
|
365
313
|
|
|
366
314
|
def add_limit_offset!(sql, options) # :nodoc:
|
|
@@ -371,22 +319,6 @@ module ArJdbc
|
|
|
371
319
|
|
|
372
320
|
private
|
|
373
321
|
|
|
374
|
-
def add_quotes(name)
|
|
375
|
-
return name unless name
|
|
376
|
-
%Q{"#{name}"}
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
def strip_quotes(str)
|
|
380
|
-
return str unless str
|
|
381
|
-
return str unless /^(["']).*\1$/ =~ str
|
|
382
|
-
str[1..-2]
|
|
383
|
-
end
|
|
384
|
-
|
|
385
|
-
def expand_double_quotes(name)
|
|
386
|
-
return name unless name && name['"']
|
|
387
|
-
name.gsub('"', '""')
|
|
388
|
-
end
|
|
389
|
-
|
|
390
322
|
# Derby appears to define schemas using the username
|
|
391
323
|
def derby_schema
|
|
392
324
|
if @config.has_key?(:schema)
|
|
@@ -8,8 +8,9 @@ ArJdbc::ConnectionMethods.module_eval do
|
|
|
8
8
|
|
|
9
9
|
config[:url] ||= "jdbc:derby:#{config[:database]};create=true"
|
|
10
10
|
config[:driver] ||= defined?(::Jdbc::Derby.driver_name) ? ::Jdbc::Derby.driver_name : 'org.apache.derby.jdbc.EmbeddedDriver'
|
|
11
|
-
config[:adapter_spec]
|
|
11
|
+
config[:adapter_spec] ||= ::ArJdbc::Derby
|
|
12
12
|
config[:connection_alive_sql] ||= 'SELECT 1 FROM SYS.SYSSCHEMAS FETCH FIRST 1 ROWS ONLY' # FROM clause is mandatory
|
|
13
|
+
|
|
13
14
|
connection = embedded_driver(config)
|
|
14
15
|
md = connection.jdbc_connection.meta_data
|
|
15
16
|
if md.database_major_version < 10 || (md.database_major_version == 10 && md.database_minor_version < 5)
|
data/lib/arjdbc/discover.rb
CHANGED
|
@@ -1,31 +1,29 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
1
|
+
# this file is discovered by the extension mechanism
|
|
2
|
+
# @see {ArJdbc#discover_extensions}
|
|
3
3
|
|
|
4
|
-
module
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
module ArJdbc
|
|
5
|
+
|
|
6
|
+
require 'arjdbc/jdbc/adapter_require'
|
|
7
|
+
|
|
8
|
+
# Adapters built-in to AR :
|
|
9
|
+
|
|
10
|
+
require 'arjdbc/mysql' if Java::JavaLang::Boolean.getBoolean('arjdbc.mysql.eager_load')
|
|
11
|
+
require 'arjdbc/postgresql' if Java::JavaLang::Boolean.getBoolean('arjdbc.postgresql.eager_load')
|
|
12
|
+
require 'arjdbc/sqlite3' if Java::JavaLang::Boolean.getBoolean('arjdbc.sqlite3.eager_load')
|
|
13
|
+
|
|
8
14
|
extension :MySQL do |name|
|
|
9
|
-
name =~ /mysql/i
|
|
15
|
+
require('arjdbc/mysql') || true if name =~ /mysql/i
|
|
10
16
|
end
|
|
11
|
-
|
|
12
|
-
require 'arjdbc/postgresql'
|
|
17
|
+
|
|
13
18
|
extension :PostgreSQL do |name|
|
|
14
|
-
name =~ /postgre/i
|
|
19
|
+
require('arjdbc/postgresql') || true if name =~ /postgre/i
|
|
15
20
|
end
|
|
16
21
|
|
|
17
|
-
require 'arjdbc/sqlite3'
|
|
18
22
|
extension :SQLite3 do |name|
|
|
19
|
-
name =~ /sqlite/i
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Other adapters are lazy-loaded
|
|
23
|
-
extension :DB2 do |name, config|
|
|
24
|
-
if name =~ /(db2|as400)/i && config[:url] !~ /^jdbc:derby:net:/
|
|
25
|
-
require 'arjdbc/db2'
|
|
26
|
-
true
|
|
27
|
-
end
|
|
23
|
+
require('arjdbc/sqlite3') || true if name =~ /sqlite/i
|
|
28
24
|
end
|
|
25
|
+
|
|
26
|
+
# Other supported adapters :
|
|
29
27
|
|
|
30
28
|
extension :Derby do |name, config|
|
|
31
29
|
if name =~ /derby/i
|
|
@@ -49,44 +47,30 @@ module ::ArJdbc
|
|
|
49
47
|
end
|
|
50
48
|
end
|
|
51
49
|
|
|
52
|
-
extension :FireBird do |name|
|
|
53
|
-
if name =~ /firebird/i
|
|
54
|
-
require 'arjdbc/firebird'
|
|
55
|
-
true
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
50
|
extension :H2 do |name|
|
|
60
|
-
if name =~ /\.h2\./i
|
|
61
|
-
require 'arjdbc/h2'
|
|
62
|
-
true
|
|
63
|
-
end
|
|
51
|
+
require('arjdbc/h2') || true if name =~ /\.h2\./i
|
|
64
52
|
end
|
|
65
53
|
|
|
66
54
|
extension :HSQLDB do |name|
|
|
67
|
-
if name =~ /hsqldb/i
|
|
68
|
-
require 'arjdbc/hsqldb'
|
|
69
|
-
true
|
|
70
|
-
end
|
|
55
|
+
require('arjdbc/hsqldb') || true if name =~ /hsqldb/i
|
|
71
56
|
end
|
|
72
57
|
|
|
73
|
-
extension :
|
|
74
|
-
if name =~ /
|
|
75
|
-
require 'arjdbc/informix'
|
|
76
|
-
true
|
|
77
|
-
end
|
|
58
|
+
extension :MSSQL do |name|
|
|
59
|
+
require('arjdbc/mssql') || true if name =~ /sqlserver|tds|Microsoft SQL/i
|
|
78
60
|
end
|
|
79
61
|
|
|
80
|
-
extension :
|
|
81
|
-
if name =~ /
|
|
82
|
-
require 'arjdbc/
|
|
62
|
+
extension :DB2 do |name, config|
|
|
63
|
+
if name =~ /db2/i && name !~ /as\/?400/i && config[:url] !~ /^jdbc:derby:net:/
|
|
64
|
+
require 'arjdbc/db2'
|
|
83
65
|
true
|
|
84
66
|
end
|
|
85
67
|
end
|
|
86
|
-
|
|
87
|
-
extension :
|
|
88
|
-
|
|
89
|
-
|
|
68
|
+
|
|
69
|
+
extension :AS400 do |name, config|
|
|
70
|
+
# The native JDBC driver always returns "DB2 UDB for AS/400"
|
|
71
|
+
if name =~ /as\/?400/i
|
|
72
|
+
require 'arjdbc/db2'
|
|
73
|
+
require 'arjdbc/db2/as400'
|
|
90
74
|
true
|
|
91
75
|
end
|
|
92
76
|
end
|
|
@@ -97,6 +81,15 @@ module ::ArJdbc
|
|
|
97
81
|
true
|
|
98
82
|
end
|
|
99
83
|
end
|
|
84
|
+
|
|
85
|
+
# NOTE: following ones are likely getting deprecated :
|
|
86
|
+
|
|
87
|
+
extension :FireBird do |name|
|
|
88
|
+
if name =~ /firebird/i
|
|
89
|
+
require 'arjdbc/firebird'
|
|
90
|
+
true
|
|
91
|
+
end
|
|
92
|
+
end
|
|
100
93
|
|
|
101
94
|
extension :Sybase do |name|
|
|
102
95
|
if name =~ /sybase|tds/i
|
|
@@ -104,4 +97,19 @@ module ::ArJdbc
|
|
|
104
97
|
true
|
|
105
98
|
end
|
|
106
99
|
end
|
|
100
|
+
|
|
101
|
+
extension :Informix do |name|
|
|
102
|
+
if name =~ /informix/i
|
|
103
|
+
require 'arjdbc/informix'
|
|
104
|
+
true
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
extension :Mimer do |name|
|
|
109
|
+
if name =~ /mimer/i
|
|
110
|
+
require 'arjdbc/mimer'
|
|
111
|
+
true
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
107
115
|
end
|