sequel 4.49.0 → 5.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 +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -4,53 +4,17 @@ module Sequel
|
|
4
4
|
module SqlAnywhere
|
5
5
|
Sequel::Database.set_shared_adapter_scheme(:sqlanywhere, self)
|
6
6
|
|
7
|
-
# SEQUEL5: Remove
|
8
|
-
@convert_smallint_to_bool = true
|
9
|
-
class << self
|
10
|
-
def convert_smallint_to_bool
|
11
|
-
Sequel::Deprecation.deprecate("Sequel::SqlAnywhere.convert_smallint_to_bool", "Call this method on the Database instance")
|
12
|
-
@convert_smallint_to_bool
|
13
|
-
end
|
14
|
-
def convert_smallint_to_bool=(v)
|
15
|
-
Sequel::Deprecation.deprecate("Sequel::SqlAnywhere.convert_smallint_to_bool=", "Call this method on the Database instance")
|
16
|
-
@convert_smallint_to_bool = v
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
7
|
module DatabaseMethods
|
21
8
|
attr_reader :conversion_procs
|
22
9
|
|
23
|
-
#
|
24
|
-
|
25
|
-
|
26
|
-
AUTO_INCREMENT = 'IDENTITY'.freeze
|
27
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
|
28
|
-
SQL_BEGIN = "BEGIN TRANSACTION".freeze
|
29
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_BEGIN)
|
30
|
-
SQL_COMMIT = "COMMIT TRANSACTION".freeze
|
31
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_COMMIT)
|
32
|
-
SQL_ROLLBACK = "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION".freeze
|
33
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK)
|
34
|
-
TEMPORARY = "GLOBAL TEMPORARY ".freeze
|
35
|
-
Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
|
36
|
-
SMALLINT_RE = /smallint/i.freeze
|
37
|
-
Sequel::Deprecation.deprecate_constant(self, :SMALLINT_RE)
|
38
|
-
DECIMAL_TYPE_RE = /numeric/i
|
39
|
-
Sequel::Deprecation.deprecate_constant(self, :DECIMAL_TYPE_RE)
|
40
|
-
|
41
|
-
# Whether to convert smallint to boolean arguments for this dataset.
|
42
|
-
# Defaults to the SqlAnywhere module setting.
|
43
|
-
def convert_smallint_to_bool
|
44
|
-
defined?(@convert_smallint_to_bool) ? @convert_smallint_to_bool : (@convert_smallint_to_bool = ::Sequel::SqlAnywhere.instance_variable_get(:@convert_smallint_to_bool)) # true) # SEQUEL5
|
45
|
-
end
|
10
|
+
# Set whether to convert smallint type to boolean for this Database instance
|
11
|
+
attr_accessor :convert_smallint_to_bool
|
46
12
|
|
47
|
-
# Sysbase Server uses the :sqlanywhere type.
|
48
13
|
def database_type
|
49
14
|
:sqlanywhere
|
50
15
|
end
|
51
16
|
|
52
17
|
def freeze
|
53
|
-
convert_smallint_to_bool
|
54
18
|
@conversion_procs.freeze
|
55
19
|
super
|
56
20
|
end
|
@@ -172,22 +136,18 @@ module Sequel
|
|
172
136
|
false
|
173
137
|
end
|
174
138
|
|
175
|
-
# SQL fragment for marking a table as temporary
|
176
139
|
def temporary_table_sql
|
177
140
|
"GLOBAL TEMPORARY "
|
178
141
|
end
|
179
142
|
|
180
|
-
# SQL to BEGIN a transaction.
|
181
143
|
def begin_transaction_sql
|
182
144
|
"BEGIN TRANSACTION"
|
183
145
|
end
|
184
146
|
|
185
|
-
# SQL to ROLLBACK a transaction.
|
186
147
|
def rollback_transaction_sql
|
187
148
|
"IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION"
|
188
149
|
end
|
189
150
|
|
190
|
-
# SQL to COMMIT a transaction.
|
191
151
|
def commit_transaction_sql
|
192
152
|
"COMMIT TRANSACTION"
|
193
153
|
end
|
@@ -214,7 +174,6 @@ module Sequel
|
|
214
174
|
:image
|
215
175
|
end
|
216
176
|
|
217
|
-
# Sybase specific syntax for altering tables.
|
218
177
|
def alter_table_sql(table, op)
|
219
178
|
case op[:op]
|
220
179
|
when :add_column
|
@@ -278,58 +237,9 @@ module Sequel
|
|
278
237
|
end
|
279
238
|
|
280
239
|
module DatasetMethods
|
281
|
-
BOOL_TRUE = '1'.freeze
|
282
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
283
|
-
BOOL_FALSE = '0'.freeze
|
284
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
285
|
-
WILDCARD = LiteralString.new('%').freeze
|
286
|
-
Sequel::Deprecation.deprecate_constant(self, :WILDCARD)
|
287
|
-
TOP = " TOP ".freeze
|
288
|
-
Sequel::Deprecation.deprecate_constant(self, :TOP)
|
289
|
-
START_AT = " START AT ".freeze
|
290
|
-
Sequel::Deprecation.deprecate_constant(self, :START_AT)
|
291
|
-
SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
|
292
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_WITH_RECURSIVE)
|
293
|
-
DATE_FUNCTION = 'today()'.freeze
|
294
|
-
Sequel::Deprecation.deprecate_constant(self, :DATE_FUNCTION)
|
295
|
-
NOW_FUNCTION = 'now()'.freeze
|
296
|
-
Sequel::Deprecation.deprecate_constant(self, :NOW_FUNCTION)
|
297
|
-
DATEPART = 'datepart'.freeze
|
298
|
-
Sequel::Deprecation.deprecate_constant(self, :DATEPART)
|
299
|
-
REGEXP = 'REGEXP'.freeze
|
300
|
-
Sequel::Deprecation.deprecate_constant(self, :REGEXP)
|
301
|
-
NOT_REGEXP = 'NOT REGEXP'.freeze
|
302
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_REGEXP)
|
303
|
-
APOS = "'".freeze
|
304
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
305
|
-
APOS_RE = /'/.freeze
|
306
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
307
|
-
DOUBLE_APOS = "''".freeze
|
308
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
309
|
-
BACKSLASH_RE = /\\/.freeze
|
310
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_RE)
|
311
|
-
QUAD_BACKSLASH = "\\\\\\\\".freeze
|
312
|
-
Sequel::Deprecation.deprecate_constant(self, :QUAD_BACKSLASH)
|
313
|
-
BLOB_START = "0x".freeze
|
314
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_START)
|
315
|
-
HSTAR = "H*".freeze
|
316
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
317
|
-
CROSS_APPLY = 'CROSS APPLY'.freeze
|
318
|
-
Sequel::Deprecation.deprecate_constant(self, :CROSS_APPLY)
|
319
|
-
OUTER_APPLY = 'OUTER APPLY'.freeze
|
320
|
-
Sequel::Deprecation.deprecate_constant(self, :OUTER_APPLY)
|
321
|
-
ONLY_OFFSET = " TOP 2147483647".freeze
|
322
|
-
Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
|
323
|
-
|
324
240
|
Dataset.def_sql_method(self, :insert, %w'with insert into columns values')
|
325
241
|
Dataset.def_sql_method(self, :select, %w'with select distinct limit columns into from join where group having compounds order lock')
|
326
242
|
|
327
|
-
# Override the default IBMDB.convert_smallint_to_bool setting for this dataset.
|
328
|
-
def convert_smallint_to_bool=(v)
|
329
|
-
Sequel::Deprecation.deprecate("Sequel::SqlAnywhere::Dataset#convert_smallint_to_bool=", "Call with_convert_smallint_to_bool instead, which returns a modified copy instead of modifying the object")
|
330
|
-
@opts[:convert_smallint_to_bool] = v
|
331
|
-
end
|
332
|
-
|
333
243
|
# Whether to convert smallint to boolean arguments for this dataset.
|
334
244
|
# Defaults to the IBMDB module setting.
|
335
245
|
def convert_smallint_to_bool
|
@@ -380,7 +290,6 @@ module Sequel
|
|
380
290
|
true
|
381
291
|
end
|
382
292
|
|
383
|
-
# SQLAnywhere uses + for string concatenation, and LIKE is case insensitive by default.
|
384
293
|
def complex_expression_sql_append(sql, op, args)
|
385
294
|
case op
|
386
295
|
when :'||'
|
@@ -437,7 +346,7 @@ module Sequel
|
|
437
346
|
string.gsub(/[\\%_\[]/){|m| "\\#{m}"}
|
438
347
|
end
|
439
348
|
|
440
|
-
# Use today() and
|
349
|
+
# Use today() for CURRENT_DATE and now() for CURRENT_TIMESTAMP and CURRENT_TIME
|
441
350
|
def constant_sql_append(sql, constant)
|
442
351
|
case constant
|
443
352
|
when :CURRENT_DATE
|
@@ -492,8 +401,7 @@ module Sequel
|
|
492
401
|
end
|
493
402
|
end
|
494
403
|
|
495
|
-
# Sybase uses TOP N for limit.
|
496
|
-
# to allow the limit to be a bound variable.
|
404
|
+
# Sybase uses TOP N for limit.
|
497
405
|
def select_limit_sql(sql)
|
498
406
|
l = @opts[:limit]
|
499
407
|
o = @opts[:offset]
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../utils/replace'
|
4
|
+
require_relative '../utils/unmodified_identifiers'
|
4
5
|
|
5
6
|
module Sequel
|
6
7
|
module SQLite
|
7
8
|
Sequel::Database.set_shared_adapter_scheme(:sqlite, self)
|
8
9
|
|
9
10
|
def self.mock_adapter_setup(db)
|
10
|
-
db.
|
11
|
+
db.instance_exec do
|
11
12
|
@sqlite_version = 30903
|
12
13
|
end
|
13
14
|
end
|
@@ -18,13 +19,6 @@ module Sequel
|
|
18
19
|
module DatabaseMethods
|
19
20
|
include UnmodifiedIdentifiers::DatabaseMethods
|
20
21
|
|
21
|
-
PRIMARY_KEY_INDEX_RE = /\Asqlite_autoindex_/.freeze
|
22
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
23
|
-
TABLES_FILTER = Sequel.~(:name=>'sqlite_sequence'.freeze) & {:type => 'table'.freeze}
|
24
|
-
Sequel::Deprecation.deprecate_constant(self, :TABLES_FILTER)
|
25
|
-
VIEWS_FILTER = {:type => 'view'.freeze}.freeze
|
26
|
-
Sequel::Deprecation.deprecate_constant(self, :VIEWS_FILTER)
|
27
|
-
|
28
22
|
AUTO_VACUUM = [:none, :full, :incremental].freeze
|
29
23
|
SYNCHRONOUS = [:off, :normal, :full].freeze
|
30
24
|
TEMP_STORE = [:default, :file, :memory].freeze
|
@@ -56,46 +50,6 @@ module Sequel
|
|
56
50
|
:sqlite
|
57
51
|
end
|
58
52
|
|
59
|
-
# SEQUEL5: Remove
|
60
|
-
def auto_vacuum
|
61
|
-
AUTO_VACUUM[pragma_get(:auto_vacuum).to_i]
|
62
|
-
end
|
63
|
-
def auto_vacuum=(value)
|
64
|
-
value = AUTO_VACUUM.index(value) || (raise Error, "Invalid value for auto_vacuum option. Please specify one of :none, :full, :incremental.")
|
65
|
-
pragma_set(:auto_vacuum, value)
|
66
|
-
end
|
67
|
-
def case_sensitive_like=(value)
|
68
|
-
pragma_set(:case_sensitive_like, !!value ? 'on' : 'off') if sqlite_version >= 30203
|
69
|
-
end
|
70
|
-
def foreign_keys
|
71
|
-
pragma_get(:foreign_keys).to_i == 1 if sqlite_version >= 30619
|
72
|
-
end
|
73
|
-
def foreign_keys=(value)
|
74
|
-
pragma_set(:foreign_keys, !!value ? 'on' : 'off') if sqlite_version >= 30619
|
75
|
-
end
|
76
|
-
def pragma_get(name)
|
77
|
-
Sequel::Deprecation.deprecate('Database#{pragma_get,auto_vacuum,case_sensitive_like,foreign_keys,synchronous,temp_store} on SQLite', "These methods may not be safe when using multiple connections, call fetch(#{"PRAGMA #{name}".inspect}).single_value if you really want to get the pragma value")
|
78
|
-
self["PRAGMA #{name}"].single_value
|
79
|
-
end
|
80
|
-
def pragma_set(name, value)
|
81
|
-
Sequel::Deprecation.deprecate('Database#{pragma_set,auto_vacuum=,case_sensitive_like=,foreign_keys=,synchronous=,temp_store=} on SQLite', "These methods are not thread safe or safe when using multiple connections, pass the appropriate option when connecting to set the pragma correctly for all connections")
|
82
|
-
execute_ddl("PRAGMA #{name} = #{value}")
|
83
|
-
end
|
84
|
-
def synchronous
|
85
|
-
SYNCHRONOUS[pragma_get(:synchronous).to_i]
|
86
|
-
end
|
87
|
-
def synchronous=(value)
|
88
|
-
value = SYNCHRONOUS.index(value) || (raise Error, "Invalid value for synchronous option. Please specify one of :off, :normal, :full.")
|
89
|
-
pragma_set(:synchronous, value)
|
90
|
-
end
|
91
|
-
def temp_store
|
92
|
-
TEMP_STORE[pragma_get(:temp_store).to_i]
|
93
|
-
end
|
94
|
-
def temp_store=(value)
|
95
|
-
value = TEMP_STORE.index(value) || (raise Error, "Invalid value for temp_store option. Please specify one of :default, :file, :memory.")
|
96
|
-
pragma_set(:temp_store, value)
|
97
|
-
end
|
98
|
-
|
99
53
|
# Set the integer_booleans option using the passed in :integer_boolean option.
|
100
54
|
def set_integer_booleans
|
101
55
|
@integer_booleans = @opts.has_key?(:integer_booleans) ? typecast_value_boolean(@opts[:integer_booleans]) : true
|
@@ -203,7 +157,7 @@ module Sequel
|
|
203
157
|
# Creates a dataset that uses the VALUES clause:
|
204
158
|
#
|
205
159
|
# DB.values([[1, 2], [3, 4]])
|
206
|
-
# VALUES ((1, 2), (3, 4))
|
160
|
+
# # VALUES ((1, 2), (3, 4))
|
207
161
|
def values(v)
|
208
162
|
@default_dataset.clone(:values=>v)
|
209
163
|
end
|
@@ -527,7 +481,6 @@ module Sequel
|
|
527
481
|
end
|
528
482
|
end
|
529
483
|
|
530
|
-
# Instance methods for datasets that connect to an SQLite database
|
531
484
|
module DatasetMethods
|
532
485
|
include Dataset::Replace
|
533
486
|
include UnmodifiedIdentifiers::DatasetMethods
|
@@ -535,50 +488,9 @@ module Sequel
|
|
535
488
|
# The allowed values for insert_conflict
|
536
489
|
INSERT_CONFLICT_RESOLUTIONS = %w'ROLLBACK ABORT FAIL IGNORE REPLACE'.each(&:freeze).freeze
|
537
490
|
|
538
|
-
CONSTANT_MAP = {:CURRENT_DATE=>"date(CURRENT_TIMESTAMP, 'localtime')".freeze, :CURRENT_TIMESTAMP=>"datetime(CURRENT_TIMESTAMP, 'localtime')".freeze, :CURRENT_TIME=>"time(CURRENT_TIMESTAMP, 'localtime')".freeze}
|
539
|
-
EXTRACT_MAP = {:year=>"'%Y'", :month=>"'%m'", :day=>"'%d'", :hour=>"'%H'", :minute=>"'%M'", :second=>"'%f'"}
|
540
|
-
|
541
|
-
|
542
|
-
NOT_SPACE = 'NOT '.freeze
|
543
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_SPACE)
|
544
|
-
COMMA = ', '.freeze
|
545
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
546
|
-
PAREN_CLOSE = ')'.freeze
|
547
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
548
|
-
AS = ' AS '.freeze
|
549
|
-
Sequel::Deprecation.deprecate_constant(self, :AS)
|
550
|
-
APOS = "'".freeze
|
551
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
552
|
-
EXTRACT_OPEN = "CAST(strftime(".freeze
|
553
|
-
Sequel::Deprecation.deprecate_constant(self, :EXTRACT_OPEN)
|
554
|
-
EXTRACT_CLOSE = ') AS '.freeze
|
555
|
-
Sequel::Deprecation.deprecate_constant(self, :EXTRACT_CLOSE)
|
556
|
-
NUMERIC = 'NUMERIC'.freeze
|
557
|
-
Sequel::Deprecation.deprecate_constant(self, :NUMERIC)
|
558
|
-
INTEGER = 'INTEGER'.freeze
|
559
|
-
Sequel::Deprecation.deprecate_constant(self, :INTEGER)
|
560
|
-
BACKTICK = '`'.freeze
|
561
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKTICK)
|
562
|
-
BACKTICK_RE = /`/.freeze
|
563
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKTICK_RE)
|
564
|
-
DOUBLE_BACKTICK = '``'.freeze
|
565
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_BACKTICK)
|
566
|
-
BLOB_START = "X'".freeze
|
567
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_START)
|
568
|
-
HSTAR = "H*".freeze
|
569
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
570
|
-
DATE_OPEN = "date(".freeze
|
571
|
-
Sequel::Deprecation.deprecate_constant(self, :DATE_OPEN)
|
572
|
-
DATETIME_OPEN = "datetime(".freeze
|
573
|
-
Sequel::Deprecation.deprecate_constant(self, :DATETIME_OPEN)
|
574
|
-
ONLY_OFFSET = " LIMIT -1 OFFSET ".freeze
|
575
|
-
Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
|
576
|
-
OR = " OR ".freeze
|
577
|
-
Sequel::Deprecation.deprecate_constant(self, :OR)
|
578
|
-
SELECT_VALUES = "VALUES ".freeze
|
579
|
-
Sequel::Deprecation.deprecate_constant(self, :SELECT_VALUES)
|
580
|
-
EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
|
581
|
-
Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
|
491
|
+
CONSTANT_MAP = {:CURRENT_DATE=>"date(CURRENT_TIMESTAMP, 'localtime')".freeze, :CURRENT_TIMESTAMP=>"datetime(CURRENT_TIMESTAMP, 'localtime')".freeze, :CURRENT_TIME=>"time(CURRENT_TIMESTAMP, 'localtime')".freeze}.freeze
|
492
|
+
EXTRACT_MAP = {:year=>"'%Y'", :month=>"'%m'", :day=>"'%d'", :hour=>"'%H'", :minute=>"'%M'", :second=>"'%f'"}.freeze
|
493
|
+
EXTRACT_MAP.each_value(&:freeze)
|
582
494
|
|
583
495
|
Dataset.def_sql_method(self, :delete, [['if db.sqlite_version >= 30803', %w'with delete from where'], ["else", %w'delete from where']])
|
584
496
|
Dataset.def_sql_method(self, :insert, [['if db.sqlite_version >= 30803', %w'with insert conflict into columns values'], ["else", %w'insert conflict into columns values']])
|
@@ -600,7 +512,7 @@ module Sequel
|
|
600
512
|
end
|
601
513
|
|
602
514
|
# SQLite doesn't support a NOT LIKE b, you need to use NOT (a LIKE b).
|
603
|
-
# It doesn't support xor or the extract function natively, so those have to be emulated.
|
515
|
+
# It doesn't support xor, power, or the extract function natively, so those have to be emulated.
|
604
516
|
def complex_expression_sql_append(sql, op, args)
|
605
517
|
case op
|
606
518
|
when :"NOT LIKE", :"NOT ILIKE"
|
@@ -703,15 +615,14 @@ module Sequel
|
|
703
615
|
#
|
704
616
|
# Examples:
|
705
617
|
#
|
706
|
-
# DB[:table].insert_conflict.insert(:
|
618
|
+
# DB[:table].insert_conflict.insert(a: 1, b: 2)
|
707
619
|
# # INSERT OR IGNORE INTO TABLE (a, b) VALUES (1, 2)
|
708
620
|
#
|
709
|
-
# DB[:table].insert_conflict(:replace).insert(:
|
621
|
+
# DB[:table].insert_conflict(:replace).insert(a: 1, b: 2)
|
710
622
|
# # INSERT OR REPLACE INTO TABLE (a, b) VALUES (1, 2)
|
711
623
|
def insert_conflict(resolution = :ignore)
|
712
624
|
unless INSERT_CONFLICT_RESOLUTIONS.include?(resolution.to_s.upcase)
|
713
|
-
|
714
|
-
# raise Error, "Invalid value passed to Dataset#insert_conflict: #{resolution.inspect}. The allowed values are: :rollback, :abort, :fail, :ignore, or :replace"
|
625
|
+
raise Error, "Invalid value passed to Dataset#insert_conflict: #{resolution.inspect}. The allowed values are: :rollback, :abort, :fail, :ignore, or :replace"
|
715
626
|
end
|
716
627
|
clone(:insert_conflict => resolution)
|
717
628
|
end
|
@@ -719,7 +630,7 @@ module Sequel
|
|
719
630
|
# Ignore uniqueness/exclusion violations when inserting, using INSERT OR IGNORE.
|
720
631
|
# Exists mostly for compatibility to MySQL's insert_ignore. Example:
|
721
632
|
#
|
722
|
-
# DB[:table].insert_ignore.insert(:
|
633
|
+
# DB[:table].insert_ignore.insert(a: 1, b: 2)
|
723
634
|
# # INSERT OR IGNORE INTO TABLE (a, b) VALUES (1, 2)
|
724
635
|
def insert_ignore
|
725
636
|
insert_conflict(:ignore)
|
@@ -1,11 +1,9 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
3
|
require 'sqlanywhere'
|
4
|
-
|
5
|
-
Sequel.require %w'shared/sqlanywhere', 'adapters'
|
4
|
+
require_relative 'shared/sqlanywhere'
|
6
5
|
|
7
6
|
module Sequel
|
8
|
-
# Module for holding all SqlAnywhere-related classes and modules for Sequel.
|
9
7
|
module SqlAnywhere
|
10
8
|
|
11
9
|
class SQLAnywhereException < StandardError
|
@@ -27,9 +25,6 @@ module Sequel
|
|
27
25
|
def time(s) ::Sequel.string_to_time(s) end
|
28
26
|
end.new
|
29
27
|
|
30
|
-
TYPE_TRANSLATOR = tt
|
31
|
-
Sequel::Deprecation.deprecate_constant(self, :TYPE_TRANSLATOR)
|
32
|
-
|
33
28
|
SQLANYWHERE_TYPES = {}
|
34
29
|
{
|
35
30
|
[0, 484] => tt.method(:decimal),
|
@@ -40,15 +35,11 @@ module Sequel
|
|
40
35
|
}.each do |k,v|
|
41
36
|
k.each{|n| SQLANYWHERE_TYPES[n] = v}
|
42
37
|
end
|
43
|
-
|
38
|
+
SQLANYWHERE_TYPES.freeze
|
44
39
|
|
45
|
-
# Database class for SQLAnywhere databases used with Sequel.
|
46
40
|
class Database < Sequel::Database
|
47
41
|
include Sequel::SqlAnywhere::DatabaseMethods
|
48
42
|
|
49
|
-
DEFAULT_CONFIG = { :user => 'dba', :password => 'sql' }
|
50
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_CONFIG)
|
51
|
-
|
52
43
|
attr_accessor :api
|
53
44
|
|
54
45
|
set_adapter_scheme :sqlanywhere
|
@@ -79,12 +70,10 @@ module Sequel
|
|
79
70
|
conn
|
80
71
|
end
|
81
72
|
|
82
|
-
# Closes given database connection.
|
83
73
|
def disconnect_connection(c)
|
84
74
|
@api.sqlany_disconnect(c)
|
85
75
|
end
|
86
76
|
|
87
|
-
# Returns number of rows affected
|
88
77
|
def execute_dui(sql, opts=OPTS)
|
89
78
|
synchronize(opts[:server]) do |conn|
|
90
79
|
_execute(conn, :rows, sql, opts)
|
@@ -110,8 +99,6 @@ module Sequel
|
|
110
99
|
|
111
100
|
private
|
112
101
|
|
113
|
-
LAST_INSERT_ID = 'SELECT @@IDENTITY'.freeze
|
114
|
-
Sequel::Deprecation.deprecate_constant(self, :LAST_INSERT_ID)
|
115
102
|
def _execute(conn, type, sql, opts)
|
116
103
|
unless rs = log_connection_yield(sql, conn){@api.sqlany_execute_direct(conn, sql)}
|
117
104
|
result, errstr = @api.sqlany_error(conn)
|
@@ -132,6 +119,7 @@ module Sequel
|
|
132
119
|
end
|
133
120
|
|
134
121
|
def adapter_initialize
|
122
|
+
@convert_smallint_to_bool = true
|
135
123
|
@conversion_procs = SQLANYWHERE_TYPES.dup
|
136
124
|
@conversion_procs[392] = method(:to_application_timestamp_sa)
|
137
125
|
@api = SQLAnywhere::SQLAnywhereInterface.new
|
@@ -148,22 +136,15 @@ module Sequel
|
|
148
136
|
end
|
149
137
|
end
|
150
138
|
|
151
|
-
# Dataset class for SqlAnywhere datasets accessed via the native driver.
|
152
139
|
class Dataset < Sequel::Dataset
|
153
140
|
include Sequel::SqlAnywhere::DatasetMethods
|
154
141
|
|
155
|
-
Database::DatasetClass = self
|
156
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
157
|
-
|
158
|
-
# Yield all rows matching this dataset. If the dataset is set to
|
159
|
-
# split multiple statements, yield arrays of hashes one per statement
|
160
|
-
# instead of yielding results for all statements as hashes.
|
161
142
|
def fetch_rows(sql)
|
162
143
|
db = @db
|
163
144
|
cps = db.conversion_procs
|
164
145
|
api = db.api
|
165
146
|
execute(sql) do |rs|
|
166
|
-
convert =
|
147
|
+
convert = convert_smallint_to_bool
|
167
148
|
col_infos = []
|
168
149
|
api.sqlany_num_cols(rs).times do |i|
|
169
150
|
_, _, name, _, type = api.sqlany_get_column_info(rs, i)
|
@@ -1,11 +1,9 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
3
|
require 'sqlite3'
|
4
|
-
|
4
|
+
require_relative 'shared/sqlite'
|
5
5
|
|
6
6
|
module Sequel
|
7
|
-
# Top level module for holding all SQLite-related modules and classes
|
8
|
-
# for Sequel.
|
9
7
|
module SQLite
|
10
8
|
FALSE_VALUES = (%w'0 false f no n' + [0]).freeze
|
11
9
|
|
@@ -60,9 +58,6 @@ module Sequel
|
|
60
58
|
end
|
61
59
|
end.new
|
62
60
|
|
63
|
-
TYPE_TRANSLATOR = tt
|
64
|
-
Sequel::Deprecation.deprecate_constant(self, :TYPE_TRANSLATOR)
|
65
|
-
|
66
61
|
# Hash with string keys and callable values for converting SQLite types.
|
67
62
|
SQLITE_TYPES = {}
|
68
63
|
{
|
@@ -76,10 +71,8 @@ module Sequel
|
|
76
71
|
}.each do |k,v|
|
77
72
|
k.each{|n| SQLITE_TYPES[n] = v}
|
78
73
|
end
|
79
|
-
|
74
|
+
SQLITE_TYPES.freeze
|
80
75
|
|
81
|
-
# Database class for SQLite databases used with Sequel and the
|
82
|
-
# ruby-sqlite3 driver.
|
83
76
|
class Database < Sequel::Database
|
84
77
|
include ::Sequel::SQLite::DatabaseMethods
|
85
78
|
|
@@ -149,7 +142,6 @@ module Sequel
|
|
149
142
|
end
|
150
143
|
end
|
151
144
|
|
152
|
-
# Run the given SQL with the given arguments and return the last inserted row id.
|
153
145
|
def execute_insert(sql, opts=OPTS)
|
154
146
|
_execute(:insert, sql, opts)
|
155
147
|
end
|
@@ -291,17 +283,9 @@ module Sequel
|
|
291
283
|
#end
|
292
284
|
end
|
293
285
|
|
294
|
-
# Dataset class for SQLite datasets that use the ruby-sqlite3 driver.
|
295
286
|
class Dataset < Sequel::Dataset
|
296
287
|
include ::Sequel::SQLite::DatasetMethods
|
297
288
|
|
298
|
-
Database::DatasetClass = self
|
299
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
300
|
-
|
301
|
-
PREPARED_ARG_PLACEHOLDER = ':'.freeze
|
302
|
-
Sequel::Deprecation.deprecate_constant(self, :PREPARED_ARG_PLACEHOLDER)
|
303
|
-
|
304
|
-
# SQLite already supports named bind arguments, so use directly.
|
305
289
|
module ArgumentMapper
|
306
290
|
include Sequel::Dataset::ArgumentMapper
|
307
291
|
|
@@ -332,7 +316,6 @@ module Sequel
|
|
332
316
|
BindArgumentMethods = prepared_statements_module(:bind, ArgumentMapper)
|
333
317
|
PreparedStatementMethods = prepared_statements_module(:prepare, BindArgumentMethods)
|
334
318
|
|
335
|
-
# Yield a hash for each row in the dataset.
|
336
319
|
def fetch_rows(sql)
|
337
320
|
execute(sql) do |result|
|
338
321
|
i = -1
|