sequel 3.42.0 → 3.43.0
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.
- data/CHANGELOG +40 -0
- data/MIT-LICENSE +1 -1
- data/Rakefile +1 -1
- data/doc/opening_databases.rdoc +2 -2
- data/doc/prepared_statements.rdoc +7 -0
- data/doc/release_notes/3.43.0.txt +105 -0
- data/doc/schema_modification.rdoc +19 -0
- data/lib/sequel/adapters/do/mysql.rb +1 -1
- data/lib/sequel/adapters/jdbc.rb +13 -8
- data/lib/sequel/adapters/jdbc/hsqldb.rb +5 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
- data/lib/sequel/adapters/jdbc/oracle.rb +6 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +9 -3
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +1 -1
- data/lib/sequel/adapters/postgres.rb +4 -2
- data/lib/sequel/adapters/shared/db2.rb +12 -0
- data/lib/sequel/adapters/shared/mssql.rb +9 -5
- data/lib/sequel/adapters/shared/postgres.rb +2 -0
- data/lib/sequel/adapters/swift/mysql.rb +1 -1
- data/lib/sequel/core.rb +2 -2
- data/lib/sequel/database.rb +0 -2
- data/lib/sequel/database/query.rb +20 -5
- data/lib/sequel/database/schema_generator.rb +5 -0
- data/lib/sequel/database/schema_methods.rb +5 -0
- data/lib/sequel/dataset.rb +0 -2
- data/lib/sequel/dataset/actions.rb +25 -2
- data/lib/sequel/dataset/misc.rb +1 -1
- data/lib/sequel/dataset/sql.rb +28 -6
- data/lib/sequel/extensions/core_refinements.rb +221 -0
- data/lib/sequel/extensions/date_arithmetic.rb +194 -0
- data/lib/sequel/extensions/meta_def.rb +30 -0
- data/lib/sequel/extensions/migration.rb +5 -0
- data/lib/sequel/extensions/null_dataset.rb +2 -0
- data/lib/sequel/extensions/pagination.rb +2 -0
- data/lib/sequel/extensions/pg_array.rb +12 -1
- data/lib/sequel/extensions/pg_array_ops.rb +10 -1
- data/lib/sequel/extensions/pg_hstore.rb +12 -1
- data/lib/sequel/extensions/pg_hstore_ops.rb +10 -1
- data/lib/sequel/extensions/pg_json.rb +18 -1
- data/lib/sequel/extensions/pg_range.rb +12 -1
- data/lib/sequel/extensions/pg_range_ops.rb +10 -1
- data/lib/sequel/extensions/pg_row.rb +18 -2
- data/lib/sequel/extensions/pg_row_ops.rb +10 -1
- data/lib/sequel/extensions/query.rb +2 -0
- data/lib/sequel/model/associations.rb +5 -13
- data/lib/sequel/model/base.rb +4 -6
- data/lib/sequel/plugins/boolean_readers.rb +4 -2
- data/lib/sequel/plugins/many_through_many.rb +23 -0
- data/lib/sequel/plugins/string_stripper.rb +53 -3
- data/lib/sequel/plugins/validation_class_methods.rb +5 -0
- data/lib/sequel/sql.rb +3 -3
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +19 -8
- data/spec/adapters/mssql_spec.rb +1 -2
- data/spec/adapters/mysql_spec.rb +2 -2
- data/spec/adapters/postgres_spec.rb +29 -3
- data/spec/core/dataset_spec.rb +107 -0
- data/spec/core/expression_filters_spec.rb +5 -0
- data/spec/core/schema_spec.rb +14 -3
- data/spec/core/spec_helper.rb +2 -0
- data/spec/extensions/core_refinements_spec.rb +551 -0
- data/spec/extensions/date_arithmetic_spec.rb +150 -0
- data/spec/extensions/force_encoding_spec.rb +1 -1
- data/spec/extensions/meta_def_spec.rb +21 -0
- data/spec/extensions/spec_helper.rb +5 -0
- data/spec/extensions/string_stripper_spec.rb +44 -2
- data/spec/integration/associations_test.rb +2 -2
- data/spec/integration/plugin_test.rb +90 -0
- data/spec/integration/schema_test.rb +1 -1
- data/spec/model/association_reflection_spec.rb +4 -4
- data/spec/model/associations_spec.rb +2 -2
- data/spec/model/base_spec.rb +2 -2
- data/spec/model/eager_loading_spec.rb +5 -5
- data/spec/model/hooks_spec.rb +4 -4
- data/spec/model/model_spec.rb +9 -9
- data/spec/model/record_spec.rb +15 -18
- metadata +12 -5
- data/lib/sequel/metaprogramming.rb +0 -13
data/CHANGELOG
CHANGED
@@ -1,3 +1,43 @@
|
|
1
|
+
=== 3.43.0 (2013-01-08)
|
2
|
+
|
3
|
+
* Move the #meta_def support for Database, Dataset, and Model to the meta_def extension (jeremyevans)
|
4
|
+
|
5
|
+
* Fix Database#copy_into on jdbc/postgres when an exception is raised (jeremyevans)
|
6
|
+
|
7
|
+
* Add core_refinements extension, providing refinement versions of Sequel's core extensions (jeremyevans)
|
8
|
+
|
9
|
+
* Make Database#copy_into raise a DatabaseError if the database signals an error in the postgres adapter (jeremyevans)
|
10
|
+
|
11
|
+
* Define respond_to_missing? where method_missing is defined and the object supports respond_to? (jeremyevans)
|
12
|
+
|
13
|
+
* Allow lambda procs with 0 arity as virtual row blocks on ruby 1.9 (jeremyevans)
|
14
|
+
|
15
|
+
* Handle schema-qualified row_types in the pg_array integration in the pg_row extension (jeremyevans) (#595)
|
16
|
+
|
17
|
+
* Support default_schema when reseting primary key sequences on PostgreSQL (jeremyevans) (#596)
|
18
|
+
|
19
|
+
* Allow treating tinyint(1) unsigned columns as booleans in the mysql adapters (jeremyevans)
|
20
|
+
|
21
|
+
* Support the jdbc-hsqldb gem in the jdbc adapter, since it has been updated to 2.2.9 (jeremyevans)
|
22
|
+
|
23
|
+
* Work with new jdbc-* gems that require manual driver loading (kares) (#598)
|
24
|
+
|
25
|
+
* Cast blobs correctly on DB2 when use_clob_as_blob is false (mluu, jeremyevans) (#594)
|
26
|
+
|
27
|
+
* Add date_arithmetic extension for database-independent date calculations (jeremyevans)
|
28
|
+
|
29
|
+
* Make Database#schema handle [host.]database.schema.table qualified tables on Microsoft SQL Server (jeremyevans)
|
30
|
+
|
31
|
+
* Add Dataset#split_qualifiers helper method for splitting a qualifier identifier into array of strings (jeremyevans)
|
32
|
+
|
33
|
+
* Make Database#schema_and_table always return strings for the schema and table (jeremyevans)
|
34
|
+
|
35
|
+
* Skip stripping of blob columns in the string_stripper plugin (jeremyevans) (#593)
|
36
|
+
|
37
|
+
* Allow Dataset#get to take an array to return multiple values, similar to map/select_map (jeremyevans)
|
38
|
+
|
39
|
+
* Default :prefetch_rows to 100 in the Oracle adapter (andrewhr) (#592)
|
40
|
+
|
1
41
|
=== 3.42.0 (2012-12-03)
|
2
42
|
|
3
43
|
* If an exception occurs while committing a transaction, attempt to rollback (jeremyevans)
|
data/MIT-LICENSE
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
Copyright (c) 2007-2008 Sharon Rosner
|
2
|
-
Copyright (c) 2008-
|
2
|
+
Copyright (c) 2008-2013 Jeremy Evans
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
5
|
of this software and associated documentation files (the "Software"), to
|
data/Rakefile
CHANGED
data/doc/opening_databases.rdoc
CHANGED
@@ -338,8 +338,8 @@ The following additional options are supported:
|
|
338
338
|
|
339
339
|
:autosequence :: Set to true to use Sequel's conventions to guess the sequence to use for datasets. False
|
340
340
|
by default.
|
341
|
-
:prefetch_rows :: The number of rows to prefetch. Defaults to
|
342
|
-
and
|
341
|
+
:prefetch_rows :: The number of rows to prefetch. Defaults to 100, a larger number can be specified
|
342
|
+
and may improve performance when retrieving a large number of rows.
|
343
343
|
:privilege :: The Oracle privilege level.
|
344
344
|
|
345
345
|
=== postgres
|
@@ -75,6 +75,13 @@ and update queries, the hash to insert/update is passed to +prepare+:
|
|
75
75
|
ps2.call(:n=>'Jim', :new_n=>'Bob')
|
76
76
|
DB.call(:update_name, :n=>'Jim', :new_n=>'Bob') # same as above
|
77
77
|
|
78
|
+
== Implementation Issues
|
79
|
+
|
80
|
+
Currently, creating a prepared statement uses Object#extend, which can hurt
|
81
|
+
performance. For high performance applications, it's recommended to create
|
82
|
+
all of your prepared statements upon application initialization, and not
|
83
|
+
to create prepared statements dynamically at runtime.
|
84
|
+
|
78
85
|
== Database support
|
79
86
|
|
80
87
|
=== PostgreSQL
|
@@ -0,0 +1,105 @@
|
|
1
|
+
= New Features
|
2
|
+
|
3
|
+
* A core_refinements extension has been added, which offers
|
4
|
+
refinement versions of Sequel's core extensions. This requires
|
5
|
+
the new experimental refinement support added in ruby 2.0, and
|
6
|
+
allows you to use the Sequel DSL methods in a file without
|
7
|
+
actually modifying the Symbol, String, Array, and Hash classes.
|
8
|
+
|
9
|
+
* A date_arithmetic extension has been added for performing
|
10
|
+
database-independent date calculations (adding/subtracting an
|
11
|
+
interval to/from a date):
|
12
|
+
|
13
|
+
Sequel.extension :date_arithmetic
|
14
|
+
e = Sequel.date_add(:date_column, :years=>1, :months=>2, :days=>3)
|
15
|
+
DB[:table].where(e > Sequel::CURRENT_DATE)
|
16
|
+
|
17
|
+
In addition to providing the interval as a hash, you can also
|
18
|
+
provide it as an ActiveSupport::Duration object. This extension
|
19
|
+
is supported on 11 database types.
|
20
|
+
|
21
|
+
* Dataset#get can now take an array of multiple expressions to get
|
22
|
+
an array of values, similar to map/select_map:
|
23
|
+
|
24
|
+
value1, value2 = DB[:table].get([:column1, :column2])
|
25
|
+
|
26
|
+
* Sequel can now handle [host.]database.schema.table qualified
|
27
|
+
tables on Microsoft SQL Server. To implement this support,
|
28
|
+
the split_qualifiers method has been added to Database and
|
29
|
+
Dataset for taking a possibly qualified identifier and splitting
|
30
|
+
it into an array of identifier strings.
|
31
|
+
|
32
|
+
* The string_stripper plugin now offers the ability to manually
|
33
|
+
specify which columns to skip stripping for via
|
34
|
+
Model.skip_string_stripping.
|
35
|
+
|
36
|
+
= Other Improvements
|
37
|
+
|
38
|
+
* The jdbc adapter now works with the new jdbc-* gems, which require
|
39
|
+
a manual load_driver step that the older jdbc-* gems did not
|
40
|
+
require.
|
41
|
+
|
42
|
+
* The string_stripper plugin no longer strips blob columns or values.
|
43
|
+
|
44
|
+
* Database#copy_into in both the postgres and jdbc/postgres adapters
|
45
|
+
has been fixed to better handle exceptions.
|
46
|
+
|
47
|
+
* Dataset#hash and Model#hash are now significantly faster.
|
48
|
+
|
49
|
+
* Lambda procs with 0 arity can now be used as virtual row blocks
|
50
|
+
on ruby 1.9. Previously, attempting to use a lambda proc with
|
51
|
+
0 arity as a virtual row block on ruby 1.9 would raise an exception.
|
52
|
+
|
53
|
+
* Schema-qualified composite types are now handled correctly in
|
54
|
+
the pg_row extension.
|
55
|
+
|
56
|
+
* Database#reset_primary_key_sequence on PostgreSQL now works
|
57
|
+
correctly when a default_schema is set.
|
58
|
+
|
59
|
+
* tinyint(1) unsigned columns on MySQL are now parsed as booleans
|
60
|
+
instead of integers on MySQL if converting tinyint to boolean.
|
61
|
+
|
62
|
+
* The jdbc adapter now supports the jdbc-hsqldb gem, so you can
|
63
|
+
now install that instead of having to require the .jar manually.
|
64
|
+
|
65
|
+
* Blobs are now casted correctly on DB2 when the use_clob_as_blob
|
66
|
+
setting is false.
|
67
|
+
|
68
|
+
* Oracle timestamptz types are now handled correctly in the
|
69
|
+
jdbc/oracle adapter.
|
70
|
+
|
71
|
+
* Sequel now defaults to :prefetch_rows = 100 in the oracle
|
72
|
+
adapter, which can significantly improve performance.
|
73
|
+
|
74
|
+
* Sequel now defines respond_to_missing? where method_missing? is
|
75
|
+
defined and the object also responds to respond_to?.
|
76
|
+
|
77
|
+
* Sequel::BasicObject now responds to instance_exec on ruby 1.8.
|
78
|
+
|
79
|
+
= Backwards Compatibility
|
80
|
+
|
81
|
+
* The meta_def method that was defined on Database, Dataset, and
|
82
|
+
Model classes and instances has been moved to an extension named
|
83
|
+
meta_def, and is no longer loaded by default. This method was
|
84
|
+
previously used internally, and it wasn't designed for external
|
85
|
+
use. If you have code that uses meta_def, you should now load the
|
86
|
+
extension manually:
|
87
|
+
|
88
|
+
Sequel.extension :meta_def
|
89
|
+
|
90
|
+
* The private _*_dataset_helper model association methods are no
|
91
|
+
longer defined. The AssociationReflection#dataset_helper_method
|
92
|
+
public method is also no longer defined.
|
93
|
+
|
94
|
+
* Dataset#schema_and_table now always returns strings (or nil).
|
95
|
+
Before, in some cases it would return symbols.
|
96
|
+
|
97
|
+
* Using a conditions specifier array with Dataset#get no longer
|
98
|
+
works due to the new multiple values support in Database#get.
|
99
|
+
So code such as:
|
100
|
+
|
101
|
+
DB[:table].get([[:a, 1], [:b, 2]])
|
102
|
+
|
103
|
+
should be changed to:
|
104
|
+
|
105
|
+
DB[:table].get(Sequel.expr([[:a, 1], [:b, 2]]))
|
@@ -162,6 +162,25 @@ column, but create a foreign key constraint:
|
|
162
162
|
foreign_key [:artist_name, :artist_location], :artists
|
163
163
|
end
|
164
164
|
|
165
|
+
When using an array of symbols, you can also provide a :name option to name the constraint:
|
166
|
+
|
167
|
+
create_table(:albums) do
|
168
|
+
String :artist_name
|
169
|
+
String :artist_location
|
170
|
+
String :name
|
171
|
+
foreign_key [:artist_name, :artist_location], :artists, :name=>'albums_artist_name_location_fkey'
|
172
|
+
end
|
173
|
+
|
174
|
+
If you want to add a foreign key for a single column with a named constraint, you must use
|
175
|
+
the array form with a single symbol:
|
176
|
+
|
177
|
+
create_table(:albums) do
|
178
|
+
primary_key :id
|
179
|
+
Integer :artist_id
|
180
|
+
String :name
|
181
|
+
foreign_key [:artist_id], :artists, :name=>'albums_artist_id_fkey'
|
182
|
+
end
|
183
|
+
|
165
184
|
==== +index+
|
166
185
|
|
167
186
|
+index+ creates indexes on the table. For single columns, calling index is the same as using the
|
@@ -20,7 +20,7 @@ module Sequel
|
|
20
20
|
|
21
21
|
# Recognize the tinyint(1) column as boolean.
|
22
22
|
def schema_column_type(db_type)
|
23
|
-
db_type
|
23
|
+
db_type =~ /\Atinyint\(1\)/ ? :boolean : super
|
24
24
|
end
|
25
25
|
|
26
26
|
# Apply the connectiong setting SQLs for every new connection.
|
data/lib/sequel/adapters/jdbc.rb
CHANGED
@@ -33,14 +33,14 @@ module Sequel
|
|
33
33
|
Sequel.ts_require 'adapters/jdbc/postgresql'
|
34
34
|
db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
|
35
35
|
db.dataset_class = Sequel::JDBC::Postgres::Dataset
|
36
|
-
JDBC.load_gem(
|
36
|
+
JDBC.load_gem(:Postgres)
|
37
37
|
org.postgresql.Driver
|
38
38
|
end,
|
39
39
|
:mysql=>proc do |db|
|
40
40
|
Sequel.ts_require 'adapters/jdbc/mysql'
|
41
41
|
db.extend(Sequel::JDBC::MySQL::DatabaseMethods)
|
42
42
|
db.extend_datasets Sequel::MySQL::DatasetMethods
|
43
|
-
JDBC.load_gem(
|
43
|
+
JDBC.load_gem(:MySQL)
|
44
44
|
com.mysql.jdbc.Driver
|
45
45
|
end,
|
46
46
|
:sqlite=>proc do |db|
|
@@ -48,7 +48,7 @@ module Sequel
|
|
48
48
|
db.extend(Sequel::JDBC::SQLite::DatabaseMethods)
|
49
49
|
db.extend_datasets Sequel::SQLite::DatasetMethods
|
50
50
|
db.set_integer_booleans
|
51
|
-
JDBC.load_gem(
|
51
|
+
JDBC.load_gem(:SQLite3)
|
52
52
|
org.sqlite.JDBC
|
53
53
|
end,
|
54
54
|
:oracle=>proc do |db|
|
@@ -69,28 +69,28 @@ module Sequel
|
|
69
69
|
db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
|
70
70
|
db.dataset_class = Sequel::JDBC::JTDS::Dataset
|
71
71
|
db.send(:set_mssql_unicode_strings)
|
72
|
-
JDBC.load_gem(
|
72
|
+
JDBC.load_gem(:JTDS)
|
73
73
|
Java::net.sourceforge.jtds.jdbc.Driver
|
74
74
|
end,
|
75
75
|
:h2=>proc do |db|
|
76
76
|
Sequel.ts_require 'adapters/jdbc/h2'
|
77
77
|
db.extend(Sequel::JDBC::H2::DatabaseMethods)
|
78
78
|
db.dataset_class = Sequel::JDBC::H2::Dataset
|
79
|
-
JDBC.load_gem(
|
79
|
+
JDBC.load_gem(:H2)
|
80
80
|
org.h2.Driver
|
81
81
|
end,
|
82
82
|
:hsqldb=>proc do |db|
|
83
83
|
Sequel.ts_require 'adapters/jdbc/hsqldb'
|
84
84
|
db.extend(Sequel::JDBC::HSQLDB::DatabaseMethods)
|
85
85
|
db.dataset_class = Sequel::JDBC::HSQLDB::Dataset
|
86
|
-
|
86
|
+
JDBC.load_gem(:HSQLDB)
|
87
87
|
org.hsqldb.jdbcDriver
|
88
88
|
end,
|
89
89
|
:derby=>proc do |db|
|
90
90
|
Sequel.ts_require 'adapters/jdbc/derby'
|
91
91
|
db.extend(Sequel::JDBC::Derby::DatabaseMethods)
|
92
92
|
db.dataset_class = Sequel::JDBC::Derby::Dataset
|
93
|
-
JDBC.load_gem(
|
93
|
+
JDBC.load_gem(:Derby)
|
94
94
|
org.apache.derby.jdbc.EmbeddedDriver
|
95
95
|
end,
|
96
96
|
:as400=>proc do |db|
|
@@ -135,9 +135,14 @@ module Sequel
|
|
135
135
|
# works for PostgreSQL, MySQL, and SQLite.
|
136
136
|
def self.load_gem(name)
|
137
137
|
begin
|
138
|
-
Sequel.tsk_require "jdbc/#{name}"
|
138
|
+
Sequel.tsk_require "jdbc/#{name.to_s.downcase}"
|
139
139
|
rescue LoadError
|
140
140
|
# jdbc gem not used, hopefully the user has the .jar in their CLASSPATH
|
141
|
+
else
|
142
|
+
if defined?(::Jdbc) && ( ::Jdbc.const_defined?(name) rescue nil )
|
143
|
+
jdbc_module = ::Jdbc.const_get(name) # e.g. Jdbc::SQLite3
|
144
|
+
jdbc_module.load_driver if jdbc_module.respond_to?(:load_driver)
|
145
|
+
end
|
141
146
|
end
|
142
147
|
end
|
143
148
|
|
@@ -97,10 +97,16 @@ module Sequel
|
|
97
97
|
db.to_application_timestamp(v.to_string)
|
98
98
|
end
|
99
99
|
|
100
|
+
def convert_type_oracle_timestamptz(v)
|
101
|
+
convert_type_oracle_timestamp(db.synchronize{|c| v.timestampValue(c)})
|
102
|
+
end
|
103
|
+
|
100
104
|
def convert_type_proc(v)
|
101
105
|
case v
|
102
106
|
when JAVA_BIG_DECIMAL
|
103
107
|
ORACLE_DECIMAL_METHOD
|
108
|
+
when Java::OracleSql::TIMESTAMPTZ
|
109
|
+
method(:convert_type_oracle_timestamptz)
|
104
110
|
when Java::OracleSql::TIMESTAMP
|
105
111
|
method(:convert_type_oracle_timestamp)
|
106
112
|
else
|
@@ -29,7 +29,7 @@ module Sequel
|
|
29
29
|
raise Error, "Must provide either a :data option or a block to copy_into"
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
synchronize(opts) do |conn|
|
33
33
|
begin
|
34
34
|
copy_manager = org.postgresql.copy.CopyManager.new(conn)
|
35
35
|
copier = copy_manager.copy_in(copy_into_sql(table, opts))
|
@@ -41,10 +41,16 @@ module Sequel
|
|
41
41
|
data.each { |d| copier.writeToCopy(d.to_java_bytes, 0, d.length) }
|
42
42
|
end
|
43
43
|
rescue Exception => e
|
44
|
-
copier.
|
44
|
+
copier.cancelCopy
|
45
45
|
raise
|
46
46
|
ensure
|
47
|
-
|
47
|
+
unless e
|
48
|
+
begin
|
49
|
+
copier.endCopy
|
50
|
+
rescue NativeException => e2
|
51
|
+
raise_error(e2)
|
52
|
+
end
|
53
|
+
end
|
48
54
|
end
|
49
55
|
end
|
50
56
|
end
|
@@ -275,7 +275,7 @@ module Sequel
|
|
275
275
|
|
276
276
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
277
277
|
def schema_column_type(db_type)
|
278
|
-
convert_tinyint_to_bool && db_type
|
278
|
+
convert_tinyint_to_bool && db_type =~ /\Atinyint\(1\)/ ? :boolean : super
|
279
279
|
end
|
280
280
|
end
|
281
281
|
|
@@ -124,7 +124,7 @@ module Sequel
|
|
124
124
|
|
125
125
|
# Convert tinyint(1) type to boolean if convert_tinyint_to_bool is true
|
126
126
|
def schema_column_type(db_type)
|
127
|
-
convert_tinyint_to_bool && db_type
|
127
|
+
convert_tinyint_to_bool && db_type =~ /\Atinyint\(1\)/ ? :boolean : super
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
@@ -37,7 +37,7 @@ module Sequel
|
|
37
37
|
dbname = opts[:host]
|
38
38
|
end
|
39
39
|
conn = OCI8.new(opts[:user], opts[:password], dbname, opts[:privilege])
|
40
|
-
conn.prefetch_rows = typecast_value_integer(opts
|
40
|
+
conn.prefetch_rows = typecast_value_integer(opts.fetch(:prefetch_rows, 100))
|
41
41
|
conn.autocommit = true
|
42
42
|
conn.non_blocking = true
|
43
43
|
|
@@ -328,10 +328,12 @@ module Sequel
|
|
328
328
|
end
|
329
329
|
rescue Exception => e
|
330
330
|
conn.put_copy_end("ruby exception occurred while copying data into PostgreSQL")
|
331
|
-
raise
|
332
331
|
ensure
|
333
332
|
conn.put_copy_end unless e
|
334
|
-
conn.get_result
|
333
|
+
while res = conn.get_result
|
334
|
+
raise e if e
|
335
|
+
check_database_errors{res.check}
|
336
|
+
end
|
335
337
|
end
|
336
338
|
end
|
337
339
|
end
|
@@ -216,6 +216,9 @@ module Sequel
|
|
216
216
|
FETCH_FIRST = " FETCH FIRST ".freeze
|
217
217
|
ROWS_ONLY = " ROWS ONLY".freeze
|
218
218
|
EMPTY_FROM_TABLE = ' FROM "SYSIBM"."SYSDUMMY1"'.freeze
|
219
|
+
HSTAR = "H*".freeze
|
220
|
+
BLOB_OPEN = "BLOB(X'".freeze
|
221
|
+
BLOB_CLOSE = "')".freeze
|
219
222
|
|
220
223
|
# DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
|
221
224
|
def cast_sql_append(sql, expr, type)
|
@@ -316,6 +319,15 @@ module Sequel
|
|
316
319
|
BOOL_TRUE
|
317
320
|
end
|
318
321
|
|
322
|
+
# DB2 uses a literal hexidecimal number for blob strings
|
323
|
+
def literal_blob_append(sql, v)
|
324
|
+
if ::Sequel::DB2.use_clob_as_blob
|
325
|
+
super
|
326
|
+
else
|
327
|
+
sql << BLOB_OPEN << v.unpack(HSTAR).first << BLOB_CLOSE
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
319
331
|
# Add a fallback table for empty from situation
|
320
332
|
def select_from_sql(sql)
|
321
333
|
@opts[:from] ? super : (sql << EMPTY_FROM_TABLE)
|