activerecord-jdbc-adapter 0.9.7-java → 1.0.0.beta1-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.
Files changed (123) hide show
  1. data/History.txt +11 -0
  2. data/Manifest.txt +71 -38
  3. data/lib/active_record/connection_adapters/cachedb_adapter.rb +1 -1
  4. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -13
  5. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -13
  6. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -13
  7. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -1
  8. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -661
  9. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -1
  10. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -13
  11. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -13
  12. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -1
  13. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -13
  14. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -13
  15. data/lib/activerecord-jdbc-adapter.rb +2 -2
  16. data/lib/arjdbc.rb +29 -0
  17. data/lib/arjdbc/cachedb.rb +3 -0
  18. data/lib/arjdbc/cachedb/adapter.rb +20 -0
  19. data/lib/arjdbc/cachedb/connection_methods.rb +10 -0
  20. data/lib/arjdbc/db2.rb +2 -0
  21. data/lib/{jdbc_adapter/jdbc_db2.rb → arjdbc/db2/adapter.rb} +1 -17
  22. data/lib/arjdbc/derby.rb +7 -0
  23. data/lib/{jdbc_adapter/jdbc_derby.rb → arjdbc/derby/adapter.rb} +8 -26
  24. data/lib/arjdbc/derby/connection_methods.rb +18 -0
  25. data/lib/arjdbc/discover.rb +99 -0
  26. data/lib/arjdbc/firebird.rb +2 -0
  27. data/lib/{jdbc_adapter/jdbc_firebird.rb → arjdbc/firebird/adapter.rb} +12 -16
  28. data/lib/arjdbc/h2.rb +4 -0
  29. data/lib/arjdbc/h2/adapter.rb +15 -0
  30. data/lib/arjdbc/h2/connection_methods.rb +12 -0
  31. data/lib/arjdbc/hsqldb.rb +4 -0
  32. data/lib/{jdbc_adapter/jdbc_hsqldb.rb → arjdbc/hsqldb/adapter.rb} +6 -58
  33. data/lib/arjdbc/hsqldb/connection_methods.rb +14 -0
  34. data/lib/arjdbc/informix.rb +3 -0
  35. data/lib/{jdbc_adapter/jdbc_informix.rb → arjdbc/informix/adapter.rb} +6 -19
  36. data/lib/arjdbc/informix/connection_methods.rb +10 -0
  37. data/lib/arjdbc/jdbc.rb +2 -0
  38. data/lib/arjdbc/jdbc/adapter.rb +235 -0
  39. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  40. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  41. data/lib/arjdbc/jdbc/column.rb +38 -0
  42. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  43. data/lib/arjdbc/jdbc/connection.rb +97 -0
  44. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  45. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  46. data/lib/arjdbc/jdbc/discover.rb +18 -0
  47. data/lib/arjdbc/jdbc/driver.rb +44 -0
  48. data/lib/arjdbc/jdbc/extension.rb +47 -0
  49. data/lib/arjdbc/jdbc/java.rb +14 -0
  50. data/lib/{jdbc_adapter → arjdbc/jdbc}/jdbc.rake +0 -0
  51. data/lib/{jdbc_adapter → arjdbc/jdbc}/missing_functionality_helper.rb +5 -5
  52. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  53. data/lib/{jdbc_adapter → arjdbc/jdbc}/railtie.rb +1 -1
  54. data/lib/{jdbc_adapter → arjdbc/jdbc}/rake_tasks.rb +0 -0
  55. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  56. data/lib/arjdbc/jdbc/type_converter.rb +119 -0
  57. data/lib/arjdbc/mimer.rb +2 -0
  58. data/lib/{jdbc_adapter/jdbc_mimer.rb → arjdbc/mimer/adapter.rb} +16 -19
  59. data/lib/arjdbc/mssql.rb +4 -0
  60. data/lib/{jdbc_adapter/jdbc_mssql.rb → arjdbc/mssql/adapter.rb} +19 -31
  61. data/lib/arjdbc/mssql/connection_methods.rb +13 -0
  62. data/lib/{jdbc_adapter → arjdbc/mssql}/tsql_helper.rb +1 -1
  63. data/lib/arjdbc/mysql.rb +4 -0
  64. data/lib/arjdbc/mysql/adapter.rb +388 -0
  65. data/lib/arjdbc/mysql/connection_methods.rb +26 -0
  66. data/lib/arjdbc/oracle.rb +3 -0
  67. data/lib/{jdbc_adapter/jdbc_oracle.rb → arjdbc/oracle/adapter.rb} +9 -17
  68. data/lib/arjdbc/oracle/connection_methods.rb +11 -0
  69. data/lib/arjdbc/postgresql.rb +4 -0
  70. data/lib/{jdbc_adapter/jdbc_postgre.rb → arjdbc/postgresql/adapter.rb} +7 -36
  71. data/lib/arjdbc/postgresql/connection_methods.rb +21 -0
  72. data/lib/arjdbc/sqlite3.rb +4 -0
  73. data/lib/{jdbc_adapter/jdbc_sqlite3.rb → arjdbc/sqlite3/adapter.rb} +106 -104
  74. data/lib/arjdbc/sqlite3/connection_methods.rb +33 -0
  75. data/lib/arjdbc/sybase.rb +2 -0
  76. data/lib/arjdbc/sybase/adapter.rb +46 -0
  77. data/lib/arjdbc/version.rb +8 -0
  78. data/lib/jdbc_adapter.rb +2 -27
  79. data/lib/jdbc_adapter/version.rb +3 -5
  80. data/rails_generators/templates/config/initializers/jdbc.rb +1 -1
  81. data/rakelib/compile.rake +3 -2
  82. data/rakelib/package.rake +3 -3
  83. data/src/java/{jdbc_adapter/JdbcDerbySpec.java → arjdbc/derby/DerbyModule.java} +32 -32
  84. data/src/java/{jdbc_adapter/JdbcAdapterInternalService.java → arjdbc/jdbc/AdapterJavaService.java} +13 -7
  85. data/src/java/{jdbc_adapter → arjdbc/jdbc}/JdbcConnectionFactory.java +6 -6
  86. data/src/java/{jdbc_adapter → arjdbc/jdbc}/RubyJdbcConnection.java +91 -16
  87. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  88. data/src/java/{jdbc_adapter → arjdbc/mssql}/MssqlRubyJdbcConnection.java +5 -2
  89. data/src/java/{jdbc_adapter/JdbcMySQLSpec.java → arjdbc/mysql/MySQLModule.java} +12 -12
  90. data/src/java/{jdbc_adapter/PostgresRubyJdbcConnection.java → arjdbc/postgresql/PostgresqlRubyJdbcConnection.java} +11 -9
  91. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +64 -0
  92. data/test/abstract_db_create.rb +4 -1
  93. data/test/activerecord/connection_adapters/type_conversion_test.rb +1 -1
  94. data/test/db/cachedb.rb +0 -0
  95. data/test/db/derby.rb +12 -14
  96. data/test/db/hsqldb.rb +3 -2
  97. data/test/db/jndi_config.rb +4 -4
  98. data/test/db/sqlite3.rb +2 -6
  99. data/test/db2_simple_test.rb +23 -0
  100. data/test/derby_migration_test.rb +50 -3
  101. data/test/jdbc_common.rb +1 -1
  102. data/test/jndi_callbacks_test.rb +1 -0
  103. data/test/postgres_nonseq_pkey_test.rb +0 -2
  104. data/test/postgres_schema_search_path_test.rb +0 -2
  105. data/test/simple.rb +3 -3
  106. data/test/sybase_jtds_simple_test.rb +22 -0
  107. metadata +82 -46
  108. data/lib/active_record/connection_adapters/jdbc_adapter_spec.rb +0 -26
  109. data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
  110. data/lib/jdbc_adapter/jdbc_cachedb.rb +0 -33
  111. data/lib/jdbc_adapter/jdbc_mysql.rb +0 -260
  112. data/lib/jdbc_adapter/jdbc_sybase.rb +0 -50
  113. data/src/java/jdbc_adapter/SQLBlock.java +0 -27
  114. data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +0 -41
  115. data/test/jdbc_adapter/jdbc_db2_test.rb +0 -26
  116. data/test/jdbc_adapter/jdbc_sybase_test.rb +0 -33
  117. data/test/minirunit.rb +0 -109
  118. data/test/minirunit/testConnect.rb +0 -14
  119. data/test/minirunit/testH2.rb +0 -73
  120. data/test/minirunit/testHsqldb.rb +0 -73
  121. data/test/minirunit/testLoadActiveRecord.rb +0 -3
  122. data/test/minirunit/testMysql.rb +0 -83
  123. data/test/minirunit/testRawSelect.rb +0 -24
@@ -0,0 +1,4 @@
1
+ require 'arjdbc/jdbc'
2
+ jdbc_require_driver 'jdbc/h2'
3
+ require 'arjdbc/h2/connection_methods'
4
+ require 'arjdbc/h2/adapter'
@@ -0,0 +1,15 @@
1
+ require 'arjdbc/hsqldb/adapter'
2
+
3
+ module ArJdbc
4
+ module H2
5
+ include HSQLDB
6
+
7
+ def adapter_name #:nodoc:
8
+ 'H2'
9
+ end
10
+
11
+ def h2_adapter
12
+ true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveRecord
2
+ class Base
3
+ class << self
4
+ def h2_connection(config)
5
+ config[:url] ||= "jdbc:h2:#{config[:database]}"
6
+ config[:driver] ||= "org.h2.Driver"
7
+ embedded_driver(config)
8
+ end
9
+ alias_method :jdbch2_connection, :h2_connection
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ require 'arjdbc/jdbc'
2
+ jdbc_require_driver 'jdbc/hsqldb'
3
+ require 'arjdbc/hsqldb/connection_methods'
4
+ require 'arjdbc/hsqldb/adapter'
@@ -1,33 +1,7 @@
1
- module ::JdbcSpec
2
- module ActiveRecordExtensions
3
- def hsqldb_connection(config)
4
- require File.dirname(__FILE__) + "/../active_record/connection_adapters/hsqldb_adapter"
5
- config[:url] ||= "jdbc:hsqldb:#{config[:database]}"
6
- config[:driver] ||= "org.hsqldb.jdbcDriver"
7
- embedded_driver(config)
8
- end
9
-
10
- def h2_connection(config)
11
- require File.dirname(__FILE__) + "/../active_record/connection_adapters/h2_adapter"
12
- config[:url] ||= "jdbc:h2:#{config[:database]}"
13
- config[:driver] ||= "org.h2.Driver"
14
- embedded_driver(config)
15
- end
16
- end
17
-
1
+ module ::ArJdbc
18
2
  module HSQLDB
19
- def self.extended(mod)
20
- mod.class.class_eval do
21
- alias_chained_method :insert, :query_dirty, :insert
22
- end
23
- end
24
-
25
- def self.adapter_matcher(name, *)
26
- name =~ /hsqldb/i ? self : false
27
- end
28
-
29
3
  def self.column_selector
30
- [/hsqldb|\.h2\./i, lambda {|cfg,col| col.extend(::JdbcSpec::HSQLDB::Column)}]
4
+ [/hsqldb|\.h2\./i, lambda {|cfg,col| col.extend(::ArJdbc::HSQLDB::Column)}]
31
5
  end
32
6
 
33
7
  module Column
@@ -63,7 +37,7 @@ module ::JdbcSpec
63
37
  end
64
38
 
65
39
  def adapter_name #:nodoc:
66
- defined?(::Jdbc::H2) ? 'H2' : 'Hsqldb'
40
+ 'Hsqldb'
67
41
  end
68
42
 
69
43
  def modify_types(tp)
@@ -159,27 +133,13 @@ module ::JdbcSpec
159
133
  execute "ALTER TABLE #{name} RENAME TO #{new_name}"
160
134
  end
161
135
 
162
- def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
163
- log(sql,name) do
164
- @connection.execute_update(sql)
165
- end
166
- table = sql.split(" ", 4)[2]
167
- id_value || last_insert_id(table, nil)
168
- end
169
-
170
- def last_insert_id(table, sequence_name)
136
+ def last_insert_id
171
137
  Integer(select_value("CALL IDENTITY()"))
172
138
  end
173
139
 
174
- # Override normal #_execute: See Rubyforge #11567
175
140
  def _execute(sql, name = nil)
176
- if ::ActiveRecord::ConnectionAdapters::JdbcConnection::select?(sql)
177
- @connection.execute_query(sql)
178
- elsif ::ActiveRecord::ConnectionAdapters::JdbcConnection::insert?(sql)
179
- insert(sql, name)
180
- else
181
- @connection.execute_update(sql)
182
- end
141
+ result = super
142
+ ActiveRecord::ConnectionAdapters::JdbcConnection::insert?(sql) ? last_insert_id : result
183
143
  end
184
144
 
185
145
  def add_limit_offset!(sql, options) #:nodoc:
@@ -206,16 +166,4 @@ module ::JdbcSpec
206
166
  execute "DROP INDEX #{quote_column_name(index_name(table_name, options))}"
207
167
  end
208
168
  end
209
-
210
- module H2
211
- include HSQLDB
212
-
213
- def self.adapter_matcher(name, *)
214
- name =~ /\.h2\./i ? self : false
215
- end
216
-
217
- def h2_adapter
218
- true
219
- end
220
- end
221
169
  end
@@ -0,0 +1,14 @@
1
+ module ActiveRecord
2
+ class Base
3
+ class << self
4
+ def hsqldb_connection(config)
5
+ require "arjdbc/hsqldb"
6
+ config[:url] ||= "jdbc:hsqldb:#{config[:database]}"
7
+ config[:driver] ||= "org.hsqldb.jdbcDriver"
8
+ embedded_driver(config)
9
+ end
10
+
11
+ alias_method :jdbchsqldb_connection, :hsqldb_connection
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ require 'arjdbc/jdbc'
2
+ require 'arjdbc/informix/connection_methods'
3
+ require 'arjdbc/informix/adapter'
@@ -4,7 +4,7 @@ module ::ActiveRecord
4
4
 
5
5
  private
6
6
  def write_lobs
7
- if connection.is_a?(JdbcSpec::Informix)
7
+ if connection.is_a?(ArJdbc::Informix)
8
8
  self.class.columns.each do |c|
9
9
  if [:text, :binary].include? c.type
10
10
  value = self[c.name]
@@ -25,28 +25,15 @@ module ::ActiveRecord
25
25
  end
26
26
  end
27
27
 
28
- module ::JdbcSpec
29
- module ActiveRecordExtensions
30
- def informix_connection(config)
31
- config[:port] ||= 9088
32
- config[:url] ||= "jdbc:informix-sqli://#{config[:host]}:#{config[:port]}/#{config[:database]}:INFORMIXSERVER=#{config[:servername]}"
33
- config[:driver] = 'com.informix.jdbc.IfxDriver'
34
- jdbc_connection(config)
35
- end
36
- end
37
-
28
+ module ::ArJdbc
38
29
  module Informix
39
30
  def self.extended(base)
40
31
  @@db_major_version = base.select_one("SELECT dbinfo('version', 'major') version FROM systables WHERE tabid = 1")['version'].to_i
41
32
  end
42
33
 
43
- def self.adapter_matcher(name, *)
44
- name =~ /informix/i ? self : false
45
- end
46
-
47
34
  def self.column_selector
48
35
  [ /informix/i,
49
- lambda { |cfg, column| column.extend(::JdbcSpec::Informix::Column) } ]
36
+ lambda { |cfg, column| column.extend(::ArJdbc::Informix::Column) } ]
50
37
  end
51
38
 
52
39
  module Column
@@ -123,12 +110,12 @@ module ::JdbcSpec
123
110
  super(name, options)
124
111
  execute("CREATE SEQUENCE #{name}_seq")
125
112
  end
126
-
113
+
127
114
  def rename_table(name, new_name)
128
115
  execute("RENAME TABLE #{name} TO #{new_name}")
129
116
  execute("RENAME SEQUENCE #{name}_seq TO #{new_name}_seq")
130
117
  end
131
-
118
+
132
119
  def drop_table(name)
133
120
  super(name)
134
121
  execute("DROP SEQUENCE #{name}_seq")
@@ -144,4 +131,4 @@ module ::JdbcSpec
144
131
  execute(sql.gsub(/(!=|<>)\s*null/i, "IS NOT NULL").gsub(/=\s*null/i, "IS NULL"), name)
145
132
  end
146
133
  end # module Informix
147
- end # module ::JdbcSpec
134
+ end # module ::ArJdbc
@@ -0,0 +1,10 @@
1
+ class ActiveRecord::Base
2
+ class << self
3
+ def informix_connection(config)
4
+ config[:port] ||= 9088
5
+ config[:url] ||= "jdbc:informix-sqli://#{config[:host]}:#{config[:port]}/#{config[:database]}:INFORMIXSERVER=#{config[:servername]}"
6
+ config[:driver] = 'com.informix.jdbc.IfxDriver'
7
+ jdbc_connection(config)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ require 'arjdbc/jdbc/adapter'
2
+ require 'arjdbc/jdbc/discover'
@@ -0,0 +1,235 @@
1
+ require 'active_record/version'
2
+ require 'active_record/connection_adapters/abstract_adapter'
3
+ require 'arjdbc/version'
4
+ require 'arjdbc/jdbc/require_driver'
5
+ require 'arjdbc/jdbc/connection_methods'
6
+ require 'arjdbc/jdbc/compatibility'
7
+ require 'arjdbc/jdbc/core_ext'
8
+ require 'arjdbc/jdbc/java'
9
+ require 'arjdbc/jdbc/type_converter'
10
+ require 'arjdbc/jdbc/driver'
11
+ require 'arjdbc/jdbc/column'
12
+ require 'arjdbc/jdbc/connection'
13
+ require 'arjdbc/jdbc/callbacks'
14
+ require 'arjdbc/jdbc/extension'
15
+ require 'bigdecimal'
16
+
17
+ module ActiveRecord
18
+ module ConnectionAdapters
19
+ class JdbcAdapter < AbstractAdapter
20
+ extend ShadowCoreMethods
21
+ include CompatibilityMethods if CompatibilityMethods.needed?(self)
22
+ include JdbcConnectionPoolCallbacks if JdbcConnectionPoolCallbacks.needed?
23
+
24
+ attr_reader :config
25
+
26
+ def initialize(connection, logger, config)
27
+ @config = config
28
+ spec = adapter_spec config
29
+ unless connection
30
+ connection_class = jdbc_connection_class spec
31
+ connection = connection_class.new config
32
+ end
33
+ super(connection, logger)
34
+ extend spec if spec
35
+ connection.adapter = self
36
+ JndiConnectionPoolCallbacks.prepare(self, connection)
37
+ end
38
+
39
+ def jdbc_connection_class(spec)
40
+ connection_class = spec.jdbc_connection_class if spec && spec.respond_to?(:jdbc_connection_class)
41
+ connection_class = ::ActiveRecord::ConnectionAdapters::JdbcConnection unless connection_class
42
+ connection_class
43
+ end
44
+
45
+ def jdbc_column_class
46
+ ActiveRecord::ConnectionAdapters::JdbcColumn
47
+ end
48
+
49
+ # Locate specialized adapter specification if one exists based on config data
50
+ def adapter_spec(config)
51
+ dialect = (config[:dialect] || config[:driver]).to_s
52
+ ::ArJdbc.constants.map { |name| ::ArJdbc.const_get name }.each do |constant|
53
+ if constant.respond_to? :adapter_matcher
54
+ spec = constant.adapter_matcher(dialect, config)
55
+ return spec if spec
56
+ end
57
+ end
58
+ nil
59
+ end
60
+
61
+ def modify_types(tp)
62
+ tp
63
+ end
64
+
65
+ def adapter_name #:nodoc:
66
+ 'JDBC'
67
+ end
68
+
69
+ def is_a?(klass) # :nodoc:
70
+ # This is to fake out current_adapter? conditional logic in AR tests
71
+ if Class === klass && klass.name =~ /#{adapter_name}Adapter$/i
72
+ true
73
+ else
74
+ super
75
+ end
76
+ end
77
+
78
+ def supports_migrations?
79
+ true
80
+ end
81
+
82
+ def native_database_types #:nodoc:
83
+ @connection.native_database_types
84
+ end
85
+
86
+ def database_name #:nodoc:
87
+ @connection.database_name
88
+ end
89
+
90
+ def native_sql_to_type(tp)
91
+ if /^(.*?)\(([0-9]+)\)/ =~ tp
92
+ tname = $1
93
+ limit = $2.to_i
94
+ ntype = native_database_types
95
+ if ntype[:primary_key] == tp
96
+ return :primary_key,nil
97
+ else
98
+ ntype.each do |name,val|
99
+ if name == :primary_key
100
+ next
101
+ end
102
+ if val[:name].downcase == tname.downcase && (val[:limit].nil? || val[:limit].to_i == limit)
103
+ return name,limit
104
+ end
105
+ end
106
+ end
107
+ elsif /^(.*?)/ =~ tp
108
+ tname = $1
109
+ ntype = native_database_types
110
+ if ntype[:primary_key] == tp
111
+ return :primary_key,nil
112
+ else
113
+ ntype.each do |name,val|
114
+ if val[:name].downcase == tname.downcase && val[:limit].nil?
115
+ return name,nil
116
+ end
117
+ end
118
+ end
119
+ else
120
+ return :string,255
121
+ end
122
+ return nil,nil
123
+ end
124
+
125
+ def active?
126
+ @connection.active?
127
+ end
128
+
129
+ def reconnect!
130
+ @connection.reconnect!
131
+ @connection
132
+ end
133
+
134
+ def disconnect!
135
+ @connection.disconnect!
136
+ end
137
+
138
+ def execute(sql, name = nil)
139
+ if name == :skip_logging
140
+ _execute(sql)
141
+ else
142
+ log(sql, name) { _execute(sql) }
143
+ end
144
+ end
145
+
146
+ # we need to do it this way, to allow Rails stupid tests to always work
147
+ # even if we define a new execute method. Instead of mixing in a new
148
+ # execute, an _execute should be mixed in.
149
+ def _execute(sql, name = nil)
150
+ @connection.execute(sql)
151
+ end
152
+
153
+ def jdbc_insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
154
+ insert_sql(sql, name, pk, id_value, sequence_name)
155
+ end
156
+
157
+ def jdbc_update(sql, name = nil) #:nodoc:
158
+ execute(sql, name)
159
+ end
160
+ def jdbc_select_all(sql, name = nil)
161
+ select(sql, name)
162
+ end
163
+
164
+ if ActiveRecord::VERSION::MAJOR < 3
165
+ # Allow query caching to work even when we override alias_method_chain'd methods
166
+ alias_chained_method :select_all, :query_cache, :jdbc_select_all
167
+ alias_chained_method :update, :query_dirty, :jdbc_update
168
+ alias_chained_method :insert, :query_dirty, :jdbc_insert
169
+
170
+ # Do we need this? Not in AR 3.
171
+ def select_one(sql, name = nil)
172
+ select(sql, name).first
173
+ end
174
+ end
175
+
176
+ def select_rows(sql, name = nil)
177
+ rows = []
178
+ select(sql, name).each {|row| rows << row.values }
179
+ rows
180
+ end
181
+
182
+ def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
183
+ id = execute(sql, name = nil)
184
+ id_value || id
185
+ end
186
+
187
+
188
+ def jdbc_columns(table_name, name = nil)
189
+ @connection.columns(table_name.to_s)
190
+ end
191
+ alias_chained_method :columns, :query_cache, :jdbc_columns
192
+
193
+ def tables(name = nil)
194
+ @connection.tables
195
+ end
196
+
197
+ def indexes(table_name, name = nil, schema_name = nil)
198
+ @connection.indexes(table_name, name, schema_name)
199
+ end
200
+
201
+ def begin_db_transaction
202
+ @connection.begin
203
+ end
204
+
205
+ def commit_db_transaction
206
+ @connection.commit
207
+ end
208
+
209
+ def rollback_db_transaction
210
+ @connection.rollback
211
+ end
212
+
213
+ def write_large_object(*args)
214
+ @connection.write_large_object(*args)
215
+ end
216
+
217
+ def pk_and_sequence_for(table)
218
+ key = primary_key(table)
219
+ [key, nil] if key
220
+ end
221
+
222
+ def primary_key(table)
223
+ primary_keys(table).first
224
+ end
225
+
226
+ def primary_keys(table)
227
+ @connection.primary_keys(table)
228
+ end
229
+
230
+ def select(*args)
231
+ execute(*args)
232
+ end
233
+ end
234
+ end
235
+ end