sequel 3.48.0 → 4.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG +114 -0
- data/Rakefile +10 -7
- data/doc/association_basics.rdoc +25 -23
- data/doc/code_order.rdoc +7 -0
- data/doc/core_extensions.rdoc +0 -10
- data/doc/object_model.rdoc +4 -1
- data/doc/querying.rdoc +3 -3
- data/doc/release_notes/4.0.0.txt +262 -0
- data/doc/security.rdoc +0 -28
- data/doc/testing.rdoc +8 -14
- data/lib/sequel/adapters/ado.rb +7 -11
- data/lib/sequel/adapters/ado/access.rb +8 -8
- data/lib/sequel/adapters/ado/mssql.rb +4 -4
- data/lib/sequel/adapters/amalgalite.rb +6 -6
- data/lib/sequel/adapters/cubrid.rb +7 -7
- data/lib/sequel/adapters/db2.rb +5 -9
- data/lib/sequel/adapters/dbi.rb +2 -6
- data/lib/sequel/adapters/do.rb +4 -4
- data/lib/sequel/adapters/firebird.rb +4 -4
- data/lib/sequel/adapters/ibmdb.rb +8 -8
- data/lib/sequel/adapters/informix.rb +2 -10
- data/lib/sequel/adapters/jdbc.rb +17 -17
- data/lib/sequel/adapters/jdbc/as400.rb +2 -2
- data/lib/sequel/adapters/jdbc/cubrid.rb +1 -1
- data/lib/sequel/adapters/jdbc/db2.rb +1 -1
- data/lib/sequel/adapters/jdbc/derby.rb +1 -1
- data/lib/sequel/adapters/jdbc/h2.rb +2 -2
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -1
- data/lib/sequel/adapters/jdbc/informix.rb +1 -1
- data/lib/sequel/adapters/jdbc/mssql.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
- data/lib/sequel/adapters/jdbc/oracle.rb +5 -1
- data/lib/sequel/adapters/jdbc/postgresql.rb +3 -3
- data/lib/sequel/adapters/jdbc/sqlite.rb +3 -3
- data/lib/sequel/adapters/jdbc/transactions.rb +3 -3
- data/lib/sequel/adapters/mock.rb +7 -7
- data/lib/sequel/adapters/mysql.rb +3 -3
- data/lib/sequel/adapters/mysql2.rb +4 -4
- data/lib/sequel/adapters/odbc.rb +2 -6
- data/lib/sequel/adapters/odbc/mssql.rb +1 -1
- data/lib/sequel/adapters/openbase.rb +1 -5
- data/lib/sequel/adapters/oracle.rb +13 -17
- data/lib/sequel/adapters/postgres.rb +20 -25
- data/lib/sequel/adapters/shared/cubrid.rb +3 -3
- data/lib/sequel/adapters/shared/db2.rb +2 -2
- data/lib/sequel/adapters/shared/firebird.rb +7 -7
- data/lib/sequel/adapters/shared/mssql.rb +9 -9
- data/lib/sequel/adapters/shared/mysql.rb +29 -13
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +7 -7
- data/lib/sequel/adapters/shared/oracle.rb +22 -13
- data/lib/sequel/adapters/shared/postgres.rb +61 -46
- data/lib/sequel/adapters/shared/sqlite.rb +9 -9
- data/lib/sequel/adapters/sqlite.rb +17 -11
- data/lib/sequel/adapters/swift.rb +3 -3
- data/lib/sequel/adapters/swift/mysql.rb +1 -1
- data/lib/sequel/adapters/swift/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +8 -8
- data/lib/sequel/ast_transformer.rb +3 -1
- data/lib/sequel/connection_pool.rb +4 -2
- data/lib/sequel/connection_pool/sharded_single.rb +2 -2
- data/lib/sequel/connection_pool/sharded_threaded.rb +5 -5
- data/lib/sequel/connection_pool/threaded.rb +7 -7
- data/lib/sequel/core.rb +4 -67
- data/lib/sequel/database.rb +1 -0
- data/lib/sequel/database/connecting.rb +2 -8
- data/lib/sequel/database/dataset.rb +2 -7
- data/lib/sequel/database/dataset_defaults.rb +0 -18
- data/lib/sequel/database/features.rb +4 -4
- data/lib/sequel/database/misc.rb +6 -8
- data/lib/sequel/database/query.rb +5 -61
- data/lib/sequel/database/schema_generator.rb +22 -20
- data/lib/sequel/database/schema_methods.rb +48 -20
- data/lib/sequel/database/transactions.rb +7 -17
- data/lib/sequel/dataset.rb +2 -0
- data/lib/sequel/dataset/actions.rb +23 -91
- data/lib/sequel/dataset/features.rb +1 -4
- data/lib/sequel/dataset/graph.rb +3 -47
- data/lib/sequel/dataset/misc.rb +4 -33
- data/lib/sequel/dataset/prepared_statements.rb +3 -1
- data/lib/sequel/dataset/query.rb +116 -240
- data/lib/sequel/dataset/sql.rb +19 -97
- data/lib/sequel/deprecated.rb +0 -16
- data/lib/sequel/exceptions.rb +0 -3
- data/lib/sequel/extensions/_pretty_table.rb +1 -1
- data/lib/sequel/extensions/columns_introspection.rb +1 -12
- data/lib/sequel/extensions/constraint_validations.rb +3 -3
- data/lib/sequel/extensions/core_extensions.rb +0 -9
- data/lib/sequel/extensions/date_arithmetic.rb +1 -2
- data/lib/sequel/extensions/graph_each.rb +11 -0
- data/lib/sequel/extensions/migration.rb +5 -5
- data/lib/sequel/extensions/null_dataset.rb +11 -13
- data/lib/sequel/extensions/pagination.rb +3 -6
- data/lib/sequel/extensions/pg_array.rb +6 -4
- data/lib/sequel/extensions/pg_array_ops.rb +35 -1
- data/lib/sequel/extensions/pg_json.rb +12 -2
- data/lib/sequel/extensions/pg_json_ops.rb +266 -0
- data/lib/sequel/extensions/pg_range.rb +2 -2
- data/lib/sequel/extensions/pg_range_ops.rb +0 -8
- data/lib/sequel/extensions/pg_row.rb +2 -2
- data/lib/sequel/extensions/pretty_table.rb +0 -4
- data/lib/sequel/extensions/query.rb +3 -8
- data/lib/sequel/extensions/schema_caching.rb +0 -7
- data/lib/sequel/extensions/schema_dumper.rb +10 -17
- data/lib/sequel/extensions/select_remove.rb +0 -4
- data/lib/sequel/extensions/set_overrides.rb +28 -0
- data/lib/sequel/extensions/to_dot.rb +6 -10
- data/lib/sequel/model.rb +6 -7
- data/lib/sequel/model/associations.rb +127 -182
- data/lib/sequel/model/base.rb +88 -211
- data/lib/sequel/model/errors.rb +0 -13
- data/lib/sequel/model/plugins.rb +2 -2
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/after_initialize.rb +11 -17
- data/lib/sequel/plugins/association_autoreloading.rb +1 -47
- data/lib/sequel/plugins/association_dependencies.rb +2 -2
- data/lib/sequel/plugins/auto_validations.rb +2 -8
- data/lib/sequel/plugins/blacklist_security.rb +32 -2
- data/lib/sequel/plugins/caching.rb +1 -1
- data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
- data/lib/sequel/plugins/composition.rb +10 -8
- data/lib/sequel/plugins/constraint_validations.rb +2 -2
- data/lib/sequel/plugins/dataset_associations.rb +4 -0
- data/lib/sequel/plugins/defaults_setter.rb +8 -6
- data/lib/sequel/plugins/dirty.rb +6 -6
- data/lib/sequel/plugins/force_encoding.rb +13 -8
- data/lib/sequel/plugins/hook_class_methods.rb +1 -7
- data/lib/sequel/plugins/json_serializer.rb +13 -74
- data/lib/sequel/plugins/lazy_attributes.rb +2 -4
- data/lib/sequel/plugins/list.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +4 -11
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +1 -49
- data/lib/sequel/plugins/nested_attributes.rb +1 -1
- data/lib/sequel/plugins/optimistic_locking.rb +3 -5
- data/lib/sequel/plugins/pg_array_associations.rb +453 -0
- data/lib/sequel/plugins/pg_typecast_on_load.rb +23 -7
- data/lib/sequel/plugins/prepared_statements.rb +1 -1
- data/lib/sequel/plugins/prepared_statements_associations.rb +20 -14
- data/lib/sequel/plugins/prepared_statements_safe.rb +2 -2
- data/lib/sequel/plugins/rcte_tree.rb +1 -1
- data/lib/sequel/plugins/serialization.rb +5 -4
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +7 -1
- data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/touch.rb +2 -2
- data/lib/sequel/plugins/tree.rb +1 -1
- data/lib/sequel/plugins/typecast_on_load.rb +19 -4
- data/lib/sequel/plugins/validation_class_methods.rb +0 -30
- data/lib/sequel/plugins/validation_helpers.rb +13 -31
- data/lib/sequel/plugins/xml_serializer.rb +18 -57
- data/lib/sequel/sql.rb +20 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapters/db2_spec.rb +14 -23
- data/spec/adapters/firebird_spec.rb +25 -29
- data/spec/adapters/informix_spec.rb +11 -14
- data/spec/adapters/mssql_spec.rb +71 -77
- data/spec/adapters/mysql_spec.rb +165 -172
- data/spec/adapters/oracle_spec.rb +36 -39
- data/spec/adapters/postgres_spec.rb +175 -100
- data/spec/adapters/spec_helper.rb +13 -11
- data/spec/adapters/sqlite_spec.rb +36 -44
- data/spec/core/connection_pool_spec.rb +2 -1
- data/spec/core/database_spec.rb +55 -55
- data/spec/core/dataset_spec.rb +45 -249
- data/spec/core/deprecated_spec.rb +0 -8
- data/spec/core/expression_filters_spec.rb +23 -5
- data/spec/core/object_graph_spec.rb +4 -66
- data/spec/core/schema_spec.rb +35 -12
- data/spec/core/spec_helper.rb +3 -2
- data/spec/core_extensions_spec.rb +17 -19
- data/spec/extensions/arbitrary_servers_spec.rb +2 -3
- data/spec/extensions/association_dependencies_spec.rb +14 -14
- data/spec/extensions/auto_validations_spec.rb +7 -0
- data/spec/extensions/blacklist_security_spec.rb +5 -5
- data/spec/extensions/blank_spec.rb +2 -0
- data/spec/extensions/class_table_inheritance_spec.rb +2 -2
- data/spec/extensions/columns_introspection_spec.rb +2 -29
- data/spec/extensions/composition_spec.rb +10 -17
- data/spec/extensions/core_refinements_spec.rb +5 -1
- data/spec/extensions/dataset_associations_spec.rb +18 -0
- data/spec/extensions/date_arithmetic_spec.rb +2 -2
- data/spec/extensions/defaults_setter_spec.rb +9 -9
- data/spec/extensions/dirty_spec.rb +0 -5
- data/spec/extensions/eval_inspect_spec.rb +2 -0
- data/spec/extensions/force_encoding_spec.rb +2 -18
- data/spec/extensions/hash_aliases_spec.rb +8 -0
- data/spec/extensions/hook_class_methods_spec.rb +39 -58
- data/spec/extensions/inflector_spec.rb +2 -0
- data/spec/extensions/instance_filters_spec.rb +8 -8
- data/spec/extensions/json_serializer_spec.rb +1 -41
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +106 -109
- data/spec/extensions/migration_spec.rb +2 -0
- data/spec/extensions/named_timezones_spec.rb +1 -0
- data/spec/extensions/pg_array_associations_spec.rb +603 -0
- data/spec/extensions/pg_array_ops_spec.rb +25 -0
- data/spec/extensions/pg_array_spec.rb +9 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +13 -0
- data/spec/extensions/pg_hstore_spec.rb +1 -0
- data/spec/extensions/pg_json_ops_spec.rb +131 -0
- data/spec/extensions/pg_json_spec.rb +10 -4
- data/spec/extensions/pg_range_ops_spec.rb +2 -5
- data/spec/extensions/pg_range_spec.rb +6 -2
- data/spec/extensions/pg_row_ops_spec.rb +2 -0
- data/spec/extensions/prepared_statements_associations_spec.rb +26 -5
- data/spec/extensions/rcte_tree_spec.rb +15 -15
- data/spec/extensions/schema_dumper_spec.rb +0 -1
- data/spec/extensions/schema_spec.rb +9 -9
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +18 -29
- data/spec/extensions/set_overrides_spec.rb +4 -0
- data/spec/extensions/{many_to_one_pk_lookup_spec.rb → shared_caching_spec.rb} +1 -4
- data/spec/extensions/single_table_inheritance_spec.rb +4 -4
- data/spec/extensions/spec_helper.rb +8 -9
- data/spec/extensions/sql_expr_spec.rb +2 -0
- data/spec/extensions/string_date_time_spec.rb +2 -0
- data/spec/extensions/string_stripper_spec.rb +2 -0
- data/spec/extensions/tactical_eager_loading_spec.rb +12 -12
- data/spec/extensions/thread_local_timezones_spec.rb +2 -0
- data/spec/extensions/timestamps_spec.rb +1 -1
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +24 -24
- data/spec/extensions/tree_spec.rb +7 -7
- data/spec/extensions/typecast_on_load_spec.rb +8 -1
- data/spec/extensions/update_primary_key_spec.rb +10 -10
- data/spec/extensions/validation_class_methods_spec.rb +10 -39
- data/spec/extensions/validation_helpers_spec.rb +29 -47
- data/spec/extensions/xml_serializer_spec.rb +1 -23
- data/spec/integration/associations_test.rb +231 -40
- data/spec/integration/database_test.rb +1 -1
- data/spec/integration/dataset_test.rb +64 -64
- data/spec/integration/eager_loader_test.rb +28 -28
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +2 -2
- data/spec/integration/plugin_test.rb +21 -21
- data/spec/integration/prepared_statement_test.rb +7 -7
- data/spec/integration/schema_test.rb +115 -110
- data/spec/integration/spec_helper.rb +17 -27
- data/spec/integration/timezone_test.rb +1 -1
- data/spec/integration/transaction_test.rb +10 -10
- data/spec/integration/type_test.rb +2 -2
- data/spec/model/association_reflection_spec.rb +2 -28
- data/spec/model/associations_spec.rb +239 -188
- data/spec/model/base_spec.rb +27 -68
- data/spec/model/dataset_methods_spec.rb +4 -4
- data/spec/model/eager_loading_spec.rb +160 -172
- data/spec/model/hooks_spec.rb +62 -79
- data/spec/model/model_spec.rb +36 -51
- data/spec/model/plugins_spec.rb +5 -19
- data/spec/model/record_spec.rb +125 -151
- data/spec/model/spec_helper.rb +8 -6
- data/spec/model/validations_spec.rb +4 -17
- data/spec/spec_config.rb +2 -10
- metadata +50 -56
- data/lib/sequel/deprecated_core_extensions.rb +0 -135
- data/lib/sequel/extensions/pg_auto_parameterize.rb +0 -185
- data/lib/sequel/extensions/pg_statement_cache.rb +0 -318
- data/lib/sequel/plugins/identity_map.rb +0 -260
- data/lib/sequel_core.rb +0 -2
- data/lib/sequel_model.rb +0 -2
- data/spec/extensions/association_autoreloading_spec.rb +0 -102
- data/spec/extensions/identity_map_spec.rb +0 -337
- data/spec/extensions/pg_auto_parameterize_spec.rb +0 -70
- data/spec/extensions/pg_statement_cache_spec.rb +0 -208
- data/spec/rcov.opts +0 -8
- data/spec/spec_config.rb.example +0 -10
|
@@ -151,12 +151,12 @@ module Sequel
|
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
# Return the number of matched rows when executing a delete/update statement.
|
|
154
|
-
def execute_dui(sql, opts=
|
|
154
|
+
def execute_dui(sql, opts=OPTS)
|
|
155
155
|
execute(sql, opts){|c| return affected_rows(c)}
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
# Return the last inserted id when executing an insert statement.
|
|
159
|
-
def execute_insert(sql, opts=
|
|
159
|
+
def execute_insert(sql, opts=OPTS)
|
|
160
160
|
execute(sql, opts){|c| return c.insert_id}
|
|
161
161
|
end
|
|
162
162
|
|
|
@@ -347,7 +347,7 @@ module Sequel
|
|
|
347
347
|
end
|
|
348
348
|
|
|
349
349
|
# Set the :type option to :select if it hasn't been set.
|
|
350
|
-
def execute(sql, opts=
|
|
350
|
+
def execute(sql, opts=OPTS, &block)
|
|
351
351
|
super(sql, {:type=>:select}.merge(opts), &block)
|
|
352
352
|
end
|
|
353
353
|
|
|
@@ -51,12 +51,12 @@ module Sequel
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
# Return the number of matched rows when executing a delete/update statement.
|
|
54
|
-
def execute_dui(sql, opts=
|
|
54
|
+
def execute_dui(sql, opts=OPTS)
|
|
55
55
|
execute(sql, opts){|c| return c.affected_rows}
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# Return the last inserted id when executing an insert statement.
|
|
59
|
-
def execute_insert(sql, opts=
|
|
59
|
+
def execute_insert(sql, opts=OPTS)
|
|
60
60
|
execute(sql, opts){|c| return c.last_id}
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -155,13 +155,13 @@ module Sequel
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
# Set the :type option to :select if it hasn't been set.
|
|
158
|
-
def execute(sql, opts=
|
|
158
|
+
def execute(sql, opts=OPTS, &block)
|
|
159
159
|
super(sql, {:type=>:select}.merge(opts), &block)
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
# Handle correct quoting of strings using ::Mysql2::Client#escape.
|
|
163
163
|
def literal_string_append(sql, v)
|
|
164
|
-
sql <<
|
|
164
|
+
sql << APOS << db.synchronize(@opts[:server]){|c| c.escape(v)} << APOS
|
|
165
165
|
end
|
|
166
166
|
end
|
|
167
167
|
end
|
data/lib/sequel/adapters/odbc.rb
CHANGED
|
@@ -33,7 +33,7 @@ module Sequel
|
|
|
33
33
|
c.disconnect
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
def execute(sql, opts=
|
|
36
|
+
def execute(sql, opts=OPTS)
|
|
37
37
|
synchronize(opts[:server]) do |conn|
|
|
38
38
|
begin
|
|
39
39
|
r = log_yield(sql){conn.run(sql)}
|
|
@@ -47,7 +47,7 @@ module Sequel
|
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
def execute_dui(sql, opts=
|
|
50
|
+
def execute_dui(sql, opts=OPTS)
|
|
51
51
|
synchronize(opts[:server]) do |conn|
|
|
52
52
|
begin
|
|
53
53
|
log_yield(sql){conn.do(sql)}
|
|
@@ -56,10 +56,6 @@ module Sequel
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
|
-
def do(*a, &block)
|
|
60
|
-
Sequel::Deprecation.deprecate('Database#do', 'Please use Database#execute_dui')
|
|
61
|
-
execute_dui(*a, &block)
|
|
62
|
-
end
|
|
63
59
|
|
|
64
60
|
private
|
|
65
61
|
|
|
@@ -11,7 +11,7 @@ module Sequel
|
|
|
11
11
|
LAST_INSERT_ID_SQL='SELECT SCOPE_IDENTITY()'.freeze
|
|
12
12
|
|
|
13
13
|
# Return the last inserted identity value.
|
|
14
|
-
def execute_insert(sql, opts=
|
|
14
|
+
def execute_insert(sql, opts=OPTS)
|
|
15
15
|
synchronize(opts[:server]) do |conn|
|
|
16
16
|
begin
|
|
17
17
|
log_yield(sql){conn.do(sql)}
|
|
@@ -19,17 +19,13 @@ module Sequel
|
|
|
19
19
|
c.disconnect
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def execute(sql, opts=
|
|
22
|
+
def execute(sql, opts=OPTS)
|
|
23
23
|
synchronize(opts[:server]) do |conn|
|
|
24
24
|
r = log_yield(sql){conn.execute(sql)}
|
|
25
25
|
yield(r) if block_given?
|
|
26
26
|
r
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
def do(*a, &block)
|
|
30
|
-
Sequel::Deprecation.deprecate('Database#do', 'Please use Database#execute')
|
|
31
|
-
execute(*a, &block)
|
|
32
|
-
end
|
|
33
29
|
end
|
|
34
30
|
|
|
35
31
|
class Dataset < Sequel::Dataset
|
|
@@ -61,21 +61,17 @@ module Sequel
|
|
|
61
61
|
nil
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
def execute(sql, opts=
|
|
64
|
+
def execute(sql, opts=OPTS, &block)
|
|
65
65
|
_execute(nil, sql, opts, &block)
|
|
66
66
|
end
|
|
67
|
-
def do(*a, &block)
|
|
68
|
-
Sequel::Deprecation.deprecate('Database#do', 'Please use Database#execute')
|
|
69
|
-
execute_dui(*a, &block)
|
|
70
|
-
end
|
|
71
67
|
|
|
72
|
-
def execute_insert(sql, opts=
|
|
68
|
+
def execute_insert(sql, opts=OPTS)
|
|
73
69
|
_execute(:insert, sql, opts)
|
|
74
70
|
end
|
|
75
71
|
|
|
76
72
|
private
|
|
77
73
|
|
|
78
|
-
def _execute(type, sql, opts=
|
|
74
|
+
def _execute(type, sql, opts=OPTS, &block)
|
|
79
75
|
synchronize(opts[:server]) do |conn|
|
|
80
76
|
begin
|
|
81
77
|
return execute_prepared_statement(conn, type, sql, opts, &block) if sql.is_a?(Symbol)
|
|
@@ -214,12 +210,12 @@ module Sequel
|
|
|
214
210
|
end
|
|
215
211
|
end
|
|
216
212
|
|
|
217
|
-
def begin_transaction(conn, opts=
|
|
213
|
+
def begin_transaction(conn, opts=OPTS)
|
|
218
214
|
log_yield(TRANSACTION_BEGIN){conn.autocommit = false}
|
|
219
215
|
set_transaction_isolation(conn, opts)
|
|
220
216
|
end
|
|
221
217
|
|
|
222
|
-
def commit_transaction(conn, opts=
|
|
218
|
+
def commit_transaction(conn, opts=OPTS)
|
|
223
219
|
log_yield(TRANSACTION_COMMIT){conn.commit}
|
|
224
220
|
end
|
|
225
221
|
|
|
@@ -251,11 +247,11 @@ module Sequel
|
|
|
251
247
|
super
|
|
252
248
|
end
|
|
253
249
|
|
|
254
|
-
def rollback_transaction(conn, opts=
|
|
250
|
+
def rollback_transaction(conn, opts=OPTS)
|
|
255
251
|
log_yield(TRANSACTION_ROLLBACK){conn.rollback}
|
|
256
252
|
end
|
|
257
253
|
|
|
258
|
-
def schema_parse_table(table, opts=
|
|
254
|
+
def schema_parse_table(table, opts=OPTS)
|
|
259
255
|
schema, table = schema_and_table(table)
|
|
260
256
|
schema ||= opts[:schema]
|
|
261
257
|
schema_and_table = if ds = opts[:dataset]
|
|
@@ -359,17 +355,17 @@ module Sequel
|
|
|
359
355
|
|
|
360
356
|
# Run execute_select on the database with the given SQL and the stored
|
|
361
357
|
# bind arguments.
|
|
362
|
-
def execute(sql, opts=
|
|
358
|
+
def execute(sql, opts=OPTS, &block)
|
|
363
359
|
super(prepared_sql, {:arguments=>bind_arguments}.merge(opts), &block)
|
|
364
360
|
end
|
|
365
361
|
|
|
366
362
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
367
|
-
def execute_dui(sql, opts=
|
|
363
|
+
def execute_dui(sql, opts=OPTS, &block)
|
|
368
364
|
super(prepared_sql, {:arguments=>bind_arguments}.merge(opts), &block)
|
|
369
365
|
end
|
|
370
366
|
|
|
371
367
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
372
|
-
def execute_insert(sql, opts=
|
|
368
|
+
def execute_insert(sql, opts=OPTS, &block)
|
|
373
369
|
super(prepared_sql, {:arguments=>bind_arguments}.merge(opts), &block)
|
|
374
370
|
end
|
|
375
371
|
end
|
|
@@ -381,17 +377,17 @@ module Sequel
|
|
|
381
377
|
|
|
382
378
|
# Execute the stored prepared statement name and the stored bind
|
|
383
379
|
# arguments instead of the SQL given.
|
|
384
|
-
def execute(sql, opts=
|
|
380
|
+
def execute(sql, opts=OPTS, &block)
|
|
385
381
|
super(prepared_statement_name, opts, &block)
|
|
386
382
|
end
|
|
387
383
|
|
|
388
384
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
389
|
-
def execute_dui(sql, opts=
|
|
385
|
+
def execute_dui(sql, opts=OPTS, &block)
|
|
390
386
|
super(prepared_statement_name, opts, &block)
|
|
391
387
|
end
|
|
392
388
|
|
|
393
389
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
394
|
-
def execute_insert(sql, opts=
|
|
390
|
+
def execute_insert(sql, opts=OPTS, &block)
|
|
395
391
|
super(prepared_statement_name, opts, &block)
|
|
396
392
|
end
|
|
397
393
|
end
|
|
@@ -133,6 +133,9 @@ module Sequel
|
|
|
133
133
|
disconnect ||= !status_ok
|
|
134
134
|
disconnect ||= e.message =~ DISCONNECT_ERROR_RE
|
|
135
135
|
disconnect ? raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError)) : raise
|
|
136
|
+
rescue IOError, Errno::EPIPE, Errno::ECONNRESET => e
|
|
137
|
+
disconnect = true
|
|
138
|
+
raise(Sequel.convert_exception_class(e, Sequel::DatabaseDisconnectError))
|
|
136
139
|
ensure
|
|
137
140
|
block if status_ok && !disconnect
|
|
138
141
|
end
|
|
@@ -270,12 +273,12 @@ module Sequel
|
|
|
270
273
|
def disconnect_connection(conn)
|
|
271
274
|
begin
|
|
272
275
|
conn.finish
|
|
273
|
-
rescue PGError
|
|
276
|
+
rescue PGError, IOError
|
|
274
277
|
end
|
|
275
278
|
end
|
|
276
279
|
|
|
277
280
|
# Execute the given SQL with the given args on an available connection.
|
|
278
|
-
def execute(sql, opts=
|
|
281
|
+
def execute(sql, opts=OPTS, &block)
|
|
279
282
|
synchronize(opts[:server]){|conn| check_database_errors{_execute(conn, sql, opts, &block)}}
|
|
280
283
|
end
|
|
281
284
|
|
|
@@ -304,7 +307,7 @@ module Sequel
|
|
|
304
307
|
# If a block is provided, the method continually yields to the block, one yield
|
|
305
308
|
# per row. If a block is not provided, a single string is returned with all
|
|
306
309
|
# of the data.
|
|
307
|
-
def copy_table(table, opts=
|
|
310
|
+
def copy_table(table, opts=OPTS)
|
|
308
311
|
synchronize(opts[:server]) do |conn|
|
|
309
312
|
conn.execute(copy_table_sql(table, opts))
|
|
310
313
|
begin
|
|
@@ -344,7 +347,7 @@ module Sequel
|
|
|
344
347
|
#
|
|
345
348
|
# If a block is provided and :data option is not, this will yield to the block repeatedly.
|
|
346
349
|
# The block should return a string, or nil to signal that it is finished.
|
|
347
|
-
def copy_into(table, opts=
|
|
350
|
+
def copy_into(table, opts=OPTS)
|
|
348
351
|
data = opts[:data]
|
|
349
352
|
data = Array(data) if data.is_a?(String)
|
|
350
353
|
|
|
@@ -397,7 +400,7 @@ module Sequel
|
|
|
397
400
|
# * the channel the notification was sent to (as a string)
|
|
398
401
|
# * the backend pid of the notifier (as an integer),
|
|
399
402
|
# * and the payload of the notification (as a string or nil).
|
|
400
|
-
def listen(channels, opts=
|
|
403
|
+
def listen(channels, opts=OPTS, &block)
|
|
401
404
|
check_database_errors do
|
|
402
405
|
synchronize(opts[:server]) do |conn|
|
|
403
406
|
begin
|
|
@@ -503,7 +506,7 @@ module Sequel
|
|
|
503
506
|
# deallocate that statement first and then prepare this statement.
|
|
504
507
|
# If a block is given, yield the result, otherwise, return the number
|
|
505
508
|
# of rows changed.
|
|
506
|
-
def execute_prepared_statement(conn, name, opts=
|
|
509
|
+
def execute_prepared_statement(conn, name, opts=OPTS, &block)
|
|
507
510
|
ps = prepared_statement(name)
|
|
508
511
|
sql = ps.prepared_sql
|
|
509
512
|
ps_name = name.to_s
|
|
@@ -613,7 +616,7 @@ module Sequel
|
|
|
613
616
|
#
|
|
614
617
|
# This is untested with the prepared statement/bound variable support,
|
|
615
618
|
# and unlikely to work with either.
|
|
616
|
-
def use_cursor(opts=
|
|
619
|
+
def use_cursor(opts=OPTS)
|
|
617
620
|
clone(:cursor=>{:rows_per_fetch=>1000}.merge(opts))
|
|
618
621
|
end
|
|
619
622
|
|
|
@@ -636,23 +639,15 @@ module Sequel
|
|
|
636
639
|
|
|
637
640
|
private
|
|
638
641
|
|
|
639
|
-
# PostgreSQL most of the time requires type information for each of
|
|
640
|
-
# arguments to a prepared statement. Handle this by allowing the
|
|
641
|
-
# named argument to have a __* suffix, with the * being the type.
|
|
642
|
-
# In the generated SQL, cast the bound argument to that type to
|
|
643
|
-
# elminate ambiguity (and PostgreSQL from raising an exception).
|
|
644
642
|
def prepared_arg(k)
|
|
645
|
-
y
|
|
643
|
+
y = k
|
|
646
644
|
if i = prepared_args.index(y)
|
|
647
645
|
i += 1
|
|
648
646
|
else
|
|
649
647
|
prepared_args << y
|
|
650
648
|
i = prepared_args.length
|
|
651
649
|
end
|
|
652
|
-
|
|
653
|
-
Sequel::Deprecation.deprecate('Specifying prepared statement argument types via the __type suffix', "If a manual cast is really need, surround the prepared statement argument in Sequel.cast")
|
|
654
|
-
end
|
|
655
|
-
LiteralString.new("#{prepared_arg_placeholder}#{i}#{"::#{type}" if type}")
|
|
650
|
+
LiteralString.new("#{prepared_arg_placeholder}#{i}")
|
|
656
651
|
end
|
|
657
652
|
|
|
658
653
|
# Always assume a prepared argument.
|
|
@@ -669,12 +664,12 @@ module Sequel
|
|
|
669
664
|
private
|
|
670
665
|
|
|
671
666
|
# Execute the given SQL with the stored bind arguments.
|
|
672
|
-
def execute(sql, opts=
|
|
667
|
+
def execute(sql, opts=OPTS, &block)
|
|
673
668
|
super(sql, {:arguments=>bind_arguments}.merge(opts), &block)
|
|
674
669
|
end
|
|
675
670
|
|
|
676
671
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
677
|
-
def execute_dui(sql, opts=
|
|
672
|
+
def execute_dui(sql, opts=OPTS, &block)
|
|
678
673
|
super(sql, {:arguments=>bind_arguments}.merge(opts), &block)
|
|
679
674
|
end
|
|
680
675
|
end
|
|
@@ -694,18 +689,18 @@ module Sequel
|
|
|
694
689
|
|
|
695
690
|
# Execute the stored prepared statement name and the stored bind
|
|
696
691
|
# arguments instead of the SQL given.
|
|
697
|
-
def execute(sql, opts=
|
|
692
|
+
def execute(sql, opts=OPTS, &block)
|
|
698
693
|
super(prepared_statement_name, opts, &block)
|
|
699
694
|
end
|
|
700
695
|
|
|
701
696
|
# Same as execute, explicit due to intricacies of alias and super.
|
|
702
|
-
def execute_dui(sql, opts=
|
|
697
|
+
def execute_dui(sql, opts=OPTS, &block)
|
|
703
698
|
super(prepared_statement_name, opts, &block)
|
|
704
699
|
end
|
|
705
700
|
end
|
|
706
701
|
|
|
707
702
|
# Execute the given type of statement with the hash of values.
|
|
708
|
-
def call(type, bind_vars=
|
|
703
|
+
def call(type, bind_vars=OPTS, *values, &block)
|
|
709
704
|
ps = to_prepared_statement(type, values)
|
|
710
705
|
ps.extend(BindArgumentMethods)
|
|
711
706
|
ps.call(bind_vars, &block)
|
|
@@ -776,12 +771,12 @@ module Sequel
|
|
|
776
771
|
|
|
777
772
|
# Use the driver's escape_bytea
|
|
778
773
|
def literal_blob_append(sql, v)
|
|
779
|
-
sql << APOS << db.synchronize{|c| c.escape_bytea(v)} << APOS
|
|
774
|
+
sql << APOS << db.synchronize(@opts[:server]){|c| c.escape_bytea(v)} << APOS
|
|
780
775
|
end
|
|
781
776
|
|
|
782
777
|
# Use the driver's escape_string
|
|
783
778
|
def literal_string_append(sql, v)
|
|
784
|
-
sql << APOS << db.synchronize{|c| c.escape_string(v)} << APOS
|
|
779
|
+
sql << APOS << db.synchronize(@opts[:server]){|c| c.escape_string(v)} << APOS
|
|
785
780
|
end
|
|
786
781
|
|
|
787
782
|
# For each row in the result set, yield a hash with column name symbol
|
|
@@ -800,7 +795,7 @@ module Sequel
|
|
|
800
795
|
end
|
|
801
796
|
end
|
|
802
797
|
|
|
803
|
-
if SEQUEL_POSTGRES_USES_PG
|
|
798
|
+
if SEQUEL_POSTGRES_USES_PG && !ENV['NO_SEQUEL_PG']
|
|
804
799
|
begin
|
|
805
800
|
require 'sequel_pg'
|
|
806
801
|
rescue LoadError
|
|
@@ -14,7 +14,7 @@ module Sequel
|
|
|
14
14
|
:cubrid
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def indexes(table, opts=
|
|
17
|
+
def indexes(table, opts=OPTS)
|
|
18
18
|
m = output_identifier_meth
|
|
19
19
|
m2 = input_identifier_meth
|
|
20
20
|
indexes = {}
|
|
@@ -61,11 +61,11 @@ module Sequel
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
def tables(opts=
|
|
64
|
+
def tables(opts=OPTS)
|
|
65
65
|
_tables('CLASS')
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
def views(opts=
|
|
68
|
+
def views(opts=OPTS)
|
|
69
69
|
_tables('VCLASS')
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -30,7 +30,7 @@ module Sequel
|
|
|
30
30
|
alias_method :server_version, :db2_version
|
|
31
31
|
|
|
32
32
|
# Use SYSIBM.SYSCOLUMNS to get the information on the tables.
|
|
33
|
-
def schema_parse_table(table, opts =
|
|
33
|
+
def schema_parse_table(table, opts = OPTS)
|
|
34
34
|
m = output_identifier_meth(opts[:dataset])
|
|
35
35
|
im = input_identifier_meth(opts[:dataset])
|
|
36
36
|
metadata_dataset.with_sql("SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = #{literal(im.call(table))} ORDER BY COLNO").
|
|
@@ -61,7 +61,7 @@ module Sequel
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
# Use SYSCAT.INDEXES to get the indexes for the table
|
|
64
|
-
def indexes(table, opts =
|
|
64
|
+
def indexes(table, opts = OPTS)
|
|
65
65
|
m = output_identifier_meth
|
|
66
66
|
indexes = {}
|
|
67
67
|
metadata_dataset.
|
|
@@ -35,16 +35,16 @@ module Sequel
|
|
|
35
35
|
self << restart_sequence_sql(*args)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def sequences(opts=
|
|
38
|
+
def sequences(opts=OPTS)
|
|
39
39
|
ds = self[:"rdb$generators"].server(opts[:server]).filter(:"rdb$system_flag" => 0).select(:"rdb$generator_name")
|
|
40
40
|
block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r[:"rdb$generator_name"])}
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def tables(opts=
|
|
43
|
+
def tables(opts=OPTS)
|
|
44
44
|
tables_or_views(0, opts)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def views(opts=
|
|
47
|
+
def views(opts=OPTS)
|
|
48
48
|
tables_or_views(1, opts)
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -70,7 +70,7 @@ module Sequel
|
|
|
70
70
|
AUTO_INCREMENT
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
def create_sequence_sql(name, opts=
|
|
73
|
+
def create_sequence_sql(name, opts=OPTS)
|
|
74
74
|
"CREATE SEQUENCE #{quote_identifier(name)}"
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -82,7 +82,7 @@ module Sequel
|
|
|
82
82
|
create_statements.each{|sql| execute_ddl(sql)}
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def create_table_sql_list(name, generator, options=
|
|
85
|
+
def create_table_sql_list(name, generator, options=OPTS)
|
|
86
86
|
statements = [create_table_sql(name, generator, options)]
|
|
87
87
|
drop_seq_statement = nil
|
|
88
88
|
generator.columns.each do |c|
|
|
@@ -111,7 +111,7 @@ module Sequel
|
|
|
111
111
|
[drop_seq_statement, statements]
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
-
def create_trigger_sql(table, name, definition, opts=
|
|
114
|
+
def create_trigger_sql(table, name, definition, opts=OPTS)
|
|
115
115
|
events = opts[:events] ? Array(opts[:events]) : [:insert, :update, :delete]
|
|
116
116
|
whence = opts[:after] ? 'AFTER' : 'BEFORE'
|
|
117
117
|
inactive = opts[:inactive] ? 'INACTIVE' : 'ACTIVE'
|
|
@@ -133,7 +133,7 @@ module Sequel
|
|
|
133
133
|
super
|
|
134
134
|
end
|
|
135
135
|
|
|
136
|
-
def restart_sequence_sql(name, opts=
|
|
136
|
+
def restart_sequence_sql(name, opts=OPTS)
|
|
137
137
|
seq_name = quote_identifier(name)
|
|
138
138
|
"ALTER SEQUENCE #{seq_name} RESTART WITH #{opts[:restart_position]}"
|
|
139
139
|
end
|