sequel 4.36.0 → 5.61.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 +5 -5
- data/CHANGELOG +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -203
- data/spec/core/schema_spec.rb +0 -1676
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -728
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -65
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -390
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -275
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -473
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -814
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/uuid_spec.rb +0 -106
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -554
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
@@ -32,7 +32,7 @@
|
|
32
32
|
#
|
33
33
|
# So if you want to insert an array into an integer[] database column:
|
34
34
|
#
|
35
|
-
# DB[:table].insert(:
|
35
|
+
# DB[:table].insert(column: Sequel.pg_array([1, 2, 3]))
|
36
36
|
#
|
37
37
|
# To use this extension, first load it into your Sequel::Database instance:
|
38
38
|
#
|
@@ -45,12 +45,10 @@
|
|
45
45
|
# all scalar types that the native postgres adapter handles. It
|
46
46
|
# also makes it easy to add support for other array types. In
|
47
47
|
# general, you just need to make sure that the scalar type is
|
48
|
-
# handled and has the appropriate converter installed
|
49
|
-
# Sequel::Postgres::PG_TYPES or the Database instance's
|
50
|
-
# conversion_procs usingthe appropriate type OID. For user defined
|
48
|
+
# handled and has the appropriate converter installed. For user defined
|
51
49
|
# types, you can do this via:
|
52
50
|
#
|
53
|
-
# DB.
|
51
|
+
# DB.add_conversion_proc(scalar_type_oid){|string| }
|
54
52
|
#
|
55
53
|
# Then you can call
|
56
54
|
# Sequel::Postgres::PGArray::DatabaseMethods#register_array_type
|
@@ -60,18 +58,6 @@
|
|
60
58
|
#
|
61
59
|
# DB.register_array_type('foo')
|
62
60
|
#
|
63
|
-
# You can also register array types on a global basis using
|
64
|
-
# Sequel::Postgres::PGArray.register. In this case, you'll have
|
65
|
-
# to specify the type oids:
|
66
|
-
#
|
67
|
-
# Sequel::Postgres::PG_TYPES[1234] = lambda{|string| }
|
68
|
-
# Sequel::Postgres::PGArray.register('foo', :oid=>4321, :scalar_oid=>1234)
|
69
|
-
#
|
70
|
-
# Both Sequel::Postgres::PGArray::DatabaseMethods#register_array_type
|
71
|
-
# and Sequel::Postgres::PGArray.register support many options to
|
72
|
-
# customize the array type handling. See the Sequel::Postgres::PGArray.register
|
73
|
-
# method documentation.
|
74
|
-
#
|
75
61
|
# While this extension can parse PostgreSQL arrays with explicit bounds, it
|
76
62
|
# currently ignores explicit bounds, so such values do not round
|
77
63
|
# trip.
|
@@ -79,13 +65,12 @@
|
|
79
65
|
# If you want an easy way to call PostgreSQL array functions and
|
80
66
|
# operators, look into the pg_array_ops extension.
|
81
67
|
#
|
82
|
-
# This extension requires the
|
68
|
+
# This extension requires the delegate library, and the strscan library
|
69
|
+
# sequel_pg has not been loaded.
|
83
70
|
#
|
84
71
|
# Related module: Sequel::Postgres::PGArray
|
85
72
|
|
86
73
|
require 'delegate'
|
87
|
-
require 'strscan'
|
88
|
-
Sequel.require 'adapters/utils/pg_types'
|
89
74
|
|
90
75
|
module Sequel
|
91
76
|
module Postgres
|
@@ -93,122 +78,64 @@ module Sequel
|
|
93
78
|
class PGArray < DelegateClass(Array)
|
94
79
|
include Sequel::SQL::AliasMethods
|
95
80
|
|
96
|
-
ARRAY = "ARRAY".freeze
|
97
|
-
DOUBLE_COLON = '::'.freeze
|
98
|
-
EMPTY_ARRAY = "'{}'".freeze
|
99
|
-
EMPTY_BRACKET = '[]'.freeze
|
100
|
-
OPEN_BRACKET = '['.freeze
|
101
|
-
CLOSE_BRACKET = ']'.freeze
|
102
|
-
COMMA = ','.freeze
|
103
|
-
BACKSLASH = '\\'.freeze
|
104
|
-
EMPTY_STRING = ''.freeze
|
105
|
-
OPEN_BRACE = '{'.freeze
|
106
|
-
CLOSE_BRACE = '}'.freeze
|
107
|
-
NULL = 'NULL'.freeze
|
108
|
-
QUOTE = '"'.freeze
|
109
|
-
|
110
|
-
# Global hash of database array type name strings to symbols (e.g. 'double precision' => :float),
|
111
|
-
# used by the schema parsing for array types registered globally.
|
112
|
-
ARRAY_TYPES = {}
|
113
|
-
|
114
|
-
# Registers an array type that the extension should handle. Makes a Database instance that
|
115
|
-
# has been extended with DatabaseMethods recognize the array type given and set up the
|
116
|
-
# appropriate typecasting. Also sets up automatic typecasting for the native postgres
|
117
|
-
# adapter, so that on retrieval, the values are automatically converted to PGArray instances.
|
118
|
-
# The db_type argument should be the exact database type used (as returned by the PostgreSQL
|
119
|
-
# format_type database function). Accepts the following options:
|
120
|
-
#
|
121
|
-
# :array_type :: The type to automatically cast the array to when literalizing the array.
|
122
|
-
# Usually the same as db_type.
|
123
|
-
# :converter :: A callable object (e.g. Proc), that is called with each element of the array
|
124
|
-
# (usually a string), and should return the appropriate typecasted object.
|
125
|
-
# :oid :: The PostgreSQL OID for the array type. This is used by the Sequel postgres adapter
|
126
|
-
# to set up automatic type conversion on retrieval from the database.
|
127
|
-
# :scalar_oid :: Should be the PostgreSQL OID for the scalar version of this array type. If given,
|
128
|
-
# automatically sets the :converter option by looking for scalar conversion
|
129
|
-
# proc.
|
130
|
-
# :scalar_typecast :: Should be a symbol indicating the typecast method that should be called on
|
131
|
-
# each element of the array, when a plain array is passed into a database
|
132
|
-
# typecast method. For example, for an array of integers, this could be set to
|
133
|
-
# :integer, so that the typecast_value_integer method is called on all of the
|
134
|
-
# array elements. Defaults to :type_symbol option.
|
135
|
-
# :type_procs :: A hash mapping oids to conversion procs, used for looking up the :scalar_oid and
|
136
|
-
# value and setting the :oid value. Defaults to the global Sequel::Postgres::PG_TYPES.
|
137
|
-
# :type_symbol :: The base of the schema type symbol for this type. For example, if you provide
|
138
|
-
# :integer, Sequel will recognize this type as :integer_array during schema parsing.
|
139
|
-
# Defaults to the db_type argument.
|
140
|
-
# :typecast_method_map :: The map in which to place the database type string to type symbol mapping.
|
141
|
-
# Defaults to ARRAY_TYPES.
|
142
|
-
# :typecast_methods_module :: If given, a module object to add the typecasting method to. Defaults
|
143
|
-
# to DatabaseMethods.
|
144
|
-
#
|
145
|
-
# If a block is given, it is treated as the :converter option.
|
146
|
-
def self.register(db_type, opts=OPTS, &block)
|
147
|
-
db_type = db_type.to_s
|
148
|
-
type = (opts[:type_symbol] || db_type).to_sym
|
149
|
-
type_procs = opts[:type_procs] || PG_TYPES
|
150
|
-
mod = opts[:typecast_methods_module] || DatabaseMethods
|
151
|
-
typecast_method_map = opts[:typecast_method_map] || ARRAY_TYPES
|
152
|
-
|
153
|
-
if converter = opts[:converter]
|
154
|
-
raise Error, "can't provide both a block and :converter option to register" if block
|
155
|
-
else
|
156
|
-
converter = block
|
157
|
-
end
|
158
|
-
|
159
|
-
if soid = opts[:scalar_oid]
|
160
|
-
raise Error, "can't provide both a converter and :scalar_oid option to register" if converter
|
161
|
-
converter = type_procs[soid]
|
162
|
-
end
|
163
|
-
|
164
|
-
array_type = (opts[:array_type] || db_type).to_s.dup.freeze
|
165
|
-
creator = Creator.new(array_type, converter)
|
166
|
-
|
167
|
-
typecast_method_map[db_type] = :"#{type}_array"
|
168
|
-
|
169
|
-
define_array_typecast_method(mod, type, creator, opts.fetch(:scalar_typecast, type))
|
170
|
-
|
171
|
-
if oid = opts[:oid]
|
172
|
-
type_procs[oid] = creator
|
173
|
-
end
|
174
|
-
|
175
|
-
nil
|
176
|
-
end
|
177
|
-
|
178
|
-
# Define a private array typecasting method in the given module for the given type that uses
|
179
|
-
# the creator argument to do the type conversion.
|
180
|
-
def self.define_array_typecast_method(mod, type, creator, scalar_typecast)
|
181
|
-
mod.class_eval do
|
182
|
-
meth = :"typecast_value_#{type}_array"
|
183
|
-
scalar_typecast_method = :"typecast_value_#{scalar_typecast}"
|
184
|
-
define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
|
185
|
-
private meth
|
186
|
-
end
|
187
|
-
end
|
188
|
-
private_class_method :define_array_typecast_method
|
189
|
-
|
190
81
|
module DatabaseMethods
|
191
|
-
APOS = "'".freeze
|
192
|
-
DOUBLE_APOS = "''".freeze
|
193
|
-
ESCAPE_RE = /("|\\)/.freeze
|
194
|
-
ESCAPE_REPLACEMENT = '\\\\\1'.freeze
|
195
82
|
BLOB_RANGE = 1...-1
|
196
83
|
|
197
84
|
# Create the local hash of database type strings to schema type symbols,
|
198
85
|
# used for array types local to this database.
|
199
86
|
def self.extended(db)
|
200
|
-
db.
|
87
|
+
db.instance_exec do
|
201
88
|
@pg_array_schema_types ||= {}
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
89
|
+
register_array_type('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime)
|
90
|
+
register_array_type('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime)
|
91
|
+
|
92
|
+
register_array_type('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string)
|
93
|
+
register_array_type('integer', :oid=>1007, :scalar_oid=>23)
|
94
|
+
register_array_type('bigint', :oid=>1016, :scalar_oid=>20, :scalar_typecast=>:integer)
|
95
|
+
register_array_type('numeric', :oid=>1231, :scalar_oid=>1700, :type_symbol=>:decimal)
|
96
|
+
register_array_type('double precision', :oid=>1022, :scalar_oid=>701, :type_symbol=>:float)
|
97
|
+
|
98
|
+
register_array_type('boolean', :oid=>1000, :scalar_oid=>16)
|
99
|
+
register_array_type('bytea', :oid=>1001, :scalar_oid=>17, :type_symbol=>:blob)
|
100
|
+
register_array_type('date', :oid=>1182, :scalar_oid=>1082)
|
101
|
+
register_array_type('time without time zone', :oid=>1183, :scalar_oid=>1083, :type_symbol=>:time)
|
102
|
+
register_array_type('time with time zone', :oid=>1270, :scalar_oid=>1266, :type_symbol=>:time_timezone, :scalar_typecast=>:time)
|
103
|
+
|
104
|
+
register_array_type('smallint', :oid=>1005, :scalar_oid=>21, :scalar_typecast=>:integer)
|
105
|
+
register_array_type('oid', :oid=>1028, :scalar_oid=>26, :scalar_typecast=>:integer)
|
106
|
+
register_array_type('real', :oid=>1021, :scalar_oid=>700, :scalar_typecast=>:float)
|
107
|
+
register_array_type('character', :oid=>1014, :converter=>nil, :array_type=>:text, :scalar_typecast=>:string)
|
108
|
+
register_array_type('character varying', :oid=>1015, :converter=>nil, :scalar_typecast=>:string, :type_symbol=>:varchar)
|
109
|
+
|
110
|
+
register_array_type('xml', :oid=>143, :scalar_oid=>142)
|
111
|
+
register_array_type('money', :oid=>791, :scalar_oid=>790)
|
112
|
+
register_array_type('bit', :oid=>1561, :scalar_oid=>1560)
|
113
|
+
register_array_type('bit varying', :oid=>1563, :scalar_oid=>1562, :type_symbol=>:varbit)
|
114
|
+
register_array_type('uuid', :oid=>2951, :scalar_oid=>2950)
|
115
|
+
|
116
|
+
register_array_type('xid', :oid=>1011, :scalar_oid=>28)
|
117
|
+
register_array_type('cid', :oid=>1012, :scalar_oid=>29)
|
118
|
+
|
119
|
+
register_array_type('name', :oid=>1003, :scalar_oid=>19)
|
120
|
+
register_array_type('tid', :oid=>1010, :scalar_oid=>27)
|
121
|
+
register_array_type('int2vector', :oid=>1006, :scalar_oid=>22)
|
122
|
+
register_array_type('oidvector', :oid=>1013, :scalar_oid=>30)
|
123
|
+
|
206
124
|
[:string_array, :integer_array, :decimal_array, :float_array, :boolean_array, :blob_array, :date_array, :time_array, :datetime_array].each do |v|
|
207
125
|
@schema_type_classes[v] = PGArray
|
208
126
|
end
|
209
127
|
end
|
210
128
|
end
|
211
129
|
|
130
|
+
def add_named_conversion_proc(name, &block)
|
131
|
+
ret = super
|
132
|
+
name = name.to_s if name.is_a?(Symbol)
|
133
|
+
from(:pg_type).where(:typname=>name).select_map([:oid, :typarray]).each do |scalar_oid, array_oid|
|
134
|
+
register_array_type(name, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
|
135
|
+
end
|
136
|
+
ret
|
137
|
+
end
|
138
|
+
|
212
139
|
# Handle arrays in bound variables
|
213
140
|
def bound_variable_arg(arg, conn)
|
214
141
|
case arg
|
@@ -221,25 +148,76 @@ module Sequel
|
|
221
148
|
end
|
222
149
|
end
|
223
150
|
|
224
|
-
#
|
225
|
-
|
226
|
-
|
227
|
-
|
151
|
+
# Freeze the pg array schema types to prevent adding new ones.
|
152
|
+
def freeze
|
153
|
+
@pg_array_schema_types.freeze
|
154
|
+
super
|
155
|
+
end
|
156
|
+
|
157
|
+
# Register a database specific array type. Options:
|
158
|
+
#
|
159
|
+
# :array_type :: The type to automatically cast the array to when literalizing the array.
|
160
|
+
# Usually the same as db_type.
|
161
|
+
# :converter :: A callable object (e.g. Proc), that is called with each element of the array
|
162
|
+
# (usually a string), and should return the appropriate typecasted object.
|
163
|
+
# :oid :: The PostgreSQL OID for the array type. This is used by the Sequel postgres adapter
|
164
|
+
# to set up automatic type conversion on retrieval from the database.
|
165
|
+
# :scalar_oid :: Should be the PostgreSQL OID for the scalar version of this array type. If given,
|
166
|
+
# automatically sets the :converter option by looking for scalar conversion
|
167
|
+
# proc.
|
168
|
+
# :scalar_typecast :: Should be a symbol indicating the typecast method that should be called on
|
169
|
+
# each element of the array, when a plain array is passed into a database
|
170
|
+
# typecast method. For example, for an array of integers, this could be set to
|
171
|
+
# :integer, so that the typecast_value_integer method is called on all of the
|
172
|
+
# array elements. Defaults to :type_symbol option.
|
173
|
+
# :type_symbol :: The base of the schema type symbol for this type. For example, if you provide
|
174
|
+
# :integer, Sequel will recognize this type as :integer_array during schema parsing.
|
175
|
+
# Defaults to the db_type argument.
|
176
|
+
#
|
177
|
+
# If a block is given, it is treated as the :converter option.
|
228
178
|
def register_array_type(db_type, opts=OPTS, &block)
|
229
|
-
|
230
|
-
|
179
|
+
oid = opts[:oid]
|
180
|
+
soid = opts[:scalar_oid]
|
181
|
+
|
182
|
+
if has_converter = opts.has_key?(:converter)
|
183
|
+
raise Error, "can't provide both a block and :converter option to register_array_type" if block
|
184
|
+
converter = opts[:converter]
|
185
|
+
else
|
186
|
+
has_converter = true if block
|
187
|
+
converter = block
|
188
|
+
end
|
189
|
+
|
190
|
+
unless (soid || has_converter) && oid
|
231
191
|
array_oid, scalar_oid = from(:pg_type).where(:typname=>db_type.to_s).get([:typarray, :oid])
|
232
|
-
|
233
|
-
|
192
|
+
soid ||= scalar_oid unless has_converter
|
193
|
+
oid ||= array_oid
|
234
194
|
end
|
235
|
-
PGArray.register(db_type, opts, &block)
|
236
|
-
@schema_type_classes[:"#{opts[:type_symbol] || db_type}_array"] = PGArray
|
237
|
-
conversion_procs_updated
|
238
|
-
end
|
239
195
|
|
240
|
-
|
241
|
-
|
242
|
-
|
196
|
+
db_type = db_type.to_s
|
197
|
+
type = (opts[:type_symbol] || db_type).to_sym
|
198
|
+
typecast_method_map = @pg_array_schema_types
|
199
|
+
|
200
|
+
if soid
|
201
|
+
raise Error, "can't provide both a converter and :scalar_oid option to register" if has_converter
|
202
|
+
converter = conversion_procs[soid]
|
203
|
+
end
|
204
|
+
|
205
|
+
array_type = (opts[:array_type] || db_type).to_s.dup.freeze
|
206
|
+
creator = Creator.new(array_type, converter)
|
207
|
+
add_conversion_proc(oid, creator)
|
208
|
+
|
209
|
+
typecast_method_map[db_type] = :"#{type}_array"
|
210
|
+
|
211
|
+
singleton_class.class_eval do
|
212
|
+
meth = :"typecast_value_#{type}_array"
|
213
|
+
scalar_typecast_method = :"typecast_value_#{opts.fetch(:scalar_typecast, type)}"
|
214
|
+
define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
|
215
|
+
private meth
|
216
|
+
alias_method(meth, meth)
|
217
|
+
end
|
218
|
+
|
219
|
+
@schema_type_classes[:"#{type}_array"] = PGArray
|
220
|
+
nil
|
243
221
|
end
|
244
222
|
|
245
223
|
private
|
@@ -248,46 +226,23 @@ module Sequel
|
|
248
226
|
def bound_variable_array(a)
|
249
227
|
case a
|
250
228
|
when Array
|
251
|
-
"{#{a.map{|i| bound_variable_array(i)}.join(
|
229
|
+
"{#{a.map{|i| bound_variable_array(i)}.join(',')}}"
|
252
230
|
when Sequel::SQL::Blob
|
253
|
-
"\"#{literal(a)[BLOB_RANGE].gsub(
|
231
|
+
"\"#{literal(a)[BLOB_RANGE].gsub("''", "'").gsub(/("|\\)/, '\\\\\1')}\""
|
254
232
|
when Sequel::LiteralString
|
255
233
|
a
|
256
234
|
when String
|
257
|
-
"\"#{a.gsub(
|
235
|
+
"\"#{a.gsub(/("|\\)/, '\\\\\1')}\""
|
258
236
|
else
|
259
237
|
literal(a)
|
260
238
|
end
|
261
239
|
end
|
262
240
|
|
263
|
-
# Automatically handle array types for the given named types.
|
264
|
-
def convert_named_procs_to_procs(named_procs)
|
265
|
-
h = super
|
266
|
-
unless h.empty?
|
267
|
-
from(:pg_type).where(:oid=>h.keys).select_map([:typname, :oid, :typarray]).each do |name, scalar_oid, array_oid|
|
268
|
-
register_array_type(name, :type_procs=>h, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
|
269
|
-
end
|
270
|
-
end
|
271
|
-
h
|
272
|
-
end
|
273
|
-
|
274
|
-
# Manually override the typecasting for timestamp array types so that
|
275
|
-
# they use the database's timezone instead of the global Sequel
|
276
|
-
# timezone.
|
277
|
-
def get_conversion_procs
|
278
|
-
procs = super
|
279
|
-
|
280
|
-
procs[1115] = Creator.new("timestamp without time zone", procs[1114])
|
281
|
-
procs[1185] = Creator.new("timestamp with time zone", procs[1184])
|
282
|
-
|
283
|
-
procs
|
284
|
-
end
|
285
|
-
|
286
241
|
# Look into both the current database's array schema types and the global
|
287
242
|
# array schema types to get the type symbol for the given database type
|
288
243
|
# string.
|
289
244
|
def pg_array_schema_type(type)
|
290
|
-
@pg_array_schema_types[type]
|
245
|
+
@pg_array_schema_types[type]
|
291
246
|
end
|
292
247
|
|
293
248
|
# Make the column type detection handle registered array types.
|
@@ -299,6 +254,17 @@ module Sequel
|
|
299
254
|
end
|
300
255
|
end
|
301
256
|
|
257
|
+
# Set the :callable_default value if the default value is recognized as an empty array.
|
258
|
+
def schema_post_process(_)
|
259
|
+
super.each do |a|
|
260
|
+
h = a[1]
|
261
|
+
if h[:default] =~ /\A(?:'\{\}'|ARRAY\[\])::([\w ]+)\[\]\z/
|
262
|
+
type = $1.freeze
|
263
|
+
h[:callable_default] = lambda{Sequel.pg_array([], type)}
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
302
268
|
# Convert ruby arrays to PostgreSQL arrays when used as default values.
|
303
269
|
def column_definition_default_sql(sql, column)
|
304
270
|
if (d = column[:default]) && d.is_a?(Array) && !Sequel.condition_specifier?(d)
|
@@ -335,97 +301,101 @@ module Sequel
|
|
335
301
|
end
|
336
302
|
end
|
337
303
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
end
|
304
|
+
unless Sequel::Postgres.respond_to?(:parse_pg_array)
|
305
|
+
require 'strscan'
|
306
|
+
|
307
|
+
# PostgreSQL array parser that handles PostgreSQL array output format.
|
308
|
+
# Note that does not handle all forms out input that PostgreSQL will
|
309
|
+
# accept, and it will not raise an error for all forms of invalid input.
|
310
|
+
class Parser < StringScanner
|
311
|
+
# Set the source for the input, and any converter callable
|
312
|
+
# to call with objects to be created. For nested parsers
|
313
|
+
# the source may contain text after the end current parse,
|
314
|
+
# which will be ignored.
|
315
|
+
def initialize(source, converter=nil)
|
316
|
+
super(source)
|
317
|
+
@converter = converter
|
318
|
+
@stack = [[]]
|
319
|
+
@encoding = string.encoding
|
320
|
+
@recorded = String.new.force_encoding(@encoding)
|
321
|
+
end
|
357
322
|
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
323
|
+
# Take the buffer of recorded characters and add it to the array
|
324
|
+
# of entries, and use a new buffer for recorded characters.
|
325
|
+
def new_entry(include_empty=false)
|
326
|
+
if !@recorded.empty? || include_empty
|
327
|
+
entry = @recorded
|
328
|
+
if entry == 'NULL' && !include_empty
|
329
|
+
entry = nil
|
330
|
+
elsif @converter
|
331
|
+
entry = @converter.call(entry)
|
332
|
+
end
|
333
|
+
@stack.last.push(entry)
|
334
|
+
@recorded = String.new.force_encoding(@encoding)
|
367
335
|
end
|
368
|
-
@stack.last.push(entry)
|
369
|
-
@recorded = String.new
|
370
336
|
end
|
371
|
-
end
|
372
337
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
338
|
+
# Parse the input character by character, returning an array
|
339
|
+
# of parsed (and potentially converted) objects.
|
340
|
+
def parse
|
341
|
+
raise Sequel::Error, "invalid array, empty string" if eos?
|
342
|
+
raise Sequel::Error, "invalid array, doesn't start with {" unless scan(/((\[\d+:\d+\])+=)?\{/)
|
343
|
+
|
344
|
+
# :nocov:
|
345
|
+
while !eos?
|
346
|
+
# :nocov:
|
347
|
+
char = scan(/[{}",]|[^{}",]+/)
|
348
|
+
if char == ','
|
349
|
+
# Comma outside quoted string indicates end of current entry
|
350
|
+
new_entry
|
351
|
+
elsif char == '"'
|
352
|
+
raise Sequel::Error, "invalid array, opening quote with existing recorded data" unless @recorded.empty?
|
353
|
+
# :nocov:
|
354
|
+
while true
|
355
|
+
# :nocov:
|
356
|
+
char = scan(/["\\]|[^"\\]+/)
|
357
|
+
if char == '\\'
|
358
|
+
@recorded << getch
|
359
|
+
elsif char == '"'
|
360
|
+
n = peek(1)
|
361
|
+
raise Sequel::Error, "invalid array, closing quote not followed by comma or closing brace" unless n == ',' || n == '}'
|
362
|
+
break
|
363
|
+
else
|
364
|
+
@recorded << char
|
365
|
+
end
|
366
|
+
end
|
367
|
+
new_entry(true)
|
368
|
+
elsif char == '{'
|
369
|
+
raise Sequel::Error, "invalid array, opening brace with existing recorded data" unless @recorded.empty?
|
370
|
+
|
371
|
+
# Start of new array, add it to the stack
|
372
|
+
new = []
|
373
|
+
@stack.last << new
|
374
|
+
@stack << new
|
375
|
+
elsif char == '}'
|
376
|
+
# End of current array, add current entry to the current array
|
377
|
+
new_entry
|
378
|
+
|
379
|
+
if @stack.length == 1
|
380
|
+
raise Sequel::Error, "array parsing finished without parsing entire string" unless eos?
|
381
|
+
|
382
|
+
# Top level of array, parsing should be over.
|
383
|
+
# Pop current array off stack and return it as result
|
384
|
+
return @stack.pop
|
394
385
|
else
|
395
|
-
|
386
|
+
# Nested array, pop current array off stack
|
387
|
+
@stack.pop
|
396
388
|
end
|
397
|
-
end
|
398
|
-
new_entry(true)
|
399
|
-
elsif char == OPEN_BRACE
|
400
|
-
raise Sequel::Error, "invalid array, opening brace with existing recorded data" unless @recorded.empty?
|
401
|
-
|
402
|
-
# Start of new array, add it to the stack
|
403
|
-
new = []
|
404
|
-
@stack.last << new
|
405
|
-
@stack << new
|
406
|
-
elsif char == CLOSE_BRACE
|
407
|
-
# End of current array, add current entry to the current array
|
408
|
-
new_entry
|
409
|
-
|
410
|
-
if @stack.length == 1
|
411
|
-
raise Sequel::Error, "array parsing finished without parsing entire string" unless eos?
|
412
|
-
|
413
|
-
# Top level of array, parsing should be over.
|
414
|
-
# Pop current array off stack and return it as result
|
415
|
-
return @stack.pop
|
416
389
|
else
|
417
|
-
#
|
418
|
-
@
|
390
|
+
# Add the character to the recorded character buffer.
|
391
|
+
@recorded << char
|
419
392
|
end
|
420
|
-
else
|
421
|
-
# Add the character to the recorded character buffer.
|
422
|
-
@recorded << char
|
423
393
|
end
|
424
|
-
end
|
425
394
|
|
426
|
-
|
395
|
+
raise Sequel::Error, "array parsing finished with array unclosed"
|
396
|
+
end
|
427
397
|
end
|
428
|
-
end
|
398
|
+
end
|
429
399
|
|
430
400
|
# Callable object that takes the input string and parses it using Parser.
|
431
401
|
class Creator
|
@@ -477,13 +447,13 @@ module Sequel
|
|
477
447
|
def sql_literal_append(ds, sql)
|
478
448
|
at = array_type
|
479
449
|
if empty? && at
|
480
|
-
sql <<
|
450
|
+
sql << "'{}'"
|
481
451
|
else
|
482
|
-
sql << ARRAY
|
452
|
+
sql << "ARRAY"
|
483
453
|
_literal_append(sql, ds, to_a)
|
484
454
|
end
|
485
455
|
if at
|
486
|
-
sql <<
|
456
|
+
sql << '::' << at.to_s << '[]'
|
487
457
|
end
|
488
458
|
end
|
489
459
|
|
@@ -493,9 +463,9 @@ module Sequel
|
|
493
463
|
# arrays, surrounding each with [] and interspersing
|
494
464
|
# entries with ,.
|
495
465
|
def _literal_append(sql, ds, array)
|
496
|
-
sql <<
|
466
|
+
sql << '['
|
497
467
|
comma = false
|
498
|
-
commas =
|
468
|
+
commas = ','
|
499
469
|
array.each do |i|
|
500
470
|
sql << commas if comma
|
501
471
|
if i.is_a?(Array)
|
@@ -505,44 +475,8 @@ module Sequel
|
|
505
475
|
end
|
506
476
|
comma = true
|
507
477
|
end
|
508
|
-
sql <<
|
478
|
+
sql << ']'
|
509
479
|
end
|
510
|
-
|
511
|
-
# Register all array types that this extension handles by default.
|
512
|
-
|
513
|
-
register('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string)
|
514
|
-
register('integer', :oid=>1007, :scalar_oid=>23)
|
515
|
-
register('bigint', :oid=>1016, :scalar_oid=>20, :scalar_typecast=>:integer)
|
516
|
-
register('numeric', :oid=>1231, :scalar_oid=>1700, :type_symbol=>:decimal)
|
517
|
-
register('double precision', :oid=>1022, :scalar_oid=>701, :type_symbol=>:float)
|
518
|
-
|
519
|
-
register('boolean', :oid=>1000, :scalar_oid=>16)
|
520
|
-
register('bytea', :oid=>1001, :scalar_oid=>17, :type_symbol=>:blob)
|
521
|
-
register('date', :oid=>1182, :scalar_oid=>1082)
|
522
|
-
register('time without time zone', :oid=>1183, :scalar_oid=>1083, :type_symbol=>:time)
|
523
|
-
register('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime)
|
524
|
-
register('time with time zone', :oid=>1270, :scalar_oid=>1083, :type_symbol=>:time_timezone, :scalar_typecast=>:time)
|
525
|
-
register('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime)
|
526
|
-
|
527
|
-
register('smallint', :oid=>1005, :scalar_oid=>21, :scalar_typecast=>:integer)
|
528
|
-
register('oid', :oid=>1028, :scalar_oid=>26, :scalar_typecast=>:integer)
|
529
|
-
register('real', :oid=>1021, :scalar_oid=>700, :scalar_typecast=>:float)
|
530
|
-
register('character', :oid=>1014, :array_type=>:text, :scalar_typecast=>:string)
|
531
|
-
register('character varying', :oid=>1015, :scalar_typecast=>:string, :type_symbol=>:varchar)
|
532
|
-
|
533
|
-
register('xml', :oid=>143, :scalar_oid=>142)
|
534
|
-
register('money', :oid=>791, :scalar_oid=>790)
|
535
|
-
register('bit', :oid=>1561, :scalar_oid=>1560)
|
536
|
-
register('bit varying', :oid=>1563, :scalar_oid=>1562, :type_symbol=>:varbit)
|
537
|
-
register('uuid', :oid=>2951, :scalar_oid=>2950)
|
538
|
-
|
539
|
-
register('xid', :oid=>1011, :scalar_oid=>28)
|
540
|
-
register('cid', :oid=>1012, :scalar_oid=>29)
|
541
|
-
|
542
|
-
register('name', :oid=>1003, :scalar_oid=>19)
|
543
|
-
register('tid', :oid=>1010, :scalar_oid=>27)
|
544
|
-
register('int2vector', :oid=>1006, :scalar_oid=>22)
|
545
|
-
register('oidvector', :oid=>1013, :scalar_oid=>30)
|
546
480
|
end
|
547
481
|
end
|
548
482
|
|