sequel 3.8.0 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/CHANGELOG +48 -0
  2. data/Rakefile +6 -28
  3. data/bin/sequel +7 -2
  4. data/doc/release_notes/3.9.0.txt +233 -0
  5. data/lib/sequel/adapters/ado.rb +4 -8
  6. data/lib/sequel/adapters/amalgalite.rb +1 -1
  7. data/lib/sequel/adapters/dbi.rb +3 -3
  8. data/lib/sequel/adapters/do.rb +7 -13
  9. data/lib/sequel/adapters/jdbc.rb +10 -16
  10. data/lib/sequel/adapters/jdbc/h2.rb +5 -0
  11. data/lib/sequel/adapters/mysql.rb +10 -23
  12. data/lib/sequel/adapters/odbc.rb +6 -10
  13. data/lib/sequel/adapters/postgres.rb +0 -5
  14. data/lib/sequel/adapters/shared/mssql.rb +17 -9
  15. data/lib/sequel/adapters/shared/mysql.rb +16 -7
  16. data/lib/sequel/adapters/shared/sqlite.rb +5 -0
  17. data/lib/sequel/adapters/sqlite.rb +2 -1
  18. data/lib/sequel/connection_pool.rb +67 -349
  19. data/lib/sequel/connection_pool/sharded_single.rb +84 -0
  20. data/lib/sequel/connection_pool/sharded_threaded.rb +211 -0
  21. data/lib/sequel/connection_pool/single.rb +29 -0
  22. data/lib/sequel/connection_pool/threaded.rb +150 -0
  23. data/lib/sequel/core.rb +46 -15
  24. data/lib/sequel/database.rb +11 -9
  25. data/lib/sequel/dataset/convenience.rb +23 -0
  26. data/lib/sequel/dataset/graph.rb +2 -2
  27. data/lib/sequel/dataset/query.rb +9 -5
  28. data/lib/sequel/dataset/sql.rb +87 -12
  29. data/lib/sequel/extensions/inflector.rb +8 -1
  30. data/lib/sequel/extensions/schema_dumper.rb +3 -4
  31. data/lib/sequel/model/associations.rb +5 -43
  32. data/lib/sequel/model/base.rb +9 -2
  33. data/lib/sequel/model/default_inflections.rb +1 -1
  34. data/lib/sequel/model/exceptions.rb +11 -1
  35. data/lib/sequel/model/inflections.rb +8 -1
  36. data/lib/sequel/model/plugins.rb +2 -12
  37. data/lib/sequel/plugins/active_model.rb +5 -0
  38. data/lib/sequel/plugins/association_dependencies.rb +1 -1
  39. data/lib/sequel/plugins/many_through_many.rb +1 -1
  40. data/lib/sequel/plugins/optimistic_locking.rb +65 -0
  41. data/lib/sequel/plugins/single_table_inheritance.rb +14 -3
  42. data/lib/sequel/plugins/validation_helpers.rb +2 -2
  43. data/lib/sequel/sql.rb +2 -2
  44. data/lib/sequel/timezones.rb +2 -2
  45. data/lib/sequel/version.rb +1 -1
  46. data/spec/adapters/mssql_spec.rb +19 -0
  47. data/spec/adapters/mysql_spec.rb +4 -0
  48. data/spec/adapters/postgres_spec.rb +180 -0
  49. data/spec/adapters/spec_helper.rb +15 -1
  50. data/spec/core/connection_pool_spec.rb +119 -78
  51. data/spec/core/database_spec.rb +41 -50
  52. data/spec/core/dataset_spec.rb +115 -4
  53. data/spec/extensions/active_model_spec.rb +40 -34
  54. data/spec/extensions/boolean_readers_spec.rb +1 -1
  55. data/spec/extensions/migration_spec.rb +43 -38
  56. data/spec/extensions/optimistic_locking_spec.rb +100 -0
  57. data/spec/extensions/schema_dumper_spec.rb +4 -4
  58. data/spec/extensions/single_table_inheritance_spec.rb +19 -11
  59. data/spec/integration/dataset_test.rb +44 -1
  60. data/spec/integration/plugin_test.rb +39 -0
  61. data/spec/integration/prepared_statement_test.rb +58 -7
  62. data/spec/integration/spec_helper.rb +4 -0
  63. data/spec/model/eager_loading_spec.rb +24 -0
  64. data/spec/model/validations_spec.rb +5 -1
  65. metadata +114 -106
data/CHANGELOG CHANGED
@@ -1,3 +1,51 @@
1
+ === 3.9.0 (2010-03-04)
2
+
3
+ * Allow loading adapters and extensions from outside of the Sequel lib directory (jeremyevans)
4
+
5
+ * Make limit and offset work as bound variables in prepared statements (jeremyevans)
6
+
7
+ * In the single_table_inheritance plugin, handle case where the sti_key is nil or '' specially (jeremyevans) (#287)
8
+
9
+ * Handle IN/NOT IN with an empty array (jeremyevans)
10
+
11
+ * Emulate IN/NOT IN with multiple columns where the database doesn't support it and a dataset is given (jeremyevans)
12
+
13
+ * Add Dataset#unused_table_alias, for generating a table alias that has not yet been used in the query (jeremyevans)
14
+
15
+ * Support an empty database argument in bin/sequel, useful for testing things without a real database (jeremyevans)
16
+
17
+ * Support for schemas and aliases when eager graphing (jeremyevans)
18
+
19
+ * Handle using an SQL::Identifier as an 4th option to Dataset#join_table (jeremyevans)
20
+
21
+ * Move gem spec from Rakefile to a .gemspec file, for compatibility with gem build and builder (jeremyevans) (#285)
22
+
23
+ * Fix MSSQL 2005+ offset emulation on ruby 1.9 (jeremyevans)
24
+
25
+ * Make active_model plugin work with ActiveModel 3.0 beta Lint specs, now requires active_model (jeremyevans)
26
+
27
+ * Correctly create foreign key constraints on MySQL with the InnoDB engine, but you must specify the :key option (jeremyevans)
28
+
29
+ * Add an optimistic_locking plugin for models, similar to ActiveRecord's optimistic locking support (jeremyevans)
30
+
31
+ * Handle implicitly qualified symbols in UPDATE statements, useful for updating joined datasets (jeremyevans)
32
+
33
+ * Have schema_dumper extension pass options hash to Database#tables (jeremyevans) (#283)
34
+
35
+ * Make all internal uses of require thread-safe (jeremyevans)
36
+
37
+ * Refactor connection pool into 4 separate pools, increase performance for unsharded setups (jeremyevans)
38
+
39
+ * Change a couple instance_evaled lambdas into procs, for 1.9.2 compatibility (jeremyevans)
40
+
41
+ * Raise error message earlier if DISTINCT ON is used on SQLite (jeremyevans)
42
+
43
+ * Speed up prepared statements on SQLite (jeremyevans)
44
+
45
+ * Correctly handle ODBC timestamps when database_timezone is nil (jeremyevans)
46
+
47
+ * Add Sequel::ValidationFailed#errors (tmm1)
48
+
1
49
  === 3.8.0 (2010-01-04)
2
50
 
3
51
  * Catch cases in the postgres adapter where exceptions weren't converted or raised appropriately (jeremyevans)
data/Rakefile CHANGED
@@ -9,45 +9,23 @@ end
9
9
 
10
10
  NAME = 'sequel'
11
11
  VERS = lambda do
12
- require "lib/sequel/version"
12
+ require File.expand_path("../lib/sequel/version", __FILE__)
13
13
  Sequel.version
14
14
  end
15
- CLEAN.include ["**/.*.sw?", "pkg", ".config", "rdoc", "coverage", "www/public/*.html", "www/public/rdoc*"]
15
+ CLEAN.include ["**/.*.sw?", "sequel-*.gem", ".config", "rdoc", "coverage", "www/public/*.html", "www/public/rdoc*"]
16
16
  RDOC_DEFAULT_OPTS = ["--quiet", "--line-numbers", "--inline-source", '--title', 'Sequel: The Database Toolkit for Ruby']
17
17
  RDOC_OPTS = RDOC_DEFAULT_OPTS + ['--main', 'README.rdoc']
18
18
 
19
19
  # Gem Packaging and Release
20
20
 
21
- spec = Gem::Specification.new do |s|
22
- s.name = NAME
23
- s.rubyforge_project = 'sequel'
24
- s.version = VERS.call
25
- s.platform = Gem::Platform::RUBY
26
- s.has_rdoc = true
27
- s.extra_rdoc_files = ["README.rdoc", "CHANGELOG", "COPYING"] + Dir["doc/*.rdoc"] + Dir['doc/release_notes/*.txt']
28
- s.rdoc_options += RDOC_OPTS
29
- s.summary = "The Database Toolkit for Ruby"
30
- s.description = s.summary
31
- s.author = "Jeremy Evans"
32
- s.email = "code@jeremyevans.net"
33
- s.homepage = "http://sequel.rubyforge.org"
34
- s.required_ruby_version = ">= 1.8.4"
35
- s.files = %w(COPYING CHANGELOG README.rdoc Rakefile) + Dir["{bin,doc,spec,lib}/**/*"]
36
- s.require_path = "lib"
37
- s.bindir = 'bin'
38
- s.executables << 'sequel'
39
- end
40
-
41
21
  desc "Packages sequel"
42
- task :package=>[:clean]
43
- Rake::GemPackageTask.new(spec) do |p|
44
- p.need_tar = true
45
- p.gem_spec = spec
22
+ task :package=>[:clean] do |p|
23
+ sh %{gem build sequel.gemspec}
46
24
  end
47
25
 
48
26
  desc "Install sequel gem"
49
27
  task :install=>[:package] do
50
- sh %{sudo gem install pkg/#{NAME}-#{VERS.call} --local}
28
+ sh %{sudo gem install ./#{NAME}-#{VERS.call} --local}
51
29
  end
52
30
 
53
31
  desc "Uninstall sequel gem"
@@ -57,7 +35,7 @@ end
57
35
 
58
36
  desc "Upload sequel gem to gemcutter"
59
37
  task :release=>[:package] do
60
- sh %{gem push pkg/#{NAME}-#{VERS.call}.gem}
38
+ sh %{gem push ./#{NAME}-#{VERS.call}.gem}
61
39
  end
62
40
 
63
41
  ### RDoc
data/bin/sequel CHANGED
@@ -95,7 +95,6 @@ end
95
95
  error_proc["Error: Must specify -m if using -M"] if migrate_ver && !migrate_dir
96
96
  error_proc["Error: Cannot specify -D or -d with -m"] if dump_migration && migrate_dir
97
97
  error_proc["Error: Cannot specify -C with -d, -D, or -m"] if copy_databases && (dump_migration || migrate_dir)
98
- error_proc["Error: Must specify database connection string or path to yaml file as argument"] if db.nil? || db.empty?
99
98
 
100
99
  if logfile || echo
101
100
  require 'logger'
@@ -105,7 +104,13 @@ if logfile || echo
105
104
  end
106
105
 
107
106
  connect_proc = lambda do |database|
108
- db = if File.exist?(database)
107
+ db = if database.nil? || database.empty?
108
+ db = Sequel::Database.new(:quote_identifiers=>false)
109
+ def db.connect(*args); Object.new; end
110
+ db.identifier_input_method = nil
111
+ db.identifier_output_method = nil
112
+ db
113
+ elsif File.exist?(database)
109
114
  require 'yaml'
110
115
  env ||= "development"
111
116
  db_config = YAML.load_file(database)
@@ -0,0 +1,233 @@
1
+ New Features
2
+ ------------
3
+
4
+ * The ConnectionPool classes were refactored from 2 separate
5
+ classes to a 5 class hierarchy, with one main class and 4
6
+ subclasses, one for each combination of sharding and threading.
7
+
8
+ The primary reason for this refactoring is to make it so that
9
+ the user doesn't have to pay a performance penalty for sharding
10
+ if they aren't using it. A connection pool that supports sharding
11
+ is automatically used if the :servers option is used when setting
12
+ up the database connection.
13
+
14
+ In addition, the default connection pool no longer contains
15
+ the code to schedule future disconnections of currently allocated
16
+ connections. The sharded connection pool must be used if that
17
+ feature is desired.
18
+
19
+ The unsharded connection pools are about 25-30% faster than the
20
+ sharded versions.
21
+
22
+ * An optimistic_locking plugin was added to Sequel::Model. This
23
+ plugin implements a simple database-independent locking mechanism
24
+ to ensure that concurrent updates do not override changes:
25
+
26
+ class Person < Sequel::Model
27
+ plugin :optimistic_locking
28
+ end
29
+ p1 = Person[1]
30
+ p2 = Person[1]
31
+ # works
32
+ p1.update(:name=>'Jim')
33
+ # raises Sequel::Plugins::OptimisticLocking::Error
34
+ p2.update(:name=>'Bob')
35
+
36
+ In order for this plugin to work, you need to make sure that the
37
+ database table has a lock_version column (or other column you name
38
+ via the lock_column class level accessor) that defaults to 0.
39
+
40
+ The optimistic_locking plugin does not work with the
41
+ class_table_inheritance plugin.
42
+
43
+ * Dataset#unused_table_alias was added, which takes a symbol and
44
+ returns either that symbol or a new symbol which can be used as
45
+ a table alias when joining a table to the dataset. The symbol
46
+ returned is guaranteed to not already be used by the dataset:
47
+
48
+ DB[:test].unused_table_alias(:blah) # => :blah
49
+ DB[:test].unused_table_alias(:test) # => :test_0
50
+
51
+ The use case is when you need to join a table to a dataset, where
52
+ the table may already be used inside the dataset, and you want
53
+ to generate a unique alias:
54
+
55
+ ds.join(:table.as(ds.unused_table_alias(:table)), ...)
56
+
57
+ * The Sequel::ValidationFailed exception now has an errors accessor
58
+ which returns the Sequel::Model::Errors instance with the
59
+ validation errors. This can be helpful in situations where a
60
+ generalized rescue is done where the model object reference is
61
+ not available.
62
+
63
+ * bin/sequel now works without an argument, which is useful for
64
+ testing SQL generation (and not much else).
65
+
66
+ * Support SELECT ... INTO in the MSSQL adapter, using Dataset#into,
67
+ which takes a table argument.
68
+
69
+ * You can now provide your own connection pool class via the
70
+ :pool_class option when instantiating the database.
71
+
72
+ Other Improvements
73
+ ------------------
74
+
75
+ * IN/NOT IN constructs with an empty array are now handled properly.
76
+
77
+ DB[:table].filter(:id=>[]) # IN
78
+ DB[:table].exclude(:id=>[]) # NOT IN
79
+
80
+ Before, the IN construct would mostly work, other than some minor
81
+ differences in NULL semantics. However, the NOT IN construct
82
+ would not work. Sequel now handles the NOT IN case using an
83
+ expression that evaluates to true.
84
+
85
+ * If using an IN/NOT IN construct with multiple columns and a dataset
86
+ argument, where multiple column IN/NOT IN support is emulated, a
87
+ separate query is done to get the records, which is then handled
88
+ like an array of values. This means that the following type of
89
+ query now works on all tested databases:
90
+
91
+ DB[:table1].filter([:id1, :id2]=>DB[:table2].select(:id1, :id2))
92
+
93
+ * Schemas and aliases are now handled correctly when eager graphing.
94
+
95
+ * Implicitly qualified symbols are now handled correctly in update
96
+ statements, useful if you are updating a joined dataset and need
97
+ to reference a column that appears in multiple tables.
98
+
99
+ * The active_model plugin has been brought up to date with
100
+ activemodel 3.0 beta (though it doesn't work on edge).
101
+ Additionally, the active_model plugin now requires active_model
102
+ in order to use ActiveModel::Naming.
103
+
104
+ * In the schema_dumper extension, always include the varchar limit,
105
+ even if it is 255 columns (the default). This makes it so that
106
+ PostgreSQL will use a varchar(255) column instead of a text column
107
+ when restoring a schema dump of a varchar(255) column from another
108
+ database.
109
+
110
+ * You can now load adapters from outside the Sequel lib directory,
111
+ now they just need to be in a sequel/adapters directory somewhere
112
+ in the LOAD_PATH.
113
+
114
+ * You can now load extensions from outside the Sequel lib directory
115
+ using Sequel.extension. External extensions need to be in a
116
+ sequel/extensions directory somewhere in the LOAD_PATH.
117
+
118
+ * Using bound variables for limit and offset in prepared statements
119
+ now works correctly.
120
+
121
+ * Performance of prepared statements was improved in the native
122
+ SQLite adapter.
123
+
124
+ * The schema_dumper extension now passes the options hash from
125
+ dump_*_migration to Database#tables.
126
+
127
+ * In the single_table_inheritance plugin, qualify the sti_key column
128
+ with the table name, so that subclass datasets can safely be joined
129
+ to other tables having the same column name.
130
+
131
+ * In the single_table_inheritance plugin, handle case where the
132
+ sti_key value is nil or '' specially, so that those cases
133
+ always return an instance of the main model class. This fixes
134
+ issues if constantize(nil) returns Object instead of raising
135
+ an exception.
136
+
137
+ * No longer use Date#to_s for literalization, always use ISO8601
138
+ format for dates.
139
+
140
+ * A couple lambdas which were instance_evaled were changed to procs
141
+ for ruby 1.9.2 compatibility.
142
+
143
+ * MSSQL emulated offset support was simplified to only use one
144
+ subquery, and made to work correctly on ruby 1.9.
145
+
146
+ * Emulate multiple column IN/NOT IN on H2, since it doesn't handle
147
+ all cases correctly.
148
+
149
+ * ODBC timestamps are now handled correctly if the database_timezone
150
+ is nil.
151
+
152
+ * ArgumentErrors raised when running queries in the ODBC adapter are
153
+ now raised as DatabaseErrors.
154
+
155
+ * Attempting to use DISTINCT ON on SQLite now raises an error before
156
+ sending the query to the database.
157
+
158
+ * The options hash passed to the database connection method is no
159
+ longer modified. However, there may be additional options
160
+ present in Database#opts that weren't specified by the options
161
+ hash passed to the database connection method.
162
+
163
+ * Make Dataset#add_graph_aliases handle the case where the dataset
164
+ has not yet been graphed.
165
+
166
+ * You can now provide an SQL::Identifier as a 4th argument to
167
+ Dataset#join_table, and unsupported arguments are caught and an
168
+ exception is raised.
169
+
170
+ * The gem specification has been moved out of the Rakefile, so
171
+ that the gem can now be built without rake, and works well with
172
+ gem build and bundler.
173
+
174
+ * The Rakefile no longer assumes the current directory is in the
175
+ $LOAD_PATH, so it should work correctly on ruby 1.9.2.
176
+
177
+ * All internal uses of require are now thread safe.
178
+
179
+ * Empty query parameter keys in connection strings are now ignored
180
+ instead of raising an exception.
181
+
182
+ * The specs were changed so that you can run them in parallel.
183
+ Previously there was a race condition in the migration extension
184
+ specs.
185
+
186
+ Backwards Compatibility
187
+ -----------------------
188
+
189
+ * If you plan on using sharding at any point, you now must pass
190
+ a :servers option when connecting to the database, even if it is
191
+ an empty hash. You can no longer just call Database#add_servers
192
+ later.
193
+
194
+ * The connection_proc and disconnection_proc accessors were removed
195
+ from the connection pools, so you can no longer modify the procs
196
+ after the connection pool has been instantiated. You must now
197
+ provide the connection_proc as the block argument when
198
+ instantiating the pool, and the disconnection_proc via the
199
+ :disconnection_proc option.
200
+
201
+ * In the hash passed to Dataset#update, symbol keys with a double
202
+ embedded underscore are now considerated as implicit qualifiers,
203
+ instead of being used verbatim. If you have a column that includes
204
+ a double underscore, you now need to wrap it in an SQL::Identifier
205
+ or use a String instead.
206
+
207
+ * The connection pools no longer convert non-StandardError based
208
+ exceptions to RuntimeErrors. Previously, all of the common adapters
209
+ turned this feature off, so there is no change for most users.
210
+
211
+ * Sequel::ConnectionPool is now considered an abstract class and
212
+ should not be instantiated directly. Use ConnectionPool.get_pool
213
+ to return an instance of the appropriate subclass.
214
+
215
+ * The Sequel::SingleThreadedPool constant is no longer defined.
216
+
217
+ * The private Dataset#eager_unique_table_alias method was removed,
218
+ use the new public Dataset#unused_table_alias method instead, which
219
+ has a slightly different API.
220
+
221
+ * The private Dataset#eager_graph_qualify_order method was removed,
222
+ used Dataset#qualified_expression instead.
223
+
224
+ * The private Sequel::Model class methods plugin_gem_location and
225
+ plugin_gem_location_old have been removed.
226
+
227
+ * Gems built with the rake tasks now show up in the root directory
228
+ instead of the pkg subdirectory, and no tarball package is created.
229
+
230
+ Other News
231
+ ----------
232
+
233
+ * Sequel now has an official blog at http://sequel.heroku.com.
@@ -7,11 +7,11 @@ module Sequel
7
7
  set_adapter_scheme :ado
8
8
 
9
9
  def initialize(opts)
10
- super(opts)
11
- opts[:driver] ||= 'SQL Server'
12
- case opts[:driver]
10
+ super
11
+ @opts[:driver] ||= 'SQL Server'
12
+ case @opts[:driver]
13
13
  when 'SQL Server'
14
- Sequel.require 'adapters/ado/mssql'
14
+ Sequel.ts_require 'adapters/ado/mssql'
15
15
  extend Sequel::ADO::MSSQL::DatabaseMethods
16
16
  end
17
17
  end
@@ -69,10 +69,6 @@ module Sequel
69
69
  end
70
70
  end
71
71
 
72
- def connection_pool_default_options
73
- super.merge(:pool_convert_exceptions=>false)
74
- end
75
-
76
72
  def disconnect_connection(conn)
77
73
  conn.Close
78
74
  end
@@ -125,7 +125,7 @@ module Sequel
125
125
  # Also, force the max connections to 1 if a memory database is being
126
126
  # used, as otherwise each connection gets a separate database.
127
127
  def connection_pool_default_options
128
- o = super.merge(:pool_convert_exceptions=>false)
128
+ o = super.dup
129
129
  # Default to only a single connection if a memory database is used,
130
130
  # because otherwise each connection will get a separate database
131
131
  o[:max_connections] = 1 if @opts[:database] == ':memory:' || blank_object?(@opts[:database])
@@ -21,10 +21,10 @@ module Sequel
21
21
  }
22
22
 
23
23
  def initialize(opts)
24
- super(opts)
25
- case opts[:db_type]
24
+ super
25
+ case @opts[:db_type]
26
26
  when 'mssql'
27
- Sequel.require 'adapters/shared/mssql'
27
+ Sequel.ts_require 'adapters/shared/mssql'
28
28
  extend Sequel::MSSQL::DatabaseMethods
29
29
  end
30
30
  end
@@ -14,18 +14,18 @@ module Sequel
14
14
  # Contains procs keyed on sub adapter type that extend the
15
15
  # given database object so it supports the correct database type.
16
16
  DATABASE_SETUP = {:postgres=>proc do |db|
17
- require 'do_postgres'
18
- Sequel.require 'adapters/do/postgres'
17
+ Sequel.tsk_require 'do_postgres'
18
+ Sequel.ts_require 'adapters/do/postgres'
19
19
  db.extend(Sequel::DataObjects::Postgres::DatabaseMethods)
20
20
  end,
21
21
  :mysql=>proc do |db|
22
- require 'do_mysql'
23
- Sequel.require 'adapters/do/mysql'
22
+ Sequel.tsk_require 'do_mysql'
23
+ Sequel.ts_require 'adapters/do/mysql'
24
24
  db.extend(Sequel::DataObjects::MySQL::DatabaseMethods)
25
25
  end,
26
26
  :sqlite3=>proc do |db|
27
- require 'do_sqlite3'
28
- Sequel.require 'adapters/do/sqlite'
27
+ Sequel.tsk_require 'do_sqlite3'
28
+ Sequel.ts_require 'adapters/do/sqlite'
29
29
  db.extend(Sequel::DataObjects::SQLite::DatabaseMethods)
30
30
  end
31
31
  }
@@ -43,12 +43,11 @@ module Sequel
43
43
  # raise an error immediately if the connection doesn't have a
44
44
  # uri, since DataObjects requires one.
45
45
  def initialize(opts)
46
- @opts = opts
46
+ super
47
47
  raise(Error, "No connection string specified") unless uri
48
48
  if prok = DATABASE_SETUP[subadapter.to_sym]
49
49
  prok.call(self)
50
50
  end
51
- super(opts)
52
51
  end
53
52
 
54
53
  # Setup a DataObjects::Connection to the database.
@@ -145,11 +144,6 @@ module Sequel
145
144
  :execute_non_query
146
145
  end
147
146
 
148
- # The DataObjects adapter should convert exceptions by default.
149
- def connection_pool_default_options
150
- super.merge(:pool_convert_exceptions=>false)
151
- end
152
-
153
147
  # Close the given database connection.
154
148
  def disconnect_connection(c)
155
149
  c.close