activerecord-jdbc-adapter 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -0
- data/Gemfile.lock +1 -1
- data/History.txt +10 -0
- data/Rakefile +5 -5
- data/lib/arel/visitors/firebird.rb +10 -3
- data/lib/arjdbc/derby/adapter.rb +0 -1
- data/lib/arjdbc/h2/adapter.rb +17 -0
- data/lib/arjdbc/hsqldb/adapter.rb +1 -2
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/type_converter.rb +2 -2
- data/lib/arjdbc/mysql/adapter.rb +34 -43
- data/lib/arjdbc/postgresql/adapter.rb +35 -1
- data/lib/arjdbc/postgresql/connection_methods.rb +1 -0
- data/lib/arjdbc/sqlite3/adapter.rb +2 -2
- data/lib/arjdbc/version.rb +1 -1
- data/rakelib/bundler_ext.rb +11 -0
- data/rakelib/compile.rake +20 -22
- data/rakelib/db.rake +21 -13
- data/rakelib/rails.rake +1 -1
- data/src/java/arjdbc/derby/DerbyModule.java +69 -67
- data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +62 -0
- data/test/db/mysql.rb +3 -3
- data/test/db/postgres.rb +3 -3
- data/test/h2_change_column_test.rb +68 -0
- data/test/helper.rb +69 -0
- data/test/mysql_simple_test.rb +16 -4
- data/test/postgres_native_type_mapping_test.rb +6 -1
- data/test/postgres_simple_test.rb +12 -6
- data/test/postgres_type_conversion_test.rb +34 -0
- data/test/simple.rb +78 -6
- data/test/sqlite3_simple_test.rb +25 -3
- metadata +8 -2
data/test/mysql_simple_test.rb
CHANGED
@@ -11,6 +11,18 @@ require 'db/mysql'
|
|
11
11
|
class MysqlSimpleTest < Test::Unit::TestCase
|
12
12
|
include SimpleTestMethods
|
13
13
|
include ActiveRecord3TestMethods
|
14
|
+
include ColumnNameQuotingTests
|
15
|
+
|
16
|
+
column_quote_char "`"
|
17
|
+
|
18
|
+
def test_column_class_instantiation
|
19
|
+
text_column = nil
|
20
|
+
assert_nothing_raised do
|
21
|
+
text_column = ActiveRecord::ConnectionAdapters::MysqlAdapter::Column.
|
22
|
+
new("title", nil, "text")
|
23
|
+
end
|
24
|
+
assert_not_nil text_column
|
25
|
+
end
|
14
26
|
|
15
27
|
def test_string_quoting_oddity
|
16
28
|
s = "0123456789a'a"
|
@@ -22,8 +34,8 @@ class MysqlSimpleTest < Test::Unit::TestCase
|
|
22
34
|
end
|
23
35
|
|
24
36
|
def test_table_name_quoting_with_dot
|
25
|
-
s = "
|
26
|
-
assert_equal "
|
37
|
+
s = "#{MYSQL_CONFIG[:database]}.posts"
|
38
|
+
assert_equal "`#{MYSQL_CONFIG[:database]}`.`posts`", ActiveRecord::Base.connection.quote_table_name(s)
|
27
39
|
end
|
28
40
|
|
29
41
|
def test_update_all_with_limit
|
@@ -34,8 +46,8 @@ class MysqlSimpleTest < Test::Unit::TestCase
|
|
34
46
|
old_entries_table_name = Entry.table_name
|
35
47
|
old_users_table_name = User.table_name
|
36
48
|
begin
|
37
|
-
User.set_table_name
|
38
|
-
Entry.set_table_name
|
49
|
+
User.set_table_name "#{MYSQL_CONFIG[:database]}.users"
|
50
|
+
Entry.set_table_name "#{MYSQL_CONFIG[:database]}.entries"
|
39
51
|
assert !Entry.all(:include => :user).empty?
|
40
52
|
ensure
|
41
53
|
Entry.set_table_name old_entries_table_name
|
@@ -16,7 +16,8 @@ class CreateNativeTypeMappingTestSchema < ActiveRecord::Migration
|
|
16
16
|
real_should_be_float real,
|
17
17
|
bool_should_be_boolean bool,
|
18
18
|
interval_should_be_string interval,
|
19
|
-
bigint_should_be_integer bigint
|
19
|
+
bigint_should_be_integer bigint,
|
20
|
+
uuid_should_be_string uuid
|
20
21
|
)}
|
21
22
|
end
|
22
23
|
|
@@ -42,6 +43,10 @@ class PostgresNativeTypeMappingTest < Test::Unit::TestCase
|
|
42
43
|
Customer.columns.detect { |c| c.name == column_name }.type
|
43
44
|
end
|
44
45
|
|
46
|
+
def test_uuid_column_should_map_to_string
|
47
|
+
assert_equal :string, column_type("uuid_should_be_string")
|
48
|
+
end
|
49
|
+
|
45
50
|
def test_bigint_serial_should_be_mapped_to_integer
|
46
51
|
assert_equal :integer, column_type("bigint_serial_should_be_integer")
|
47
52
|
end
|
@@ -10,7 +10,13 @@ require 'db/postgres'
|
|
10
10
|
class PostgresSimpleTest < Test::Unit::TestCase
|
11
11
|
include SimpleTestMethods
|
12
12
|
include ActiveRecord3TestMethods
|
13
|
+
include ColumnNameQuotingTests
|
13
14
|
|
15
|
+
def test_adapter_class_name_equals_native_adapter_class_name
|
16
|
+
classname = @connection.class.name[/[^:]*$/]
|
17
|
+
assert_equal 'PostgreSQLAdapter', classname
|
18
|
+
end
|
19
|
+
|
14
20
|
def test_multi_statement_support
|
15
21
|
results = @connection.execute "SELECT title from entries; SELECT login from users"
|
16
22
|
assert_equal 2, results.length
|
@@ -51,39 +57,39 @@ class PostgresSchemaDumperTest < Test::Unit::TestCase
|
|
51
57
|
|
52
58
|
# http://kenai.com/jira/browse/ACTIVERECORD_JDBC-135
|
53
59
|
def test_schema_dump_should_not_have_limits_on_boolean
|
54
|
-
lines = @dump.grep(/boolean/)
|
60
|
+
lines = @dump.lines.grep(/boolean/)
|
55
61
|
assert !lines.empty?
|
56
62
|
lines.each {|line| assert line !~ /limit/ }
|
57
63
|
end
|
58
64
|
|
59
65
|
|
60
66
|
def test_schema_dump_should_not_have_limits_on_binaries
|
61
|
-
lines = @dump.grep(/binary/)
|
67
|
+
lines = @dump.lines.grep(/binary/)
|
62
68
|
assert !lines.empty?, 'no binary type definitions found'
|
63
69
|
lines.each {|line| assert line !~ /limit/, 'binary definition contains limit' }
|
64
70
|
end
|
65
71
|
|
66
72
|
# http://kenai.com/jira/browse/ACTIVERECORD_JDBC-139
|
67
73
|
def test_schema_dump_should_not_have_limits_on_text_or_date
|
68
|
-
lines = @dump.grep(/date|text/)
|
74
|
+
lines = @dump.lines.grep(/date|text/)
|
69
75
|
assert !lines.empty?
|
70
76
|
lines.each {|line| assert line !~ /limit/ }
|
71
77
|
end
|
72
78
|
|
73
79
|
def test_schema_dump_integer_with_no_limit_should_have_no_limit
|
74
|
-
lines = @dump.grep(/sample_integer_no_limit/)
|
80
|
+
lines = @dump.lines.grep(/sample_integer_no_limit/)
|
75
81
|
assert !lines.empty?
|
76
82
|
lines.each {|line| assert line !~ /:limit/ }
|
77
83
|
end
|
78
84
|
|
79
85
|
def test_schema_dump_integer_with_limit_2_should_have_limit_2
|
80
|
-
lines = @dump.grep(/sample_integer_with_limit_2/)
|
86
|
+
lines = @dump.lines.grep(/sample_integer_with_limit_2/)
|
81
87
|
assert !lines.empty?
|
82
88
|
lines.each {|line| assert line =~ /limit => 2/ }
|
83
89
|
end
|
84
90
|
|
85
91
|
def test_schema_dump_integer_with_limit_8_should_have_limit_8
|
86
|
-
lines = @dump.grep(/sample_integer_with_limit_8/)
|
92
|
+
lines = @dump.lines.grep(/sample_integer_with_limit_8/)
|
87
93
|
assert !lines.empty?
|
88
94
|
lines.each {|line| assert line =~ /limit => 8/ }
|
89
95
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'jdbc_common'
|
2
|
+
require 'db/postgres'
|
3
|
+
|
4
|
+
class BooleanSchema < ActiveRecord::Migration
|
5
|
+
def self.up
|
6
|
+
create_table :booleans do |t|
|
7
|
+
t.boolean :value, :default => false, :null => false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :booleans
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Boolean < ActiveRecord::Base
|
17
|
+
end
|
18
|
+
|
19
|
+
class PostgresTypeConversionTest < Test::Unit::TestCase
|
20
|
+
def setup
|
21
|
+
BooleanSchema.up
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
BooleanSchema.down
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_handle_bool_conversion_with_boolean_relation
|
29
|
+
assert_nothing_raised do
|
30
|
+
ActiveRecord::Base.connection.raw_connection.set_native_database_types
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/test/simple.rb
CHANGED
@@ -43,6 +43,58 @@ module FixtureSetup
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
module ColumnNameQuotingTests
|
47
|
+
def self.included(base)
|
48
|
+
base.class_eval do
|
49
|
+
@@column_quote_char = "\""
|
50
|
+
|
51
|
+
def self.column_quote_char(char)
|
52
|
+
@@column_quote_char = char
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_column_names_are_escaped
|
58
|
+
conn = ActiveRecord::Base.connection
|
59
|
+
quoted = conn.quote_column_name "foo#{column_quote_char}bar"
|
60
|
+
assert_equal "#{column_quote_char}foo#{column_quote_char * 2}bar#{column_quote_char}", quoted
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
def column_quote_char
|
65
|
+
@@column_quote_char || "\""
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module DirtyAttributeTests
|
70
|
+
def test_partial_update
|
71
|
+
entry = Entry.new(:title => 'foo')
|
72
|
+
old_updated_on = 1.hour.ago.beginning_of_day
|
73
|
+
|
74
|
+
with_partial_updates Entry, false do
|
75
|
+
assert_queries(2) { 2.times { entry.save! } }
|
76
|
+
Entry.update_all({ :updated_on => old_updated_on }, :id => entry.id)
|
77
|
+
end
|
78
|
+
|
79
|
+
with_partial_updates Entry, true do
|
80
|
+
assert_queries(0) { 2.times { entry.save! } }
|
81
|
+
assert_equal old_updated_on, entry.reload.updated_on
|
82
|
+
|
83
|
+
assert_queries(1) { entry.title = 'bar'; entry.save! }
|
84
|
+
assert_not_equal old_updated_on, entry.reload.updated_on
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
def with_partial_updates(klass, on = true)
|
90
|
+
old = klass.partial_updates?
|
91
|
+
klass.partial_updates = on
|
92
|
+
yield
|
93
|
+
ensure
|
94
|
+
klass.partial_updates = old
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
46
98
|
module SimpleTestMethods
|
47
99
|
include FixtureSetup
|
48
100
|
|
@@ -228,11 +280,11 @@ module SimpleTestMethods
|
|
228
280
|
# so they all have a initial value of an empty string ''
|
229
281
|
assert_equal(nil, e.sample_text) unless ActiveRecord::Base.connection.adapter_name =~ /oracle/i
|
230
282
|
|
231
|
-
e.sample_text = "ooop"
|
283
|
+
e.sample_text = "ooop?"
|
232
284
|
e.save!
|
233
285
|
|
234
286
|
e = DbType.find(:first)
|
235
|
-
assert_equal("ooop", e.sample_text)
|
287
|
+
assert_equal("ooop?", e.sample_text)
|
236
288
|
end
|
237
289
|
|
238
290
|
def test_string
|
@@ -240,11 +292,11 @@ module SimpleTestMethods
|
|
240
292
|
|
241
293
|
# An empty string is treated as a null value in Oracle: http://www.techonthenet.com/oracle/questions/empty_null.php
|
242
294
|
assert_equal('', e.sample_string) unless ActiveRecord::Base.connection.adapter_name =~ /oracle/i
|
243
|
-
e.sample_string = "ooop"
|
295
|
+
e.sample_string = "ooop?"
|
244
296
|
e.save!
|
245
297
|
|
246
298
|
e = DbType.find(:first)
|
247
|
-
assert_equal("ooop", e.sample_string)
|
299
|
+
assert_equal("ooop?", e.sample_string)
|
248
300
|
end
|
249
301
|
|
250
302
|
def test_save_binary
|
@@ -259,8 +311,28 @@ module SimpleTestMethods
|
|
259
311
|
|
260
312
|
def test_default_decimal_should_keep_fractional_part
|
261
313
|
expected = 7.3
|
262
|
-
|
263
|
-
|
314
|
+
db_type = DbType.new(:sample_small_decimal => expected)
|
315
|
+
assert db_type.save
|
316
|
+
db_type = DbType.find(db_type.id)
|
317
|
+
assert_equal BigDecimal.new(expected.to_s), db_type.sample_small_decimal
|
318
|
+
end
|
319
|
+
|
320
|
+
def test_decimal_with_scale
|
321
|
+
test_value = 7.3
|
322
|
+
db_type = DbType.new(:sample_small_decimal => test_value)
|
323
|
+
assert db_type.save
|
324
|
+
db_type = DbType.find(db_type.id)
|
325
|
+
assert_kind_of BigDecimal, db_type.sample_small_decimal
|
326
|
+
assert_equal BigDecimal.new(test_value.to_s), db_type.sample_small_decimal
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_decimal_with_zero_scale
|
330
|
+
test_value = 7000.0
|
331
|
+
db_type = DbType.new(:sample_decimal => test_value)
|
332
|
+
assert db_type.save
|
333
|
+
db_type = DbType.find(db_type.id)
|
334
|
+
assert_kind_of Integer, db_type.sample_decimal
|
335
|
+
assert_equal test_value.to_i, db_type.sample_decimal
|
264
336
|
end
|
265
337
|
|
266
338
|
def test_negative_default_value
|
data/test/sqlite3_simple_test.rb
CHANGED
@@ -6,6 +6,8 @@ require 'models/validates_uniqueness_of_string'
|
|
6
6
|
class SQLite3SimpleTest < Test::Unit::TestCase
|
7
7
|
include SimpleTestMethods
|
8
8
|
include ActiveRecord3TestMethods
|
9
|
+
include ColumnNameQuotingTests
|
10
|
+
include DirtyAttributeTests
|
9
11
|
|
10
12
|
def test_recreate_database
|
11
13
|
assert @connection.tables.include?(Entry.table_name)
|
@@ -30,7 +32,7 @@ class SQLite3SimpleTest < Test::Unit::TestCase
|
|
30
32
|
|
31
33
|
def test_columns
|
32
34
|
cols = ActiveRecord::Base.connection.columns("entries")
|
33
|
-
assert cols.find {|col| col.name == "title"}
|
35
|
+
assert cols.find {|col| col.name == "title"}
|
34
36
|
end
|
35
37
|
|
36
38
|
def test_remove_column
|
@@ -136,9 +138,9 @@ class SQLite3SimpleTest < Test::Unit::TestCase
|
|
136
138
|
col = cols.find{|col| col.name == "test_column_default"}
|
137
139
|
assert col
|
138
140
|
assert_equal col.default, nil
|
139
|
-
|
141
|
+
|
140
142
|
end
|
141
|
-
|
143
|
+
|
142
144
|
def test_change_column_default
|
143
145
|
assert_nothing_raised do
|
144
146
|
ActiveRecord::Schema.define do
|
@@ -218,6 +220,14 @@ class SQLite3TypeConversionTest < Test::Unit::TestCase
|
|
218
220
|
:sample_decimal => JInteger::MAX_VALUE + 1,
|
219
221
|
:sample_small_decimal => 3.14,
|
220
222
|
:sample_binary => TEST_BINARY)
|
223
|
+
DbType.create(
|
224
|
+
:sample_timestamp => TEST_TIME,
|
225
|
+
:sample_datetime => TEST_TIME,
|
226
|
+
:sample_time => TEST_TIME,
|
227
|
+
:sample_date => TEST_TIME,
|
228
|
+
:sample_decimal => JInteger::MAX_VALUE + 1,
|
229
|
+
:sample_small_decimal => 1.0,
|
230
|
+
:sample_binary => TEST_BINARY)
|
221
231
|
end
|
222
232
|
|
223
233
|
def teardown
|
@@ -244,4 +254,16 @@ class SQLite3TypeConversionTest < Test::Unit::TestCase
|
|
244
254
|
assert_equal(TEST_BINARY, types.sample_binary)
|
245
255
|
end
|
246
256
|
|
257
|
+
def test_small_decimal
|
258
|
+
types = DbType.find(:all, :order => ["sample_small_decimal desc"])
|
259
|
+
assert_equal(3.14, types[0].sample_small_decimal)
|
260
|
+
assert_equal(1.0, types[1].sample_small_decimal)
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_small_decimal_with_ordering
|
264
|
+
types = DbType.find(:all, :order => ["sample_small_decimal asc"])
|
265
|
+
types[1].sample_small_decimal
|
266
|
+
assert_equal(1.0, types[0].sample_small_decimal)
|
267
|
+
assert_equal(3.14, types[1].sample_small_decimal)
|
268
|
+
end
|
247
269
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: activerecord-jdbc-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.2.
|
5
|
+
version: 1.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nick Sieger, Ola Bini and JRuby contributors
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-11-23 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: |-
|
@@ -26,6 +26,7 @@ extra_rdoc_files: []
|
|
26
26
|
|
27
27
|
files:
|
28
28
|
- .gitignore
|
29
|
+
- .travis.yml
|
29
30
|
- Gemfile
|
30
31
|
- Gemfile.lock
|
31
32
|
- History.txt
|
@@ -137,6 +138,7 @@ files:
|
|
137
138
|
- rails_generators/jdbc_generator.rb
|
138
139
|
- rails_generators/templates/config/initializers/jdbc.rb
|
139
140
|
- rails_generators/templates/lib/tasks/jdbc.rake
|
141
|
+
- rakelib/bundler_ext.rb
|
140
142
|
- rakelib/compile.rake
|
141
143
|
- rakelib/db.rake
|
142
144
|
- rakelib/rails.rake
|
@@ -178,6 +180,7 @@ files:
|
|
178
180
|
- test/derby_multibyte_test.rb
|
179
181
|
- test/derby_simple_test.rb
|
180
182
|
- test/generic_jdbc_connection_test.rb
|
183
|
+
- test/h2_change_column_test.rb
|
181
184
|
- test/h2_simple_test.rb
|
182
185
|
- test/has_many_through.rb
|
183
186
|
- test/helper.rb
|
@@ -220,6 +223,7 @@ files:
|
|
220
223
|
- test/postgres_schema_search_path_test.rb
|
221
224
|
- test/postgres_simple_test.rb
|
222
225
|
- test/postgres_table_alias_length_test.rb
|
226
|
+
- test/postgres_type_conversion_test.rb
|
223
227
|
- test/simple.rb
|
224
228
|
- test/sqlite3_simple_test.rb
|
225
229
|
- test/sybase_jtds_simple_test.rb
|
@@ -281,6 +285,7 @@ test_files:
|
|
281
285
|
- test/derby_multibyte_test.rb
|
282
286
|
- test/derby_simple_test.rb
|
283
287
|
- test/generic_jdbc_connection_test.rb
|
288
|
+
- test/h2_change_column_test.rb
|
284
289
|
- test/h2_simple_test.rb
|
285
290
|
- test/has_many_through.rb
|
286
291
|
- test/helper.rb
|
@@ -323,6 +328,7 @@ test_files:
|
|
323
328
|
- test/postgres_schema_search_path_test.rb
|
324
329
|
- test/postgres_simple_test.rb
|
325
330
|
- test/postgres_table_alias_length_test.rb
|
331
|
+
- test/postgres_type_conversion_test.rb
|
326
332
|
- test/simple.rb
|
327
333
|
- test/sqlite3_simple_test.rb
|
328
334
|
- test/sybase_jtds_simple_test.rb
|