activerecord-jdbc-adapter 1.3.9 → 1.3.10
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 +4 -4
- data/Gemfile +4 -0
- data/History.md +14 -0
- data/Rakefile +3 -1
- data/lib/arel/visitors/sql_server.rb +6 -7
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/arel_support.rb +3 -2
- data/lib/arjdbc/jdbc/connection.rb +0 -4
- data/lib/arjdbc/mssql/limit_helpers.rb +52 -45
- data/lib/arjdbc/mssql/utils.rb +10 -15
- data/lib/arjdbc/mysql/adapter.rb +1 -1
- data/lib/arjdbc/oracle/adapter.rb +1 -1
- data/lib/arjdbc/postgresql/adapter.rb +12 -6
- data/lib/arjdbc/postgresql/column.rb +18 -0
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/01-tomcat.rake +4 -5
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +36 -5
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +10 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11049989079fcc38fceef1db1689c5db555fd37e
|
4
|
+
data.tar.gz: 01a9dab21474a9548126ee80d840264f8d0018f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed02de30c898c0a8fba369ef315572e16997b19436828294a367c93fd1101ae7bd077c7989d0372f524b87bf66cb6a421b4ac8e6d682d7d4655eb5cfc2157156
|
7
|
+
data.tar.gz: 1dafdc93914c961ae1894d79e23b8f7b10c957fd183c96fd471031c16ff2dd6f87b786a8554770ea79612131f406742088c0bbb3dc2ab7ae7fb94fcd32f255be
|
data/Gemfile
CHANGED
@@ -51,3 +51,7 @@ end
|
|
51
51
|
gem 'mysql2', :require => nil, :platform => :mri, :group => :test
|
52
52
|
gem 'pg', :require => nil, :platform => :mri, :group => :test
|
53
53
|
gem 'sqlite3', :require => nil, :platform => :mri, :group => :test
|
54
|
+
group :mssql do
|
55
|
+
gem 'tiny_tds', :require => nil, :platform => :mri, :group => :test
|
56
|
+
gem 'activerecord-sqlserver-adapter', :require => nil, :platform => :mri, :group => :test
|
57
|
+
end
|
data/History.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 1.3.10 (08/29/14)
|
2
|
+
|
3
|
+
- [postgres] preliminary (temp) fix for Marshal.dump broken since 1.3.8 (#573)
|
4
|
+
- [postgres] adapter was missing the custom rename_index method (fixes #577)
|
5
|
+
- [postgres] user defined types should not raise an error
|
6
|
+
- [postgres] align with Rails distict white-space fix (regression in 4.0.10)
|
7
|
+
- [mssql] allow for `offset(x)` without `limit(y)` to work ... (fixes #564)
|
8
|
+
- [mssql] correctly parse set_table_name string with owner (#574)
|
9
|
+
- allow database.yml or config option to set `:insert_returning` (#570)
|
10
|
+
- [sqlite3] savepoint without passed explicit name not supported
|
11
|
+
- synchronize setting resolved visitor type
|
12
|
+
- [mssql] (hopefully) fix ORDER BY mis-detection - closes #532 (improved #549)
|
13
|
+
- [mysql] columns were sometimes instantiated with the wrong column class (#566)
|
14
|
+
|
1
15
|
## 1.3.9 (07/07/14)
|
2
16
|
|
3
17
|
- [postgres] improve Range's type cast - fixing minor quoting failure on AR 4.x
|
data/Rakefile
CHANGED
@@ -73,7 +73,9 @@ task 'release:do' => 'build:adapters' do
|
|
73
73
|
sh("git diff-index --quiet --cached HEAD") { |ok| fail "git index is not clean" unless ok }
|
74
74
|
|
75
75
|
sh "git tag -a -m \"AR-JDBC #{version}\" #{version_tag}"
|
76
|
-
sh "for gem in `ls pkg/*-#{version}.gem`; do gem push $gem; done"
|
76
|
+
sh "for gem in `ls pkg/*-#{version}.gem`; do gem push $gem; done" do |ok|
|
77
|
+
sh "git push origin master --tags" if ok
|
78
|
+
end
|
77
79
|
end
|
78
80
|
|
79
81
|
# ALL
|
@@ -8,11 +8,7 @@ module Arel
|
|
8
8
|
def visit_Arel_Nodes_SelectStatement(*args) # [o] AR <= 4.0 [o, a] on 4.1
|
9
9
|
o, a = args.first, args.last
|
10
10
|
|
11
|
-
if ! o.limit && ! o.offset
|
12
|
-
return super
|
13
|
-
elsif ! o.limit && o.offset
|
14
|
-
raise ActiveRecord::ActiveRecordError, "must specify :limit with :offset"
|
15
|
-
end
|
11
|
+
return super if ! o.limit && ! o.offset # NOTE: really?
|
16
12
|
|
17
13
|
unless o.orders.empty?
|
18
14
|
select_order_by = "ORDER BY #{do_visit_columns(o.orders, a).join(', ')}"
|
@@ -46,10 +42,13 @@ module Arel
|
|
46
42
|
sql
|
47
43
|
end
|
48
44
|
|
45
|
+
# @private
|
46
|
+
MAX_LIMIT_VALUE = 9_223_372_036_854_775_807
|
47
|
+
|
49
48
|
def visit_Arel_Nodes_UpdateStatement(*args) # [o] AR <= 4.0 [o, a] on 4.1
|
50
49
|
o = args.first
|
51
50
|
if o.orders.any? && o.limit.nil?
|
52
|
-
o.limit = Nodes::Limit.new(
|
51
|
+
o.limit = Nodes::Limit.new(MAX_LIMIT_VALUE)
|
53
52
|
end
|
54
53
|
super
|
55
54
|
end
|
@@ -67,7 +66,7 @@ module Arel
|
|
67
66
|
# User.select("distinct first_name").limit(10)
|
68
67
|
# would generate "select top 10 distinct first_name from users",
|
69
68
|
# which is invalid should be "select distinct top 10 first_name ..."
|
70
|
-
|
69
|
+
''
|
71
70
|
end
|
72
71
|
|
73
72
|
def visit_Arel_Nodes_Limit o, a = nil
|
Binary file
|
@@ -49,8 +49,9 @@ module ActiveRecord::ConnectionAdapters
|
|
49
49
|
visitor_type ||= ::Arel::Visitors::VISITORS[ arel_visitor_name(adapter_spec) ]
|
50
50
|
visitor_type ||= ::Arel::Visitors::ToSql # default (if nothing resolved)
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
RESOLVED_VISITORS.to_java.synchronized do
|
53
|
+
RESOLVED_VISITORS[ adapter ] = ::Arel::Visitors::VISITORS[ adapter ] = visitor_type
|
54
|
+
end
|
54
55
|
end
|
55
56
|
|
56
57
|
visitor_type
|
@@ -38,10 +38,6 @@ module ActiveRecord
|
|
38
38
|
ArJdbc.deprecate "set_native_database_types is no longer used and does nothing override native_database_types instead"
|
39
39
|
end
|
40
40
|
|
41
|
-
def self.jndi_config?(config)
|
42
|
-
config[:jndi] || config[:data_source]
|
43
|
-
end
|
44
|
-
|
45
41
|
def jndi?; @jndi; end
|
46
42
|
alias_method :jndi_connection?, :jndi?
|
47
43
|
|
@@ -4,64 +4,71 @@ module ArJdbc
|
|
4
4
|
|
5
5
|
# @private
|
6
6
|
FIND_SELECT = /\b(SELECT(\s+DISTINCT)?)\b(.*)/mi
|
7
|
-
|
7
|
+
# @private
|
8
|
+
FIND_AGGREGATE_FUNCTION = /(AVG|COUNT|COUNT_BIG|MAX|MIN|SUM|STDDEV|STDEVP|VAR|VARP)\(/i
|
8
9
|
|
9
10
|
module SqlServerReplaceLimitOffset
|
10
11
|
|
11
12
|
module_function
|
12
13
|
|
13
14
|
def replace_limit_offset!(sql, limit, offset, order)
|
14
|
-
|
15
|
-
offset ||= 0
|
16
|
-
start_row, end_row = offset + 1, offset + limit.to_i
|
15
|
+
offset ||= 0
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
17
|
+
if match = FIND_SELECT.match(sql)
|
18
|
+
select, distinct, rest_of_query = match[1], match[2], match[3]
|
19
|
+
rest_of_query.strip!
|
20
|
+
end
|
21
|
+
rest_of_query[0] = '*' if rest_of_query[0...1] == '1' && rest_of_query !~ /1 AS/i
|
22
|
+
if rest_of_query[0...1] == '*'
|
23
|
+
from_table = Utils.get_table_name(rest_of_query, true)
|
24
|
+
rest_of_query = "#{from_table}.#{rest_of_query}"
|
25
|
+
end
|
27
26
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
27
|
+
# Ensure correct queries if the rest_of_query contains a 'GROUP BY'. Otherwise the following error occurs:
|
28
|
+
# ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: Column 'users.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
|
29
|
+
# SELECT t.* FROM ( SELECT ROW_NUMBER() OVER(ORDER BY users.id) AS _row_num, [users].[lft], COUNT([users].[lft]) FROM [users] GROUP BY [users].[lft] HAVING COUNT([users].[lft]) > 1 ) AS t WHERE t._row_num BETWEEN 1 AND 1
|
30
|
+
if rest_of_query.downcase.include?('group by')
|
31
|
+
order_start = order.strip[0, 8]; order_start.upcase!
|
32
|
+
if order_start == 'ORDER BY' && order.match(FIND_AGGREGATE_FUNCTION)
|
33
|
+
# do nothing
|
34
|
+
elsif order.count(',') == 0
|
35
|
+
order.gsub!(/ORDER +BY +([^\s]+)(\s+ASC|\s+DESC)?/i, 'ORDER BY MIN(\1)\2')
|
36
|
+
else
|
37
|
+
raise('Only one order condition allowed.')
|
39
38
|
end
|
39
|
+
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
if distinct # select =~ /DISTINCT/i
|
42
|
+
order = order.gsub(/([a-z0-9_])+\./, 't.')
|
43
|
+
new_sql = "SELECT t.* FROM "
|
44
|
+
new_sql << "( SELECT ROW_NUMBER() OVER(#{order}) AS _row_num, t.* FROM (#{select} #{rest_of_query}) AS t ) AS t"
|
45
|
+
append_limit_row_num_clause(new_sql, limit, offset)
|
46
|
+
else
|
47
|
+
select_columns_before_from = rest_of_query.gsub(/FROM.*/, '').strip
|
48
|
+
only_one_column = !select_columns_before_from.include?(',')
|
49
|
+
only_one_id_column = only_one_column && (select_columns_before_from.ends_with?('.id') || select_columns_before_from.ends_with?('.[id]'))
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
new_sql << "( SELECT ROW_NUMBER() OVER(#{order}) AS _row_num, #{rest_of_query} ) AS t"
|
59
|
-
new_sql << " WHERE t._row_num BETWEEN #{start_row} AND #{end_row}"
|
51
|
+
if only_one_id_column
|
52
|
+
# If there's only one id column a subquery will be created which only contains this column
|
53
|
+
new_sql = "#{select} t.id FROM "
|
54
|
+
else
|
55
|
+
# All selected columns are used
|
56
|
+
new_sql = "#{select} t.* FROM "
|
60
57
|
end
|
58
|
+
new_sql << "( SELECT ROW_NUMBER() OVER(#{order}) AS _row_num, #{rest_of_query} ) AS t"
|
59
|
+
append_limit_row_num_clause(new_sql, limit, offset)
|
60
|
+
end
|
61
61
|
|
62
|
-
|
62
|
+
sql.replace new_sql
|
63
|
+
end
|
64
|
+
|
65
|
+
def append_limit_row_num_clause(sql, limit, offset)
|
66
|
+
if limit
|
67
|
+
start_row = offset + 1; end_row = offset + limit.to_i
|
68
|
+
sql << " WHERE t._row_num BETWEEN #{start_row} AND #{end_row}"
|
69
|
+
else
|
70
|
+
sql << " WHERE t._row_num > #{offset}"
|
63
71
|
end
|
64
|
-
sql
|
65
72
|
end
|
66
73
|
|
67
74
|
end
|
@@ -75,7 +82,7 @@ module ArJdbc
|
|
75
82
|
offset ||= 0
|
76
83
|
start_row = offset + 1
|
77
84
|
end_row = offset + limit.to_i
|
78
|
-
|
85
|
+
|
79
86
|
if match = FIND_SELECT.match(sql)
|
80
87
|
select, distinct, rest_of_query = match[1], match[2], match[3]
|
81
88
|
end
|
data/lib/arjdbc/mssql/utils.rb
CHANGED
@@ -21,19 +21,6 @@ module ArJdbc
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
# protected
|
25
|
-
|
26
|
-
# See "Delimited Identifiers": http://msdn.microsoft.com/en-us/library/ms176027.aspx
|
27
|
-
def remove_identifier_delimiters(keyword)
|
28
|
-
if /\A(\[|")(.*)/m.match(keyword)
|
29
|
-
delim, rest = $1, $2
|
30
|
-
if delim == '[' && rest =~ /]\z/ || delim == '"' && rest =~ /"\z/
|
31
|
-
return rest.chop
|
32
|
-
end
|
33
|
-
end
|
34
|
-
keyword
|
35
|
-
end
|
36
|
-
|
37
24
|
def unquote_table_name(table_name)
|
38
25
|
remove_identifier_delimiters(table_name)
|
39
26
|
end
|
@@ -51,7 +38,8 @@ module ArJdbc
|
|
51
38
|
end
|
52
39
|
|
53
40
|
def unqualify_table_schema(table_name)
|
54
|
-
|
41
|
+
schema_name = table_name.to_s.split('.')[-2]
|
42
|
+
schema_name.nil? ? nil : remove_identifier_delimiters(schema_name)
|
55
43
|
end
|
56
44
|
|
57
45
|
def unqualify_db_name(table_name)
|
@@ -59,6 +47,13 @@ module ArJdbc
|
|
59
47
|
table_names.length == 3 ? remove_identifier_delimiters(table_names.first) : nil
|
60
48
|
end
|
61
49
|
|
50
|
+
# private
|
51
|
+
|
52
|
+
# See "Delimited Identifiers": http://msdn.microsoft.com/en-us/library/ms176027.aspx
|
53
|
+
def remove_identifier_delimiters(keyword)
|
54
|
+
keyword.to_s.tr("\]\[\"", '')
|
55
|
+
end
|
56
|
+
|
62
57
|
end
|
63
58
|
end
|
64
|
-
end
|
59
|
+
end
|
data/lib/arjdbc/mysql/adapter.rb
CHANGED
@@ -332,7 +332,7 @@ module ArJdbc
|
|
332
332
|
sql = "SHOW FULL COLUMNS FROM #{quote_table_name(table_name)}"
|
333
333
|
columns = execute(sql, name || 'SCHEMA')
|
334
334
|
strict = strict_mode?
|
335
|
-
column =
|
335
|
+
column = ::ActiveRecord::ConnectionAdapters::MysqlAdapter::Column
|
336
336
|
pass_cast_type = respond_to?(:lookup_cast_type)
|
337
337
|
columns.map! do |field|
|
338
338
|
sql_type = field['Type']
|
@@ -58,7 +58,7 @@ module ArJdbc
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def use_insert_returning?
|
61
|
-
if
|
61
|
+
if @use_insert_returning.nil?
|
62
62
|
@use_insert_returning = supports_insert_with_returning?
|
63
63
|
end
|
64
64
|
@use_insert_returning
|
@@ -777,11 +777,13 @@ module ArJdbc
|
|
777
777
|
end
|
778
778
|
|
779
779
|
order_columns = orders.reject(&:blank?).map! do |column|
|
780
|
-
column = column.
|
781
|
-
column.gsub(/\s+(ASC|DESC)\s
|
780
|
+
column = column.is_a?(String) ? column.dup : column.to_sql # AREL node
|
781
|
+
column.gsub!(/\s+(?:ASC|DESC)\s*/i, '') # remove any ASC/DESC modifiers
|
782
|
+
column.gsub!(/\s*NULLS\s+(?:FIRST|LAST)?\s*/i, '')
|
783
|
+
column
|
782
784
|
end
|
783
|
-
order_columns.reject!(&:
|
784
|
-
i = -1; order_columns.map! { |
|
785
|
+
order_columns.reject!(&:empty?)
|
786
|
+
i = -1; order_columns.map! { |column| "#{column} AS alias_#{i += 1}" }
|
785
787
|
|
786
788
|
columns = [ columns ]; columns.flatten!
|
787
789
|
columns.push( *order_columns ).join(', ')
|
@@ -805,7 +807,7 @@ module ArJdbc
|
|
805
807
|
# @return [String]
|
806
808
|
# @override
|
807
809
|
def quote(value, column = nil)
|
808
|
-
return super unless column
|
810
|
+
return super unless column && column.type
|
809
811
|
return value if sql_literal?(value)
|
810
812
|
|
811
813
|
case value
|
@@ -1065,6 +1067,10 @@ module ArJdbc
|
|
1065
1067
|
execute "DROP INDEX #{quote_table_name(index_name)}"
|
1066
1068
|
end
|
1067
1069
|
|
1070
|
+
def rename_index(table_name, old_name, new_name)
|
1071
|
+
execute "ALTER INDEX #{quote_column_name(old_name)} RENAME TO #{quote_table_name(new_name)}"
|
1072
|
+
end
|
1073
|
+
|
1068
1074
|
def index_name_length
|
1069
1075
|
63
|
1070
1076
|
end
|
@@ -327,6 +327,24 @@ module ArJdbc
|
|
327
327
|
::Float::INFINITY * (options[:negative] ? -1 : 1)
|
328
328
|
end if AR4_COMPAT
|
329
329
|
|
330
|
+
private
|
331
|
+
|
332
|
+
# TODO marshaling worked in 1.3.7 ,,, got broken in 1.3.8 (due @adapter)
|
333
|
+
# but the fix introduced in 1.3.10 causes backwards (1.3) incompatibility
|
334
|
+
# ... for now should be fine - there's likely more refactoring to happen!
|
335
|
+
|
336
|
+
def marshal_dump
|
337
|
+
# NOTE: disabled oid_type ... due range warnings (maybe they're fine) :
|
338
|
+
# unknown OID 3904: failed to recognize type of 'int4_range'. It will be treated as String.
|
339
|
+
#oid_type if respond_to?(:oid_type)
|
340
|
+
@adapter = nil
|
341
|
+
instance_variables.map { |var| [ var, instance_variable_get(var) ] }
|
342
|
+
end
|
343
|
+
|
344
|
+
def marshal_load(data)
|
345
|
+
data.each { |pair| instance_variable_set( pair[0], pair[1] ) }
|
346
|
+
end
|
347
|
+
|
330
348
|
# @note Based on *active_record/connection_adapters/postgresql/cast.rb* (4.0).
|
331
349
|
module Cast
|
332
350
|
|
data/lib/arjdbc/version.rb
CHANGED
data/rakelib/01-tomcat.rake
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
|
2
1
|
namespace :'tomcat-jndi' do # contains a FS JNDI impl (for tests)
|
3
|
-
|
2
|
+
|
4
3
|
TOMCAT_MAVEN_REPO = 'http://repo2.maven.org/maven2/org/apache/tomcat'
|
5
|
-
TOMCAT_VERSION = '7.0.
|
4
|
+
TOMCAT_VERSION = '7.0.54'
|
6
5
|
|
7
6
|
DOWNLOAD_DIR = File.expand_path('../test/jars', File.dirname(__FILE__))
|
8
7
|
|
@@ -36,7 +35,7 @@ namespace :'tomcat-jndi' do # contains a FS JNDI impl (for tests)
|
|
36
35
|
|
37
36
|
FileUtils.rm_r temp_dir
|
38
37
|
end
|
39
|
-
|
38
|
+
|
40
39
|
task :check do
|
41
40
|
jar_path = File.join(DOWNLOAD_DIR, catalina_jar)
|
42
41
|
unless File.exist?(jar_path)
|
@@ -49,4 +48,4 @@ namespace :'tomcat-jndi' do # contains a FS JNDI impl (for tests)
|
|
49
48
|
rm jar_path if File.exist?(jar_path)
|
50
49
|
end
|
51
50
|
|
52
|
-
end
|
51
|
+
end
|
@@ -1394,6 +1394,37 @@ public class RubyJdbcConnection extends RubyObject {
|
|
1394
1394
|
return value;
|
1395
1395
|
}
|
1396
1396
|
|
1397
|
+
@JRubyMethod(name = "jndi_config?", meta = true)
|
1398
|
+
public static IRubyObject jndi_config_p(final ThreadContext context,
|
1399
|
+
final IRubyObject self, final IRubyObject config) {
|
1400
|
+
// config[:jndi] || config[:data_source]
|
1401
|
+
|
1402
|
+
final Ruby runtime = context.getRuntime();
|
1403
|
+
|
1404
|
+
IRubyObject configValue;
|
1405
|
+
|
1406
|
+
if ( config.getClass() == RubyHash.class ) { // "optimized" version
|
1407
|
+
final RubyHash configHash = ((RubyHash) config);
|
1408
|
+
configValue = configHash.fastARef(runtime.newSymbol("jndi"));
|
1409
|
+
if ( configValue == null ) {
|
1410
|
+
configValue = configHash.fastARef(runtime.newSymbol("data_source"));
|
1411
|
+
}
|
1412
|
+
}
|
1413
|
+
else {
|
1414
|
+
configValue = config.callMethod(context, "[]", runtime.newSymbol("jndi"));
|
1415
|
+
if ( configValue.isNil() ) configValue = null;
|
1416
|
+
if ( configValue == null ) {
|
1417
|
+
configValue = config.callMethod(context, "[]", runtime.newSymbol("data_source"));
|
1418
|
+
}
|
1419
|
+
}
|
1420
|
+
|
1421
|
+
final IRubyObject rubyFalse = runtime.newBoolean( false );
|
1422
|
+
if ( configValue == null || configValue.isNil() || configValue == rubyFalse ) {
|
1423
|
+
return rubyFalse;
|
1424
|
+
}
|
1425
|
+
return context.getRuntime().newBoolean( true );
|
1426
|
+
}
|
1427
|
+
|
1397
1428
|
protected final IRubyObject getConfigValue(final ThreadContext context, final String key) {
|
1398
1429
|
final IRubyObject config = callMethod(context, "config");
|
1399
1430
|
return config.callMethod(context, "[]", context.getRuntime().newSymbol(key));
|
@@ -3380,17 +3411,17 @@ public class RubyJdbcConnection extends RubyObject {
|
|
3380
3411
|
|
3381
3412
|
final IRubyObject[] args;
|
3382
3413
|
|
3383
|
-
final RubyArray cols =
|
3414
|
+
final RubyArray cols = RubyArray.newArray(runtime, columns.length);
|
3384
3415
|
|
3385
3416
|
if ( INIT_COLUMN_TYPES ) { // NOTE: NOT IMPLEMENTED
|
3386
|
-
for ( int i=0; i<columns.length; i++ ) {
|
3387
|
-
cols.
|
3417
|
+
for ( int i = 0; i < columns.length; i++ ) {
|
3418
|
+
cols.append( columns[i].name );
|
3388
3419
|
}
|
3389
3420
|
args = new IRubyObject[] { cols, rows };
|
3390
3421
|
}
|
3391
3422
|
else {
|
3392
|
-
for ( int i=0; i<columns.length; i++ ) {
|
3393
|
-
cols.
|
3423
|
+
for ( int i = 0; i < columns.length; i++ ) {
|
3424
|
+
cols.append( columns[i].name );
|
3394
3425
|
}
|
3395
3426
|
args = new IRubyObject[] { cols, rows };
|
3396
3427
|
}
|
@@ -119,11 +119,12 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
|
|
119
119
|
|
120
120
|
@Override
|
121
121
|
protected IRubyObject indexes(final ThreadContext context, String tableName, final String name, String schemaName) {
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
122
|
+
if ( tableName != null ) {
|
123
|
+
final int i = tableName.indexOf('.');
|
124
|
+
if ( i > 0 && schemaName == null ) {
|
125
|
+
schemaName = tableName.substring(0, i);
|
126
|
+
tableName = tableName.substring(i + 1);
|
127
|
+
}
|
127
128
|
}
|
128
129
|
return super.indexes(context, tableName, name, schemaName);
|
129
130
|
}
|
@@ -214,7 +215,10 @@ public class SQLite3RubyJdbcConnection extends RubyJdbcConnection {
|
|
214
215
|
@Override
|
215
216
|
@JRubyMethod(name = "create_savepoint", optional = 1)
|
216
217
|
public IRubyObject create_savepoint(final ThreadContext context, final IRubyObject[] args) {
|
217
|
-
IRubyObject name = args.length > 0 ? args[0] : null;
|
218
|
+
final IRubyObject name = args.length > 0 ? args[0] : null;
|
219
|
+
if ( name == null || name.isNil() ) {
|
220
|
+
throw new IllegalArgumentException("create_savepoint (without name) not implemented!");
|
221
|
+
}
|
218
222
|
final Connection connection = getConnection(true);
|
219
223
|
try {
|
220
224
|
connection.setAutoCommit(false);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-jdbc-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sieger, Ola Bini, Karol Bucek and JRuby contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
243
|
version: '0'
|
244
244
|
requirements: []
|
245
245
|
rubyforge_project: jruby-extras
|
246
|
-
rubygems_version: 2.
|
246
|
+
rubygems_version: 2.4.1
|
247
247
|
signing_key:
|
248
248
|
specification_version: 4
|
249
249
|
summary: JDBC adapter for ActiveRecord, for use within JRuby on Rails.
|