sequel 4.30.0 → 4.31.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +18 -0
- data/MIT-LICENSE +1 -1
- data/bin/sequel +1 -0
- data/doc/opening_databases.rdoc +6 -0
- data/doc/release_notes/4.31.0.txt +57 -0
- data/lib/sequel.rb +2 -0
- data/lib/sequel/adapters/ado.rb +2 -0
- data/lib/sequel/adapters/ado/access.rb +2 -0
- data/lib/sequel/adapters/ado/mssql.rb +2 -0
- data/lib/sequel/adapters/amalgalite.rb +2 -0
- data/lib/sequel/adapters/cubrid.rb +2 -0
- data/lib/sequel/adapters/do.rb +2 -0
- data/lib/sequel/adapters/do/mysql.rb +2 -0
- data/lib/sequel/adapters/do/postgres.rb +2 -0
- data/lib/sequel/adapters/do/sqlite3.rb +2 -0
- data/lib/sequel/adapters/ibmdb.rb +3 -1
- data/lib/sequel/adapters/jdbc.rb +2 -0
- data/lib/sequel/adapters/jdbc/as400.rb +2 -0
- data/lib/sequel/adapters/jdbc/cubrid.rb +2 -0
- data/lib/sequel/adapters/jdbc/db2.rb +2 -0
- data/lib/sequel/adapters/jdbc/derby.rb +2 -0
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +2 -0
- data/lib/sequel/adapters/jdbc/h2.rb +2 -0
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -0
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +2 -0
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +2 -0
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +2 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +2 -0
- data/lib/sequel/adapters/jdbc/oracle.rb +2 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +24 -1
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +2 -0
- data/lib/sequel/adapters/jdbc/sqlite.rb +2 -0
- data/lib/sequel/adapters/jdbc/sqlserver.rb +2 -0
- data/lib/sequel/adapters/jdbc/transactions.rb +2 -0
- data/lib/sequel/adapters/mock.rb +2 -0
- data/lib/sequel/adapters/mysql.rb +2 -0
- data/lib/sequel/adapters/mysql2.rb +2 -0
- data/lib/sequel/adapters/odbc.rb +2 -0
- data/lib/sequel/adapters/odbc/db2.rb +2 -0
- data/lib/sequel/adapters/odbc/mssql.rb +2 -0
- data/lib/sequel/adapters/odbc/progress.rb +2 -0
- data/lib/sequel/adapters/oracle.rb +4 -2
- data/lib/sequel/adapters/postgres.rb +5 -3
- data/lib/sequel/adapters/postgresql.rb +2 -0
- data/lib/sequel/adapters/shared/access.rb +2 -0
- data/lib/sequel/adapters/shared/cubrid.rb +2 -0
- data/lib/sequel/adapters/shared/db2.rb +2 -0
- data/lib/sequel/adapters/shared/firebird.rb +2 -0
- data/lib/sequel/adapters/shared/informix.rb +2 -0
- data/lib/sequel/adapters/shared/mssql.rb +2 -0
- data/lib/sequel/adapters/shared/mysql.rb +5 -1
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +2 -0
- data/lib/sequel/adapters/shared/oracle.rb +5 -3
- data/lib/sequel/adapters/shared/postgres.rb +19 -12
- data/lib/sequel/adapters/shared/progress.rb +2 -0
- data/lib/sequel/adapters/shared/sqlanywhere.rb +3 -1
- data/lib/sequel/adapters/shared/sqlite.rb +2 -0
- data/lib/sequel/adapters/sqlanywhere.rb +2 -0
- data/lib/sequel/adapters/sqlite.rb +4 -1
- data/lib/sequel/adapters/swift.rb +2 -0
- data/lib/sequel/adapters/swift/mysql.rb +2 -0
- data/lib/sequel/adapters/swift/postgres.rb +2 -0
- data/lib/sequel/adapters/swift/sqlite.rb +2 -0
- data/lib/sequel/adapters/tinytds.rb +2 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +5 -3
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +5 -3
- data/lib/sequel/adapters/utils/pg_types.rb +2 -0
- data/lib/sequel/adapters/utils/replace.rb +2 -0
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +2 -0
- data/lib/sequel/ast_transformer.rb +2 -0
- data/lib/sequel/connection_pool.rb +2 -0
- data/lib/sequel/connection_pool/sharded_single.rb +2 -0
- data/lib/sequel/connection_pool/sharded_threaded.rb +2 -0
- data/lib/sequel/connection_pool/single.rb +2 -0
- data/lib/sequel/connection_pool/threaded.rb +2 -0
- data/lib/sequel/core.rb +2 -0
- data/lib/sequel/database.rb +2 -0
- data/lib/sequel/database/connecting.rb +2 -0
- data/lib/sequel/database/dataset.rb +2 -0
- data/lib/sequel/database/dataset_defaults.rb +2 -0
- data/lib/sequel/database/features.rb +2 -0
- data/lib/sequel/database/logging.rb +2 -0
- data/lib/sequel/database/misc.rb +2 -0
- data/lib/sequel/database/query.rb +2 -0
- data/lib/sequel/database/schema_generator.rb +2 -0
- data/lib/sequel/database/schema_methods.rb +11 -4
- data/lib/sequel/database/transactions.rb +2 -0
- data/lib/sequel/dataset.rb +2 -0
- data/lib/sequel/dataset/actions.rb +2 -0
- data/lib/sequel/dataset/features.rb +2 -0
- data/lib/sequel/dataset/graph.rb +2 -0
- data/lib/sequel/dataset/misc.rb +2 -0
- data/lib/sequel/dataset/mutation.rb +2 -0
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -1
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +2 -0
- data/lib/sequel/dataset/sql.rb +7 -5
- data/lib/sequel/deprecated.rb +2 -0
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +5 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +2 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/columns_introspection.rb +2 -0
- data/lib/sequel/extensions/connection_validator.rb +2 -0
- data/lib/sequel/extensions/constraint_validations.rb +2 -0
- data/lib/sequel/extensions/core_extensions.rb +2 -0
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/current_datetime_timestamp.rb +2 -0
- data/lib/sequel/extensions/dataset_source_alias.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +3 -1
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -0
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +2 -0
- data/lib/sequel/extensions/error_sql.rb +2 -0
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- data/lib/sequel/extensions/filter_having.rb +2 -0
- data/lib/sequel/extensions/from_block.rb +2 -0
- data/lib/sequel/extensions/graph_each.rb +2 -0
- data/lib/sequel/extensions/hash_aliases.rb +2 -0
- data/lib/sequel/extensions/inflector.rb +2 -0
- data/lib/sequel/extensions/looser_typecasting.rb +2 -0
- data/lib/sequel/extensions/meta_def.rb +2 -0
- data/lib/sequel/extensions/migration.rb +14 -4
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +2 -0
- data/lib/sequel/extensions/named_timezones.rb +2 -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 +16 -36
- data/lib/sequel/extensions/pg_array_ops.rb +2 -0
- data/lib/sequel/extensions/pg_enum.rb +4 -1
- data/lib/sequel/extensions/pg_hstore.rb +3 -1
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
- data/lib/sequel/extensions/pg_inet.rb +2 -0
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -0
- data/lib/sequel/extensions/pg_interval.rb +3 -1
- data/lib/sequel/extensions/pg_json.rb +2 -0
- data/lib/sequel/extensions/pg_json_ops.rb +2 -0
- data/lib/sequel/extensions/pg_loose_count.rb +2 -0
- data/lib/sequel/extensions/pg_range.rb +2 -0
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +2 -0
- data/lib/sequel/extensions/pg_row_ops.rb +2 -0
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -0
- data/lib/sequel/extensions/pretty_table.rb +2 -0
- data/lib/sequel/extensions/query.rb +2 -0
- data/lib/sequel/extensions/query_literals.rb +2 -0
- data/lib/sequel/extensions/round_timestamps.rb +2 -0
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +2 -0
- data/lib/sequel/extensions/schema_caching.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +4 -1
- data/lib/sequel/extensions/select_remove.rb +2 -0
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +3 -1
- data/lib/sequel/extensions/server_block.rb +2 -0
- data/lib/sequel/extensions/set_overrides.rb +2 -0
- data/lib/sequel/extensions/split_array_nil.rb +2 -0
- data/lib/sequel/extensions/sql_expr.rb +2 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +3 -1
- data/lib/sequel/model.rb +2 -0
- data/lib/sequel/model/associations.rb +3 -1
- data/lib/sequel/model/base.rb +5 -1
- data/lib/sequel/model/dataset_module.rb +2 -0
- data/lib/sequel/model/default_inflections.rb +2 -0
- data/lib/sequel/model/errors.rb +2 -0
- data/lib/sequel/model/exceptions.rb +2 -0
- data/lib/sequel/model/inflections.rb +2 -0
- data/lib/sequel/model/plugins.rb +2 -0
- data/lib/sequel/no_core_ext.rb +2 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +2 -0
- data/lib/sequel/plugins/after_initialize.rb +2 -0
- data/lib/sequel/plugins/association_autoreloading.rb +2 -0
- data/lib/sequel/plugins/association_dependencies.rb +2 -0
- data/lib/sequel/plugins/association_pks.rb +20 -24
- data/lib/sequel/plugins/association_proxies.rb +2 -0
- data/lib/sequel/plugins/auto_validations.rb +2 -0
- data/lib/sequel/plugins/before_after_save.rb +2 -0
- data/lib/sequel/plugins/blacklist_security.rb +2 -0
- data/lib/sequel/plugins/boolean_readers.rb +2 -0
- data/lib/sequel/plugins/boolean_subsets.rb +2 -0
- data/lib/sequel/plugins/caching.rb +2 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +2 -0
- data/lib/sequel/plugins/column_conflicts.rb +2 -0
- data/lib/sequel/plugins/column_select.rb +2 -0
- data/lib/sequel/plugins/composition.rb +2 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -0
- data/lib/sequel/plugins/csv_serializer.rb +2 -0
- data/lib/sequel/plugins/dataset_associations.rb +2 -0
- data/lib/sequel/plugins/defaults_setter.rb +2 -0
- data/lib/sequel/plugins/delay_add_association.rb +2 -0
- data/lib/sequel/plugins/dirty.rb +2 -0
- data/lib/sequel/plugins/eager_each.rb +2 -0
- data/lib/sequel/plugins/error_splitter.rb +2 -0
- data/lib/sequel/plugins/force_encoding.rb +2 -0
- data/lib/sequel/plugins/hook_class_methods.rb +2 -0
- data/lib/sequel/plugins/identifier_columns.rb +2 -0
- data/lib/sequel/plugins/input_transformer.rb +2 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -0
- data/lib/sequel/plugins/instance_filters.rb +2 -0
- data/lib/sequel/plugins/instance_hooks.rb +2 -0
- data/lib/sequel/plugins/inverted_subsets.rb +2 -0
- data/lib/sequel/plugins/json_serializer.rb +2 -0
- data/lib/sequel/plugins/lazy_attributes.rb +2 -0
- data/lib/sequel/plugins/list.rb +2 -0
- data/lib/sequel/plugins/many_through_many.rb +2 -0
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +2 -0
- data/lib/sequel/plugins/modification_detection.rb +2 -0
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +2 -0
- data/lib/sequel/plugins/nested_attributes.rb +2 -0
- data/lib/sequel/plugins/optimistic_locking.rb +2 -0
- data/lib/sequel/plugins/pg_array_associations.rb +2 -0
- data/lib/sequel/plugins/pg_row.rb +2 -0
- data/lib/sequel/plugins/pg_typecast_on_load.rb +2 -0
- data/lib/sequel/plugins/prepared_statements.rb +2 -0
- data/lib/sequel/plugins/prepared_statements_associations.rb +2 -0
- data/lib/sequel/plugins/prepared_statements_safe.rb +2 -0
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +2 -0
- data/lib/sequel/plugins/rcte_tree.rb +2 -0
- data/lib/sequel/plugins/schema.rb +2 -0
- data/lib/sequel/plugins/scissors.rb +2 -0
- data/lib/sequel/plugins/serialization.rb +2 -0
- data/lib/sequel/plugins/serialization_modification_detection.rb +2 -0
- data/lib/sequel/plugins/sharding.rb +2 -0
- data/lib/sequel/plugins/single_table_inheritance.rb +2 -0
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +2 -0
- data/lib/sequel/plugins/split_values.rb +2 -0
- data/lib/sequel/plugins/static_cache.rb +2 -0
- data/lib/sequel/plugins/string_stripper.rb +2 -0
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/subset_conditions.rb +2 -0
- data/lib/sequel/plugins/table_select.rb +2 -0
- data/lib/sequel/plugins/tactical_eager_loading.rb +2 -0
- data/lib/sequel/plugins/timestamps.rb +2 -0
- data/lib/sequel/plugins/touch.rb +2 -0
- data/lib/sequel/plugins/tree.rb +2 -0
- data/lib/sequel/plugins/typecast_on_load.rb +2 -0
- data/lib/sequel/plugins/unlimited_update.rb +2 -0
- data/lib/sequel/plugins/update_or_create.rb +2 -0
- data/lib/sequel/plugins/update_primary_key.rb +2 -0
- data/lib/sequel/plugins/update_refresh.rb +2 -0
- data/lib/sequel/plugins/uuid.rb +2 -0
- data/lib/sequel/plugins/validate_associated.rb +2 -0
- data/lib/sequel/plugins/validation_class_methods.rb +2 -0
- data/lib/sequel/plugins/validation_helpers.rb +3 -1
- data/lib/sequel/plugins/xml_serializer.rb +2 -0
- data/lib/sequel/sql.rb +3 -1
- data/lib/sequel/timezones.rb +2 -0
- data/lib/sequel/version.rb +3 -1
- data/spec/adapters/mysql_spec.rb +4 -0
- data/spec/adapters/postgres_spec.rb +35 -11
- data/spec/core/connection_pool_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -2
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/csv_serializer_spec.rb +7 -0
- data/spec/extensions/date_arithmetic_spec.rb +1 -1
- data/spec/extensions/dirty_spec.rb +6 -6
- data/spec/extensions/force_encoding_spec.rb +12 -12
- data/spec/extensions/input_transformer_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +16 -0
- data/spec/extensions/modification_detection_spec.rb +2 -2
- data/spec/extensions/nested_attributes_spec.rb +1 -1
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -8
- data/spec/files/double_migration/001_create_sessions.rb +9 -0
- data/spec/files/double_migration/002_create_nodes.rb +19 -0
- data/spec/files/double_migration/003_3_create_users.rb +4 -0
- data/spec/files/empty_migration/001_create_sessions.rb +9 -0
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +4 -0
- metadata +11 -3
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
Sequel.require 'adapters/utils/split_alter_table'
|
2
4
|
Sequel.require 'adapters/utils/replace'
|
3
5
|
|
@@ -187,7 +189,7 @@ module Sequel
|
|
187
189
|
|
188
190
|
def alter_table_add_column_sql(table, op)
|
189
191
|
if related = op.delete(:table)
|
190
|
-
sql = super
|
192
|
+
sql = super.dup
|
191
193
|
op[:table] = related
|
192
194
|
op[:key] ||= primary_key_from_schema(related)
|
193
195
|
sql << ", ADD "
|
@@ -356,6 +358,8 @@ module Sequel
|
|
356
358
|
[pk]
|
357
359
|
elsif !(pkc = generator.constraints.select{|con| con[:type] == :primary_key}).empty?
|
358
360
|
pkc.first[:columns]
|
361
|
+
elsif !(pkc = generator.columns.select{|con| con[:primary_key] == true}).empty?
|
362
|
+
pkc.map{|c| c[:name]}
|
359
363
|
end
|
360
364
|
else
|
361
365
|
primary_key_from_schema(t)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
Sequel.require 'adapters/utils/emulate_offset_with_row_number'
|
2
4
|
|
3
5
|
module Sequel
|
@@ -342,7 +344,7 @@ module Sequel
|
|
342
344
|
def select_sql
|
343
345
|
return super if @opts[:sql]
|
344
346
|
if o = @opts[:offset]
|
345
|
-
columns = clone(:append_sql=>
|
347
|
+
columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
|
346
348
|
dsa1 = dataset_alias(1)
|
347
349
|
rn = row_number_column
|
348
350
|
limit = @opts[:limit]
|
@@ -353,7 +355,7 @@ module Sequel
|
|
353
355
|
select(*columns).
|
354
356
|
where(SQL::Identifier.new(rn) > o)
|
355
357
|
ds = ds.where(SQL::Identifier.new(rn) <= Sequel.+(o, limit)) if limit
|
356
|
-
sql = @opts[:append_sql] ||
|
358
|
+
sql = @opts[:append_sql] || String.new
|
357
359
|
subselect_sql_append(sql, ds)
|
358
360
|
sql
|
359
361
|
elsif limit = @opts[:limit]
|
@@ -361,7 +363,7 @@ module Sequel
|
|
361
363
|
# Lock doesn't work in subselects, so don't use a subselect when locking.
|
362
364
|
# Don't use a subselect if custom SQL is used, as it breaks somethings.
|
363
365
|
ds = ds.from_self unless @opts[:lock]
|
364
|
-
sql = @opts[:append_sql] ||
|
366
|
+
sql = @opts[:append_sql] || String.new
|
365
367
|
subselect_sql_append(sql, ds.where(SQL::ComplexExpression.new(:<=, ROW_NUMBER_EXPRESSION, limit)))
|
366
368
|
sql
|
367
369
|
else
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
Sequel.require 'adapters/utils/pg_types'
|
2
4
|
|
3
5
|
module Sequel
|
@@ -373,7 +375,8 @@ module Sequel
|
|
373
375
|
# :server :: The server to which to send the NOTIFY statement, if the sharding support
|
374
376
|
# is being used.
|
375
377
|
def notify(channel, opts=OPTS)
|
376
|
-
sql =
|
378
|
+
sql = String.new
|
379
|
+
sql << "NOTIFY "
|
377
380
|
dataset.send(:identifier_append, sql, channel)
|
378
381
|
if payload = opts[:payload]
|
379
382
|
sql << ", "
|
@@ -583,7 +586,7 @@ module Sequel
|
|
583
586
|
s = super
|
584
587
|
if using = op[:using]
|
585
588
|
using = Sequel::LiteralString.new(using) if using.is_a?(String)
|
586
|
-
s
|
589
|
+
s += ' USING '
|
587
590
|
s << literal(using)
|
588
591
|
end
|
589
592
|
s
|
@@ -693,7 +696,8 @@ module Sequel
|
|
693
696
|
case constraint[:type]
|
694
697
|
when :exclude
|
695
698
|
elements = constraint[:elements].map{|c, op| "#{literal(c)} WITH #{op}"}.join(', ')
|
696
|
-
sql =
|
699
|
+
sql = String.new
|
700
|
+
sql << "#{"CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]}EXCLUDE USING #{constraint[:using]||'gist'} (#{elements})#{" WHERE #{filter_expr(constraint[:where])}" if constraint[:where]}"
|
697
701
|
constraint_deferrable_sql_append(sql, constraint[:deferrable])
|
698
702
|
sql
|
699
703
|
when :foreign_key, :check
|
@@ -760,7 +764,8 @@ module Sequel
|
|
760
764
|
|
761
765
|
# SQL for doing fast table insert from stdin.
|
762
766
|
def copy_into_sql(table, opts)
|
763
|
-
sql =
|
767
|
+
sql = String.new
|
768
|
+
sql << "COPY #{literal(table)}"
|
764
769
|
if cols = opts[:columns]
|
765
770
|
sql << literal(Array(cols))
|
766
771
|
end
|
@@ -780,7 +785,8 @@ module Sequel
|
|
780
785
|
table
|
781
786
|
else
|
782
787
|
if opts[:options] || opts[:format]
|
783
|
-
options =
|
788
|
+
options = String.new
|
789
|
+
options << " ("
|
784
790
|
options << "FORMAT #{opts[:format]}" if opts[:format]
|
785
791
|
options << "#{', ' if opts[:format]}#{opts[:options]}" if opts[:options]
|
786
792
|
options << ')'
|
@@ -845,17 +851,17 @@ module Sequel
|
|
845
851
|
sql = super
|
846
852
|
|
847
853
|
if inherits = options[:inherits]
|
848
|
-
sql
|
854
|
+
sql += " INHERITS (#{Array(inherits).map{|t| quote_schema_table(t)}.join(', ')})"
|
849
855
|
end
|
850
856
|
|
851
857
|
if on_commit = options[:on_commit]
|
852
858
|
raise(Error, "can't provide :on_commit without :temp to create_table") unless options[:temp]
|
853
859
|
raise(Error, "unsupported on_commit option: #{on_commit.inspect}") unless ON_COMMIT.has_key?(on_commit)
|
854
|
-
sql
|
860
|
+
sql += " ON COMMIT #{ON_COMMIT[on_commit]}"
|
855
861
|
end
|
856
862
|
|
857
863
|
if server = options[:foreign]
|
858
|
-
sql
|
864
|
+
sql += " SERVER #{quote_identifier(server)}"
|
859
865
|
if foreign_opts = options[:options]
|
860
866
|
sql << " OPTIONS (#{foreign_opts.map{|k, v| "#{k} #{literal(v.to_s)}"}.join(', ')})"
|
861
867
|
end
|
@@ -867,9 +873,9 @@ module Sequel
|
|
867
873
|
def create_table_as_sql(name, sql, options)
|
868
874
|
result = create_table_prefix_sql name, options
|
869
875
|
if on_commit = options[:on_commit]
|
870
|
-
result
|
876
|
+
result += " ON COMMIT #{ON_COMMIT[on_commit]}"
|
871
877
|
end
|
872
|
-
result
|
878
|
+
result += " AS #{sql}"
|
873
879
|
end
|
874
880
|
|
875
881
|
# Use a PostgreSQL-specific create table generator
|
@@ -1111,7 +1117,8 @@ module Sequel
|
|
1111
1117
|
read_only = opts[:read_only]
|
1112
1118
|
deferrable = opts[:deferrable]
|
1113
1119
|
if level || !read_only.nil? || !deferrable.nil?
|
1114
|
-
sql =
|
1120
|
+
sql = String.new
|
1121
|
+
sql << "SET TRANSACTION"
|
1115
1122
|
sql << " ISOLATION LEVEL #{Sequel::Database::TRANSACTION_ISOLATION_LEVELS[level]}" if level
|
1116
1123
|
sql << " READ #{read_only ? 'ONLY' : 'WRITE'}" unless read_only.nil?
|
1117
1124
|
sql << " #{'NOT ' unless deferrable}DEFERRABLE" unless deferrable.nil?
|
@@ -1421,7 +1428,7 @@ module Sequel
|
|
1421
1428
|
if block_given? # perform locking inside a transaction and yield to block
|
1422
1429
|
@db.transaction(opts){lock(mode, opts); yield}
|
1423
1430
|
else
|
1424
|
-
sql = 'LOCK TABLE '
|
1431
|
+
sql = 'LOCK TABLE '.dup
|
1425
1432
|
source_list_append(sql, @opts[:from])
|
1426
1433
|
mode = mode.to_s.upcase.strip
|
1427
1434
|
unless LOCK_MODES.include?(mode)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
module Sequel
|
2
4
|
module SqlAnywhere
|
3
5
|
|
@@ -329,7 +331,7 @@ module Sequel
|
|
329
331
|
sql << Sequel::Dataset::PAREN_OPEN
|
330
332
|
literal_append(sql, args.at(0))
|
331
333
|
sql << Sequel::Dataset::SPACE << (op == :LIKE ? REGEXP : NOT_REGEXP) << Sequel::Dataset::SPACE
|
332
|
-
pattern =
|
334
|
+
pattern = String.new
|
333
335
|
last_c = ''
|
334
336
|
args.at(1).each_char do |c|
|
335
337
|
if c == '_' and not pattern.end_with?('\\') and last_c != '\\'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
require 'sqlite3'
|
2
4
|
Sequel.require 'adapters/shared/sqlite'
|
3
5
|
|
@@ -242,7 +244,8 @@ module Sequel
|
|
242
244
|
cps = log_yield("PREPARE #{name}: #{sql}"){conn.prepare(sql)}
|
243
245
|
conn.prepared_statements[name] = [cps, sql]
|
244
246
|
end
|
245
|
-
log_sql =
|
247
|
+
log_sql = String.new
|
248
|
+
log_sql << "EXECUTE #{name}"
|
246
249
|
if ps.log_sql
|
247
250
|
log_sql << " ("
|
248
251
|
log_sql << sql
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
module Sequel
|
2
4
|
module EmulateOffsetWithReverseAndCount
|
3
5
|
# Make empty? work with an offset with an order.
|
@@ -27,7 +29,7 @@ module Sequel
|
|
27
29
|
end
|
28
30
|
|
29
31
|
ds = unlimited
|
30
|
-
row_count = @opts[:offset_total_count] || ds.clone(:append_sql=>
|
32
|
+
row_count = @opts[:offset_total_count] || ds.clone(:append_sql=>String.new, :placeholder_literal_null=>true).count
|
31
33
|
dsa1 = dataset_alias(1)
|
32
34
|
|
33
35
|
if o.is_a?(Symbol) && @opts[:bind_vars] && (match = Sequel::Dataset::PreparedStatementMethods::PLACEHOLDER_RE.match(o.to_s))
|
@@ -53,7 +55,7 @@ module Sequel
|
|
53
55
|
# shuld be returned, so use a condition that is always false.
|
54
56
|
ds.where(1=>0)
|
55
57
|
end
|
56
|
-
sql = @opts[:append_sql] ||
|
58
|
+
sql = @opts[:append_sql] || String.new
|
57
59
|
subselect_sql_append(sql, ds)
|
58
60
|
sql
|
59
61
|
end
|
@@ -69,7 +71,7 @@ module Sequel
|
|
69
71
|
# The default order to use for datasets with offsets, if no order is defined.
|
70
72
|
# By default, orders by all of the columns in the dataset.
|
71
73
|
def default_offset_order
|
72
|
-
clone(:append_sql=>
|
74
|
+
clone(:append_sql=>String.new, :offset=>nil).columns
|
73
75
|
end
|
74
76
|
end
|
75
77
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
1
3
|
module Sequel
|
2
4
|
module EmulateOffsetWithRowNumber
|
3
5
|
# If the offset must be emulated with ROW_NUMBER, don't remove any ordering,
|
@@ -28,10 +30,10 @@ module Sequel
|
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
|
-
columns = clone(:append_sql=>
|
33
|
+
columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
|
32
34
|
dsa1 = dataset_alias(1)
|
33
35
|
rn = row_number_column
|
34
|
-
sql = @opts[:append_sql] ||
|
36
|
+
sql = @opts[:append_sql] || String.new
|
35
37
|
subselect_sql_append(sql, unlimited.
|
36
38
|
unordered.
|
37
39
|
select_append{ROW_NUMBER{}.over(:order=>order).as(rn)}.
|
@@ -75,7 +77,7 @@ module Sequel
|
|
75
77
|
end
|
76
78
|
end
|
77
79
|
end
|
78
|
-
clone(:append_sql=>
|
80
|
+
clone(:append_sql=>String.new).columns
|
79
81
|
end
|
80
82
|
|
81
83
|
# Whether an order is required when using offset emulation via ROW_NUMBER, true by default.
|
data/lib/sequel/core.rb
CHANGED
data/lib/sequel/database.rb
CHANGED