activerecord-jdbc-adapter 0.9.3-java → 0.9.4-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.
@@ -1,3 +1,14 @@
1
+ == 0.9.4
2
+
3
+ - ACTIVERECORD_JDBC-96: DB2 JdbcSpec cannot dump schema correctly
4
+ (Youhei Kondou)
5
+ - ACTIVERECORD_JDBC-97: Dont use Rails 3 deprecated constants (David
6
+ Calavera)
7
+ - Updates for rake db:schema:dump compatibility with Rails 2.3+ and
8
+ MySQL (Joakim Kolsj�)
9
+ - Rails 3.0.0.beta2 compatibility
10
+ - Return of Derby, H2, Hsqldb support (requires AR >= 3.0.0.beta2)
11
+
1
12
  == 0.9.3
2
13
 
3
14
  - Rails 3 compatibility
@@ -3,6 +3,7 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  LICENSE.txt
6
+ lib/activerecord-jdbc-adapter.rb
6
7
  lib/jdbc_adapter.rb
7
8
  lib/pg.rb
8
9
  lib/active_record/connection_adapters/cachedb_adapter.rb
@@ -17,6 +18,11 @@ lib/active_record/connection_adapters/mysql_adapter.rb
17
18
  lib/active_record/connection_adapters/oracle_adapter.rb
18
19
  lib/active_record/connection_adapters/postgresql_adapter.rb
19
20
  lib/active_record/connection_adapters/sqlite3_adapter.rb
21
+ lib/arel/engines/sql/compilers/db2_compiler.rb
22
+ lib/arel/engines/sql/compilers/derby_compiler.rb
23
+ lib/arel/engines/sql/compilers/h2_compiler.rb
24
+ lib/arel/engines/sql/compilers/hsqldb_compiler.rb
25
+ lib/arel/engines/sql/compilers/jdbc_compiler.rb
20
26
  lib/generators/jdbc/jdbc_generator.rb
21
27
  lib/jdbc_adapter/jdbc_cachedb.rb
22
28
  lib/jdbc_adapter/jdbc_db2.rb
@@ -32,6 +38,7 @@ lib/jdbc_adapter/jdbc_postgre.rb
32
38
  lib/jdbc_adapter/jdbc_sqlite3.rb
33
39
  lib/jdbc_adapter/jdbc_sybase.rb
34
40
  lib/jdbc_adapter/missing_functionality_helper.rb
41
+ lib/jdbc_adapter/railtie.rb
35
42
  lib/jdbc_adapter/rake_tasks.rb
36
43
  lib/jdbc_adapter/tsql_helper.rb
37
44
  lib/jdbc_adapter/version.rb
@@ -55,6 +62,7 @@ test/manualTestDatabase.rb
55
62
  test/minirunit.rb
56
63
  test/mssql_simple_test.rb
57
64
  test/mysql_db_create_test.rb
65
+ test/mysql_info_test.rb
58
66
  test/mysql_multibyte_test.rb
59
67
  test/mysql_nonstandard_primary_key_test.rb
60
68
  test/mysql_simple_test.rb
@@ -61,14 +61,15 @@ end
61
61
  module ActiveRecord
62
62
  class Base
63
63
  extend JdbcSpec::ActiveRecordExtensions
64
-
65
- alias :attributes_with_quotes_pre_oracle :attributes_with_quotes
66
- def attributes_with_quotes(include_primary_key = true, *args) #:nodoc:
67
- aq = attributes_with_quotes_pre_oracle(include_primary_key, *args)
68
- if connection.class == ConnectionAdapters::JdbcAdapter && (connection.is_a?(JdbcSpec::Oracle) || connection.is_a?(JdbcSpec::Mimer))
69
- aq[self.class.primary_key] = "?" if include_primary_key && aq[self.class.primary_key].nil?
64
+ if respond_to?(:attributes_with_quotes)
65
+ alias :attributes_with_quotes_pre_oracle :attributes_with_quotes
66
+ def attributes_with_quotes(include_primary_key = true, *args) #:nodoc:
67
+ aq = attributes_with_quotes_pre_oracle(include_primary_key, *args)
68
+ if connection.class == ConnectionAdapters::JdbcAdapter && (connection.is_a?(JdbcSpec::Oracle) || connection.is_a?(JdbcSpec::Mimer))
69
+ aq[self.class.primary_key] = "?" if include_primary_key && aq[self.class.primary_key].nil?
70
+ end
71
+ aq
70
72
  end
71
- aq
72
73
  end
73
74
  end
74
75
 
@@ -620,13 +621,16 @@ module ActiveRecord
620
621
  end
621
622
 
622
623
  def pk_and_sequence_for(table)
623
- result_set = @connection.connection.get_meta_data.get_primary_keys(nil, nil, table)
624
- if result_set.next
625
- keys = [result_set.getString("COLUMN_NAME"), nil]
626
- end
627
- keys.blank? ? nil : keys
628
- ensure
629
- result_set.close
624
+ key = primary_key(table)
625
+ [key, nil] if key
626
+ end
627
+
628
+ def primary_key(table)
629
+ primary_keys(table).first
630
+ end
631
+
632
+ def primary_keys(table)
633
+ @connection.primary_keys(table)
630
634
  end
631
635
 
632
636
  private
@@ -0,0 +1,6 @@
1
+ require 'jdbc_adapter'
2
+ begin
3
+ require 'jdbc_adapter/railtie'
4
+ rescue LoadError
5
+ # Assume we don't have railties in this version of AR
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'arel/engines/sql/compilers/ibm_db_compiler'
2
+
3
+ module Arel
4
+ module SqlCompiler
5
+ class DB2Compiler < IBM_DBCompiler
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class DerbyCompiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class H2Compiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class HsqldbCompiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class JDBCCompiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -16,6 +16,11 @@ module JdbcSpec
16
16
  end }]
17
17
  end
18
18
 
19
+ def self.extended(obj)
20
+ # Ignore these 4 system tables
21
+ ActiveRecord::SchemaDumper.ignore_tables |= %w{hmon_atm_info hmon_collection policy stmg_dbsize_info}
22
+ end
23
+
19
24
  module Column
20
25
  def type_cast(value)
21
26
  return nil if value.nil? || value =~ /^\s*null\s*$/i
@@ -69,6 +74,10 @@ module JdbcSpec
69
74
  tp
70
75
  end
71
76
 
77
+ def adapter_name
78
+ 'DB2'
79
+ end
80
+
72
81
  def add_limit_offset!(sql, options)
73
82
  if limit = options[:limit]
74
83
  offset = options[:offset] || 0
@@ -77,6 +86,16 @@ module JdbcSpec
77
86
  end
78
87
  end
79
88
 
89
+ def pk_and_sequence_for(table)
90
+ # In JDBC/DB2 side, only upcase names of table and column are handled.
91
+ keys = super(table.upcase)
92
+ if keys[0]
93
+ # In ActiveRecord side, only downcase names of table and column are handled.
94
+ keys[0] = keys[0].downcase
95
+ end
96
+ keys
97
+ end
98
+
80
99
  def quote_column_name(column_name)
81
100
  column_name
82
101
  end
@@ -121,10 +121,6 @@ module ::JdbcSpec
121
121
  end
122
122
  end
123
123
 
124
- def primary_key(table_name) #:nodoc:
125
- primary_keys(table_name).first
126
- end
127
-
128
124
  def remove_index(table_name, options) #:nodoc:
129
125
  execute "DROP INDEX #{index_name(table_name, options)}"
130
126
  end
@@ -38,6 +38,8 @@ module ::JdbcSpec
38
38
  :text
39
39
  when /tinyint/i
40
40
  :boolean
41
+ when /real/i
42
+ :float
41
43
  else
42
44
  super(field_type)
43
45
  end
@@ -61,7 +63,7 @@ module ::JdbcSpec
61
63
  end
62
64
 
63
65
  def adapter_name #:nodoc:
64
- defined?(::Jdbc::H2) ? 'h2' : 'hsqldb'
66
+ defined?(::Jdbc::H2) ? 'H2' : 'Hsqldb'
65
67
  end
66
68
 
67
69
  def modify_types(tp)
@@ -90,7 +92,8 @@ module ::JdbcSpec
90
92
  "''"
91
93
  elsif column && column.type == :binary
92
94
  "'#{value.unpack("H*")}'"
93
- elsif column.respond_to?(:primary) && column.primary && column.klass != String
95
+ elsif column && (column.type == :integer ||
96
+ column.respond_to?(:primary) && column.primary && column.klass != String)
94
97
  value.to_i.to_s
95
98
  else
96
99
  "'#{quote_string(value)}'"
@@ -71,6 +71,10 @@ module ::JdbcSpec
71
71
  tp
72
72
  end
73
73
 
74
+ def adapter_name #:nodoc:
75
+ 'mysql'
76
+ end
77
+
74
78
  # QUOTING ==================================================
75
79
 
76
80
  def quote(value, column = nil)
@@ -136,7 +140,7 @@ module ::JdbcSpec
136
140
  select_all(sql).inject("") do |structure, table|
137
141
  table.delete('Table_type')
138
142
 
139
- hash = select_one("SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}")
143
+ hash = show_create_table(table.to_a.first.last)
140
144
 
141
145
  if(table = hash["Create Table"])
142
146
  structure += table + ";\n\n"
@@ -229,6 +233,10 @@ module ::JdbcSpec
229
233
  end
230
234
 
231
235
  private
236
+ def show_create_table(table)
237
+ select_one("SHOW CREATE TABLE #{quote_table_name(table)}")
238
+ end
239
+
232
240
  def supports_views?
233
241
  false
234
242
  end
@@ -101,7 +101,7 @@ module ::JdbcSpec
101
101
  end
102
102
 
103
103
  def adapter_name
104
- 'oracle'
104
+ 'Oracle'
105
105
  end
106
106
 
107
107
  def table_alias_length
@@ -95,6 +95,10 @@ module ::JdbcSpec
95
95
  tp
96
96
  end
97
97
 
98
+ def adapter_name #:nodoc:
99
+ 'PostgreSQL'
100
+ end
101
+
98
102
  def postgresql_version
99
103
  @postgresql_version ||=
100
104
  begin
@@ -202,7 +206,7 @@ module ::JdbcSpec
202
206
  # If that fails, try parsing the primary key's default value.
203
207
  # Support the 7.x and 8.0 nextval('foo'::text) as well as
204
208
  # the 8.1+ nextval('foo'::regclass).
205
- result = query(<<-end_sql, 'PK and custom sequence')[0]
209
+ result = select(<<-end_sql, 'PK and custom sequence')[0]
206
210
  SELECT attr.attname,
207
211
  CASE
208
212
  WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN
@@ -320,6 +324,23 @@ module ::JdbcSpec
320
324
  execute "DROP DATABASE \"#{name}\""
321
325
  end
322
326
 
327
+ def create_schema(schema_name, pg_username)
328
+ execute("CREATE SCHEMA \"#{schema_name}\" AUTHORIZATION \"#{pg_username}\"")
329
+ end
330
+
331
+ def drop_schema(schema_name)
332
+ execute("DROP SCHEMA \"#{schema_name}\"")
333
+ end
334
+
335
+ def all_schemas
336
+ select('select nspname from pg_namespace').map {|r| r["nspname"] }
337
+ end
338
+
339
+ def primary_key(table)
340
+ pk_and_sequence = pk_and_sequence_for(table)
341
+ pk_and_sequence && pk_and_sequence.first
342
+ end
343
+
323
344
  def structure_dump
324
345
  database = @config[:database]
325
346
  if database.nil?
@@ -21,8 +21,10 @@ module ::JdbcSpec
21
21
  # Allow database path relative to RAILS_ROOT, but only if
22
22
  # the database path is not the special path that tells
23
23
  # Sqlite to build a database only in memory.
24
- if Object.const_defined?(:RAILS_ROOT) && ':memory:' != config[:database]
25
- config[:database] = File.expand_path(config[:database], RAILS_ROOT)
24
+ rails_root_defined = defined?(Rails.root) || Object.const_defined?(:RAILS_ROOT)
25
+ if rails_root_defined && ':memory:' != config[:database]
26
+ rails_root = defined?(Rails.root) ? Rails.root : RAILS_ROOT
27
+ config[:database] = File.expand_path(config[:database], rails_root)
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,9 @@
1
+ require 'rails/railtie'
2
+
3
+ module ::JdbcSpec
4
+ class Railtie < ::Rails::Railtie
5
+ rake_tasks do
6
+ load File.expand_path('../rake_tasks.rb', __FILE__)
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module JdbcAdapter
2
2
  module Version
3
- VERSION = "0.9.3"
3
+ VERSION = "0.9.4"
4
4
  end
5
5
  end
@@ -43,6 +43,7 @@ end
43
43
  %w(test package install_gem release clean).each do |task|
44
44
  desc "Run rake #{task} on all available adapters and drivers"
45
45
  task "all:#{task}" => task
46
+ task "adapters:#{task}" => task
46
47
  end
47
48
 
48
49
  (Dir["drivers/*/Rakefile"] + Dir["adapters/*/Rakefile"]).each do |rakefile|
@@ -1,14 +1,9 @@
1
1
  require File.expand_path('../../test/helper', __FILE__)
2
2
  if defined?(JRUBY_VERSION)
3
- databases = [:test_mysql, :test_jdbc, :test_sqlite3]
3
+ databases = [:test_mysql, :test_jdbc, :test_sqlite3, :test_derby, :test_hsqldb, :test_h2]
4
4
  if find_executable?("psql") && `psql -c '\\l'` && $?.exitstatus == 0
5
5
  databases << :test_postgres
6
6
  end
7
- require File.expand_path('../../test/pick_rails_version', __FILE__)
8
- if ActiveRecord::VERSION::MAJOR < 3
9
- # These databases not working with Rails3/Arel yet
10
- databases += [:test_derby, :test_hsqldb, :test_h2]
11
- end
12
7
  task :test => databases
13
8
  else
14
9
  task :test => [:test_mysql]
@@ -0,0 +1,62 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+
4
+ class DBSetup < ActiveRecord::Migration
5
+
6
+ def self.up
7
+ create_table :books do |t|
8
+ t.string :title
9
+ end
10
+
11
+ create_table :cars, :primary_key => 'legacy_id' do |t|
12
+ t.string :name
13
+ end
14
+
15
+ create_table :cats, :id => false do |t|
16
+ t.string :name
17
+ end
18
+
19
+ end
20
+
21
+ def self.down
22
+ drop_table :books
23
+ drop_table :cars
24
+ drop_table :cats
25
+ end
26
+
27
+ end
28
+
29
+ class MysqlInfoTest < Test::Unit::TestCase
30
+
31
+ def setup
32
+ DBSetup.up
33
+ @connection = ActiveRecord::Base.connection
34
+ end
35
+
36
+ def teardown
37
+ DBSetup.down
38
+ end
39
+
40
+ ## primary_key
41
+ def test_should_return_the_primary_key_of_a_table
42
+ assert_equal 'id', @connection.primary_key('books')
43
+ end
44
+
45
+ def test_should_be_able_to_return_a_custom_primary_key
46
+ assert_equal 'legacy_id', @connection.primary_key('cars')
47
+ end
48
+
49
+ def test_should_return_nil_for_a_table_without_a_primary_key
50
+ assert_nil @connection.primary_key('cats')
51
+ end
52
+
53
+ ## structure_dump
54
+ def test_should_include_the_tables_in_a_structure_dump
55
+ # TODO: Improve these tests, I added this one because no other tests exists for this method.
56
+ dump = @connection.structure_dump
57
+ assert dump.include?('CREATE TABLE `books`')
58
+ assert dump.include?('CREATE TABLE `cars`')
59
+ assert dump.include?('CREATE TABLE `cats`')
60
+ end
61
+
62
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 9
8
- - 3
9
- version: 0.9.3
8
+ - 4
9
+ version: 0.9.4
10
10
  platform: java
11
11
  authors:
12
12
  - Nick Sieger, Ola Bini and JRuby contributors
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-02-23 00:00:00 -06:00
17
+ date: 2010-04-05 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -38,6 +38,7 @@ files:
38
38
  - README.txt
39
39
  - Rakefile
40
40
  - LICENSE.txt
41
+ - lib/activerecord-jdbc-adapter.rb
41
42
  - lib/jdbc_adapter.rb
42
43
  - lib/pg.rb
43
44
  - lib/active_record/connection_adapters/cachedb_adapter.rb
@@ -52,6 +53,11 @@ files:
52
53
  - lib/active_record/connection_adapters/oracle_adapter.rb
53
54
  - lib/active_record/connection_adapters/postgresql_adapter.rb
54
55
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
56
+ - lib/arel/engines/sql/compilers/db2_compiler.rb
57
+ - lib/arel/engines/sql/compilers/derby_compiler.rb
58
+ - lib/arel/engines/sql/compilers/h2_compiler.rb
59
+ - lib/arel/engines/sql/compilers/hsqldb_compiler.rb
60
+ - lib/arel/engines/sql/compilers/jdbc_compiler.rb
55
61
  - lib/generators/jdbc/jdbc_generator.rb
56
62
  - lib/jdbc_adapter/jdbc_cachedb.rb
57
63
  - lib/jdbc_adapter/jdbc_db2.rb
@@ -67,6 +73,7 @@ files:
67
73
  - lib/jdbc_adapter/jdbc_sqlite3.rb
68
74
  - lib/jdbc_adapter/jdbc_sybase.rb
69
75
  - lib/jdbc_adapter/missing_functionality_helper.rb
76
+ - lib/jdbc_adapter/railtie.rb
70
77
  - lib/jdbc_adapter/rake_tasks.rb
71
78
  - lib/jdbc_adapter/tsql_helper.rb
72
79
  - lib/jdbc_adapter/version.rb
@@ -90,6 +97,7 @@ files:
90
97
  - test/minirunit.rb
91
98
  - test/mssql_simple_test.rb
92
99
  - test/mysql_db_create_test.rb
100
+ - test/mysql_info_test.rb
93
101
  - test/mysql_multibyte_test.rb
94
102
  - test/mysql_nonstandard_primary_key_test.rb
95
103
  - test/mysql_simple_test.rb