sequel 4.22.0 → 4.23.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 +22 -0
- data/README.rdoc +6 -0
- data/Rakefile +59 -81
- data/doc/migration.rdoc +2 -0
- data/doc/release_notes/4.23.0.txt +65 -0
- data/doc/sharding.rdoc +16 -14
- data/doc/testing.rdoc +61 -77
- data/lib/sequel/adapters/jdbc.rb +1 -0
- data/lib/sequel/adapters/mock.rb +0 -1
- data/lib/sequel/adapters/postgres.rb +1 -0
- data/lib/sequel/adapters/postgresql.rb +1 -0
- data/lib/sequel/adapters/shared/postgres.rb +3 -3
- data/lib/sequel/connection_pool/sharded_threaded.rb +5 -0
- data/lib/sequel/connection_pool/threaded.rb +9 -1
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/transactions.rb +2 -1
- data/lib/sequel/dataset/prepared_statements.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +12 -12
- data/lib/sequel/extensions/date_arithmetic.rb +0 -4
- data/lib/sequel/extensions/pagination.rb +14 -2
- data/lib/sequel/extensions/pg_enum.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +1 -1
- data/lib/sequel/extensions/pg_json_ops.rb +2 -2
- data/lib/sequel/plugins/csv_serializer.rb +2 -0
- data/lib/sequel/plugins/delay_add_association.rb +50 -0
- data/lib/sequel/plugins/list.rb +2 -2
- data/lib/sequel/plugins/nested_attributes.rb +8 -28
- data/lib/sequel/plugins/update_refresh.rb +50 -0
- data/lib/sequel/plugins/validate_associated.rb +55 -0
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/db2_spec.rb +29 -29
- data/spec/adapters/firebird_spec.rb +97 -103
- data/spec/adapters/informix_spec.rb +25 -25
- data/spec/adapters/mssql_spec.rb +156 -172
- data/spec/adapters/mysql_spec.rb +334 -359
- data/spec/adapters/oracle_spec.rb +67 -69
- data/spec/adapters/postgres_spec.rb +1298 -1249
- data/spec/adapters/spec_helper.rb +2 -35
- data/spec/adapters/sqlanywhere_spec.rb +39 -39
- data/spec/adapters/sqlite_spec.rb +203 -200
- data/spec/bin_spec.rb +57 -59
- data/spec/core/connection_pool_spec.rb +402 -401
- data/spec/core/database_spec.rb +953 -944
- data/spec/core/dataset_spec.rb +2178 -2168
- data/spec/core/deprecated_spec.rb +19 -19
- data/spec/core/expression_filters_spec.rb +415 -415
- data/spec/core/mock_adapter_spec.rb +212 -212
- data/spec/core/object_graph_spec.rb +73 -73
- data/spec/core/placeholder_literalizer_spec.rb +71 -71
- data/spec/core/schema_generator_spec.rb +44 -44
- data/spec/core/schema_spec.rb +470 -472
- data/spec/core/spec_helper.rb +5 -20
- data/spec/core/version_spec.rb +2 -2
- data/spec/core_extensions_spec.rb +320 -320
- data/spec/extensions/accessed_columns_spec.rb +12 -12
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +2 -2
- data/spec/extensions/arbitrary_servers_spec.rb +23 -23
- data/spec/extensions/association_dependencies_spec.rb +34 -34
- data/spec/extensions/association_pks_spec.rb +98 -98
- data/spec/extensions/association_proxies_spec.rb +33 -33
- data/spec/extensions/auto_validations_spec.rb +46 -46
- data/spec/extensions/blacklist_security_spec.rb +19 -18
- data/spec/extensions/blank_spec.rb +36 -36
- data/spec/extensions/boolean_readers_spec.rb +36 -36
- data/spec/extensions/caching_spec.rb +82 -82
- data/spec/extensions/class_table_inheritance_spec.rb +72 -72
- data/spec/extensions/column_conflicts_spec.rb +19 -14
- data/spec/extensions/column_select_spec.rb +19 -19
- data/spec/extensions/columns_introspection_spec.rb +43 -43
- data/spec/extensions/composition_spec.rb +64 -64
- data/spec/extensions/connection_validator_spec.rb +92 -90
- data/spec/extensions/constraint_validations_plugin_spec.rb +92 -92
- data/spec/extensions/constraint_validations_spec.rb +80 -80
- data/spec/extensions/core_refinements_spec.rb +220 -220
- data/spec/extensions/csv_serializer_spec.rb +44 -44
- data/spec/extensions/current_datetime_timestamp_spec.rb +8 -8
- data/spec/extensions/dataset_associations_spec.rb +65 -65
- data/spec/extensions/dataset_source_alias_spec.rb +16 -16
- data/spec/extensions/date_arithmetic_spec.rb +51 -58
- data/spec/extensions/defaults_setter_spec.rb +19 -19
- data/spec/extensions/delay_add_association_spec.rb +52 -0
- data/spec/extensions/dirty_spec.rb +51 -51
- data/spec/extensions/eager_each_spec.rb +8 -8
- data/spec/extensions/empty_array_ignore_nulls_spec.rb +10 -10
- data/spec/extensions/error_splitter_spec.rb +2 -2
- data/spec/extensions/error_sql_spec.rb +4 -4
- data/spec/extensions/eval_inspect_spec.rb +3 -3
- data/spec/extensions/filter_having_spec.rb +8 -8
- data/spec/extensions/force_encoding_spec.rb +30 -30
- data/spec/extensions/from_block_spec.rb +7 -7
- data/spec/extensions/graph_each_spec.rb +19 -19
- data/spec/extensions/hash_aliases_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +100 -100
- data/spec/extensions/inflector_spec.rb +54 -54
- data/spec/extensions/input_transformer_spec.rb +10 -10
- data/spec/extensions/insert_returning_select_spec.rb +8 -8
- data/spec/extensions/instance_filters_spec.rb +26 -26
- data/spec/extensions/instance_hooks_spec.rb +85 -85
- data/spec/extensions/json_serializer_spec.rb +68 -68
- data/spec/extensions/lazy_attributes_spec.rb +49 -49
- data/spec/extensions/list_spec.rb +77 -75
- data/spec/extensions/looser_typecasting_spec.rb +16 -16
- data/spec/extensions/many_through_many_spec.rb +627 -627
- data/spec/extensions/meta_def_spec.rb +7 -7
- data/spec/extensions/migration_spec.rb +217 -217
- data/spec/extensions/modification_detection_spec.rb +20 -20
- data/spec/extensions/mssql_optimistic_locking_spec.rb +21 -21
- data/spec/extensions/named_timezones_spec.rb +18 -18
- data/spec/extensions/nested_attributes_spec.rb +107 -107
- data/spec/extensions/null_dataset_spec.rb +24 -24
- data/spec/extensions/optimistic_locking_spec.rb +21 -21
- data/spec/extensions/pagination_spec.rb +52 -52
- data/spec/extensions/pg_array_associations_spec.rb +273 -273
- data/spec/extensions/pg_array_ops_spec.rb +52 -52
- data/spec/extensions/pg_array_spec.rb +152 -152
- data/spec/extensions/pg_enum_spec.rb +13 -13
- data/spec/extensions/pg_hstore_ops_spec.rb +63 -63
- data/spec/extensions/pg_hstore_spec.rb +84 -84
- data/spec/extensions/pg_inet_spec.rb +15 -15
- data/spec/extensions/pg_interval_spec.rb +29 -29
- data/spec/extensions/pg_json_ops_spec.rb +86 -84
- data/spec/extensions/pg_json_spec.rb +104 -104
- data/spec/extensions/pg_loose_count_spec.rb +6 -6
- data/spec/extensions/pg_range_ops_spec.rb +24 -24
- data/spec/extensions/pg_range_spec.rb +143 -143
- data/spec/extensions/pg_row_ops_spec.rb +14 -14
- data/spec/extensions/pg_row_plugin_spec.rb +12 -12
- data/spec/extensions/pg_row_spec.rb +118 -118
- data/spec/extensions/pg_static_cache_updater_spec.rb +28 -28
- data/spec/extensions/pg_typecast_on_load_spec.rb +21 -21
- data/spec/extensions/prepared_statements_associations_spec.rb +42 -42
- data/spec/extensions/prepared_statements_safe_spec.rb +18 -18
- data/spec/extensions/prepared_statements_spec.rb +28 -28
- data/spec/extensions/prepared_statements_with_pk_spec.rb +11 -11
- data/spec/extensions/pretty_table_spec.rb +16 -16
- data/spec/extensions/query_literals_spec.rb +37 -37
- data/spec/extensions/query_spec.rb +32 -32
- data/spec/extensions/rcte_tree_spec.rb +141 -141
- data/spec/extensions/round_timestamps_spec.rb +21 -21
- data/spec/extensions/schema_caching_spec.rb +8 -8
- data/spec/extensions/schema_dumper_spec.rb +78 -78
- data/spec/extensions/schema_spec.rb +31 -27
- data/spec/extensions/scissors_spec.rb +3 -3
- data/spec/extensions/select_remove_spec.rb +14 -14
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +28 -28
- data/spec/extensions/serialization_modification_detection_spec.rb +33 -33
- data/spec/extensions/serialization_spec.rb +79 -78
- data/spec/extensions/server_block_spec.rb +17 -17
- data/spec/extensions/set_overrides_spec.rb +30 -30
- data/spec/extensions/sharding_spec.rb +65 -65
- data/spec/extensions/shared_caching_spec.rb +29 -29
- data/spec/extensions/single_table_inheritance_spec.rb +79 -79
- data/spec/extensions/skip_create_refresh_spec.rb +3 -3
- data/spec/extensions/spec_helper.rb +4 -29
- data/spec/extensions/split_array_nil_spec.rb +9 -9
- data/spec/extensions/split_values_spec.rb +7 -7
- data/spec/extensions/sql_expr_spec.rb +32 -32
- data/spec/extensions/static_cache_spec.rb +123 -123
- data/spec/extensions/string_date_time_spec.rb +34 -34
- data/spec/extensions/string_stripper_spec.rb +15 -15
- data/spec/extensions/subclasses_spec.rb +31 -31
- data/spec/extensions/table_select_spec.rb +15 -15
- data/spec/extensions/tactical_eager_loading_spec.rb +23 -23
- data/spec/extensions/thread_local_timezones_spec.rb +13 -13
- data/spec/extensions/timestamps_spec.rb +40 -40
- data/spec/extensions/to_dot_spec.rb +34 -34
- data/spec/extensions/touch_spec.rb +52 -52
- data/spec/extensions/tree_spec.rb +72 -72
- data/spec/extensions/typecast_on_load_spec.rb +25 -25
- data/spec/extensions/unlimited_update_spec.rb +2 -2
- data/spec/extensions/update_or_create_spec.rb +36 -36
- data/spec/extensions/update_primary_key_spec.rb +35 -35
- data/spec/extensions/update_refresh_spec.rb +41 -0
- data/spec/extensions/validate_associated_spec.rb +52 -0
- data/spec/extensions/validation_class_methods_spec.rb +314 -317
- data/spec/extensions/validation_helpers_spec.rb +195 -195
- data/spec/extensions/xml_serializer_spec.rb +48 -48
- data/spec/guards_helper.rb +55 -0
- data/spec/integration/associations_test.rb +1089 -1088
- data/spec/integration/database_test.rb +29 -29
- data/spec/integration/dataset_test.rb +661 -661
- data/spec/integration/eager_loader_test.rb +147 -147
- data/spec/integration/migrator_test.rb +122 -122
- data/spec/integration/model_test.rb +70 -70
- data/spec/integration/plugin_test.rb +682 -640
- data/spec/integration/prepared_statement_test.rb +172 -172
- data/spec/integration/schema_test.rb +245 -245
- data/spec/integration/spec_helper.rb +1 -64
- data/spec/integration/timezone_test.rb +17 -17
- data/spec/integration/transaction_test.rb +87 -87
- data/spec/integration/type_test.rb +33 -33
- data/spec/model/association_reflection_spec.rb +130 -121
- data/spec/model/associations_spec.rb +1112 -1113
- data/spec/model/base_spec.rb +197 -196
- data/spec/model/class_dataset_methods_spec.rb +118 -118
- data/spec/model/dataset_methods_spec.rb +49 -49
- data/spec/model/eager_loading_spec.rb +705 -702
- data/spec/model/hooks_spec.rb +169 -168
- data/spec/model/inflector_spec.rb +5 -5
- data/spec/model/model_spec.rb +287 -297
- data/spec/model/plugins_spec.rb +47 -47
- data/spec/model/record_spec.rb +534 -535
- data/spec/model/spec_helper.rb +3 -21
- data/spec/model/validations_spec.rb +72 -70
- data/spec/spec_config.rb +8 -0
- metadata +41 -9
- data/lib/sequel/adapters/fdbsql.rb +0 -286
- data/lib/sequel/adapters/jdbc/fdbsql.rb +0 -66
- data/lib/sequel/adapters/openbase.rb +0 -54
- data/lib/sequel/adapters/shared/fdbsql.rb +0 -550
- data/spec/adapters/fdbsql_spec.rb +0 -429
- data/spec/rspec_helper.rb +0 -22
|
@@ -6,36 +6,36 @@ describe "Sequel::Dataset::RoundTimestamps" do
|
|
|
6
6
|
@dataset = Sequel.mock.dataset.extension(:round_timestamps)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.5)).
|
|
11
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999995)).
|
|
12
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999995, 10000000))).
|
|
9
|
+
it "should round times properly for databases supporting microsecond precision" do
|
|
10
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.5)).must_equal "'01:02:03.500000'"
|
|
11
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999995)).must_equal "'2010-01-02 03:04:05.500000'"
|
|
12
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999995, 10000000))).must_equal "'2010-01-02 03:04:05.500000'"
|
|
13
13
|
|
|
14
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.4)).
|
|
15
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999994)).
|
|
16
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999994, 10000000))).
|
|
14
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.4)).must_equal "'01:02:03.499999'"
|
|
15
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999994)).must_equal "'2010-01-02 03:04:05.499999'"
|
|
16
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999994, 10000000))).must_equal "'2010-01-02 03:04:05.499999'"
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
it "should round times properly for databases supporting millisecond precision" do
|
|
20
20
|
def @dataset.timestamp_precision() 3 end
|
|
21
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499500)).
|
|
22
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4995)).
|
|
23
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54995, 10000))).
|
|
21
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499500)).must_equal "'01:02:03.500'"
|
|
22
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4995)).must_equal "'2010-01-02 03:04:05.500'"
|
|
23
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54995, 10000))).must_equal "'2010-01-02 03:04:05.500'"
|
|
24
24
|
|
|
25
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499499)).
|
|
26
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4994)).
|
|
27
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54994, 10000))).
|
|
25
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499499)).must_equal "'01:02:03.499'"
|
|
26
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4994)).must_equal "'2010-01-02 03:04:05.499'"
|
|
27
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54994, 10000))).must_equal "'2010-01-02 03:04:05.499'"
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
it "should round times properly for databases supporting second precision" do
|
|
31
31
|
def @dataset.supports_timestamp_usecs?() false end
|
|
32
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 500000)).
|
|
33
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.5)).
|
|
34
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(55, 10))).
|
|
32
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 500000)).must_equal "'01:02:04'"
|
|
33
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.5)).must_equal "'2010-01-02 03:04:06'"
|
|
34
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(55, 10))).must_equal "'2010-01-02 03:04:06'"
|
|
35
35
|
|
|
36
|
-
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999)).
|
|
37
|
-
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999999)).
|
|
38
|
-
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999999, 10000000))).
|
|
36
|
+
@dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999)).must_equal "'01:02:03'"
|
|
37
|
+
@dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999999)).must_equal "'2010-01-02 03:04:05'"
|
|
38
|
+
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999999, 10000000))).must_equal "'2010-01-02 03:04:05'"
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
else
|
|
@@ -12,30 +12,30 @@ describe "schema_caching extension" do
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it "Database#dump_schema_cache should dump cached schema to the given file" do
|
|
15
|
-
File.exist?(@filename).
|
|
15
|
+
File.exist?(@filename).must_equal false
|
|
16
16
|
@db.dump_schema_cache(@filename)
|
|
17
|
-
File.exist?(@filename).
|
|
18
|
-
File.size(@filename).
|
|
17
|
+
File.exist?(@filename).must_equal true
|
|
18
|
+
File.size(@filename).must_be :>, 0
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it "Database#load_schema_cache should load cached schema from the given file dumped by #dump_schema_cache" do
|
|
22
22
|
@db.dump_schema_cache(@filename)
|
|
23
23
|
db = Sequel::Database.new.extension(:schema_caching)
|
|
24
24
|
db.load_schema_cache(@filename)
|
|
25
|
-
@db.instance_variable_get(:@schemas).
|
|
25
|
+
@db.instance_variable_get(:@schemas).must_equal @schemas
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "Database#dump_schema_cache? should dump cached schema to the given file unless the file exists" do
|
|
29
29
|
File.open(@filename, 'wb'){|f|}
|
|
30
|
-
File.size(@filename).
|
|
30
|
+
File.size(@filename).must_equal 0
|
|
31
31
|
@db.dump_schema_cache?(@filename)
|
|
32
|
-
File.size(@filename).
|
|
32
|
+
File.size(@filename).must_equal 0
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it "Database#load_schema_cache? should load cached schema from the given file if it exists" do
|
|
36
36
|
db = Sequel::Database.new.extension(:schema_caching)
|
|
37
|
-
File.exist?(@filename).
|
|
37
|
+
File.exist?(@filename).must_equal false
|
|
38
38
|
db.load_schema_cache?(@filename)
|
|
39
|
-
db.instance_variable_get(:@schemas).
|
|
39
|
+
db.instance_variable_get(:@schemas).must_equal({})
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -31,9 +31,9 @@ describe "Sequel::Schema::Generator dump methods" do
|
|
|
31
31
|
instance_eval(g.dump_constraints, __FILE__, __LINE__)
|
|
32
32
|
instance_eval(g.dump_indexes, __FILE__, __LINE__)
|
|
33
33
|
end
|
|
34
|
-
g.columns.
|
|
35
|
-
g.constraints.
|
|
36
|
-
g.indexes.
|
|
34
|
+
g.columns.must_equal g2.columns
|
|
35
|
+
g.constraints.must_equal g2.constraints
|
|
36
|
+
g.indexes.must_equal g2.indexes
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
it "should allow dumping indexes as separate add_index and drop_index methods" do
|
|
@@ -43,13 +43,13 @@ describe "Sequel::Schema::Generator dump methods" do
|
|
|
43
43
|
index [:b, :c], :unique=>true
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
g.dump_indexes(:add_index=>:t).
|
|
46
|
+
g.dump_indexes(:add_index=>:t).must_equal((<<END_CODE).strip)
|
|
47
47
|
add_index :t, [:a]
|
|
48
48
|
add_index :t, [:c, :e], :name=>:blah
|
|
49
49
|
add_index :t, [:b, :c], :unique=>true
|
|
50
50
|
END_CODE
|
|
51
51
|
|
|
52
|
-
g.dump_indexes(:drop_index=>:t).
|
|
52
|
+
g.dump_indexes(:drop_index=>:t).must_equal((<<END_CODE).strip)
|
|
53
53
|
drop_index :t, [:b, :c], :unique=>true
|
|
54
54
|
drop_index :t, [:c, :e], :name=>:blah
|
|
55
55
|
drop_index :t, [:a]
|
|
@@ -57,7 +57,7 @@ END_CODE
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
it "should raise an error if you try to dump a Generator that uses a constraint with a proc" do
|
|
60
|
-
proc{@g.new(@d){check{a>1}}.dump_constraints}.
|
|
60
|
+
proc{@g.new(@d){check{a>1}}.dump_constraints}.must_raise(Sequel::Error)
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
@@ -80,27 +80,27 @@ describe "Sequel::Database dump methods" do
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
it "should support dumping table schemas as create_table method calls" do
|
|
83
|
-
@d.dump_table_schema(:t1).
|
|
83
|
+
@d.dump_table_schema(:t1).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
it "should support dumping table schemas when given a string" do
|
|
87
|
-
@d.dump_table_schema('t__t1').
|
|
87
|
+
@d.dump_table_schema('t__t1').must_equal "create_table(\"t__t1\") do\n primary_key :c1\n String :c2, :size=>20\nend"
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
it "should support dumping table schemas when given an identifier" do
|
|
91
|
-
@d.dump_table_schema(Sequel.identifier(:t__t1)).
|
|
91
|
+
@d.dump_table_schema(Sequel.identifier(:t__t1)).must_equal "create_table(\"t__t1\") do\n primary_key :c1\n String :c2, :size=>20\nend"
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
it "should dump non-Integer primary key columns with explicit :type" do
|
|
95
95
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'bigint', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]]}
|
|
96
|
-
@d.dump_table_schema(:t6).
|
|
96
|
+
@d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n primary_key :c1, :type=>Bignum\nend"
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
it "should handle foreign keys" do
|
|
100
100
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :allow_null=>true}]]}
|
|
101
101
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
102
102
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}]}
|
|
103
|
-
@d.dump_table_schema(:t6).
|
|
103
|
+
@d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n foreign_key :c1, :t2, :key=>[:c2]\nend"
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
it "should handle primary keys that are also foreign keys" do
|
|
@@ -108,9 +108,9 @@ describe "Sequel::Database dump methods" do
|
|
|
108
108
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
109
109
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}]}
|
|
110
110
|
s = @d.dump_table_schema(:t6)
|
|
111
|
-
s.
|
|
112
|
-
s.
|
|
113
|
-
s.
|
|
111
|
+
s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
|
|
112
|
+
s.must_match(/:table=>:t2/)
|
|
113
|
+
s.must_match(/:key=>\[:c2\]/)
|
|
114
114
|
end
|
|
115
115
|
|
|
116
116
|
it "should handle foreign key options" do
|
|
@@ -118,11 +118,11 @@ describe "Sequel::Database dump methods" do
|
|
|
118
118
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
119
119
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}]}
|
|
120
120
|
s = @d.dump_table_schema(:t6)
|
|
121
|
-
s.
|
|
122
|
-
s.
|
|
123
|
-
s.
|
|
124
|
-
s.
|
|
125
|
-
s.
|
|
121
|
+
s.must_match(/create_table\(:t6\) do\n foreign_key :c1, :t2, /)
|
|
122
|
+
s.must_match(/:key=>\[:c2\]/)
|
|
123
|
+
s.must_match(/:on_delete=>:restrict/)
|
|
124
|
+
s.must_match(/:on_update=>:set_null/)
|
|
125
|
+
s.must_match(/:deferrable=>true/)
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
it "should handle foreign key options in the primary key" do
|
|
@@ -130,12 +130,12 @@ describe "Sequel::Database dump methods" do
|
|
|
130
130
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
131
131
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}]}
|
|
132
132
|
s = @d.dump_table_schema(:t6)
|
|
133
|
-
s.
|
|
134
|
-
s.
|
|
135
|
-
s.
|
|
136
|
-
s.
|
|
137
|
-
s.
|
|
138
|
-
s.
|
|
133
|
+
s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
|
|
134
|
+
s.must_match(/:table=>:t2/)
|
|
135
|
+
s.must_match(/:key=>\[:c2\]/)
|
|
136
|
+
s.must_match(/:on_delete=>:restrict/)
|
|
137
|
+
s.must_match(/:on_update=>:set_null/)
|
|
138
|
+
s.must_match(/:deferrable=>true/)
|
|
139
139
|
end
|
|
140
140
|
|
|
141
141
|
it "should omit foreign key options that are the same as defaults" do
|
|
@@ -143,11 +143,11 @@ describe "Sequel::Database dump methods" do
|
|
|
143
143
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
144
144
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}]}
|
|
145
145
|
s = @d.dump_table_schema(:t6)
|
|
146
|
-
s.
|
|
147
|
-
s.
|
|
148
|
-
s.
|
|
149
|
-
s.
|
|
150
|
-
s.
|
|
146
|
+
s.must_match(/create_table\(:t6\) do\n foreign_key :c1, :t2, /)
|
|
147
|
+
s.must_match(/:key=>\[:c2\]/)
|
|
148
|
+
s.wont_match(/:on_delete/)
|
|
149
|
+
s.wont_match(/:on_update/)
|
|
150
|
+
s.wont_match(/:deferrable/)
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
it "should omit foreign key options that are the same as defaults in the primary key" do
|
|
@@ -155,28 +155,28 @@ describe "Sequel::Database dump methods" do
|
|
|
155
155
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
156
156
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}]}
|
|
157
157
|
s = @d.dump_table_schema(:t6)
|
|
158
|
-
s.
|
|
159
|
-
s.
|
|
160
|
-
s.
|
|
161
|
-
s.
|
|
162
|
-
s.
|
|
163
|
-
s.
|
|
158
|
+
s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
|
|
159
|
+
s.must_match(/:table=>:t2/)
|
|
160
|
+
s.must_match(/:key=>\[:c2\]/)
|
|
161
|
+
s.wont_match(/:on_delete/)
|
|
162
|
+
s.wont_match(/:on_update/)
|
|
163
|
+
s.wont_match(/:deferrable/)
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
it "should dump primary key columns with explicit type equal to the database type when :same_db option is passed" do
|
|
167
167
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'somedbspecifictype', :primary_key=>true, :allow_null=>false}]]}
|
|
168
|
-
@d.dump_table_schema(:t7, :same_db => true).
|
|
168
|
+
@d.dump_table_schema(:t7, :same_db => true).must_equal "create_table(:t7) do\n column :c1, \"somedbspecifictype\", :null=>false\n \n primary_key [:c1]\nend"
|
|
169
169
|
end
|
|
170
170
|
|
|
171
171
|
it "should use a composite primary_key calls if there is a composite primary key" do
|
|
172
|
-
@d.dump_table_schema(:t2).
|
|
172
|
+
@d.dump_table_schema(:t2).must_equal "create_table(:t2) do\n Integer :c1, :null=>false\n BigDecimal :c2, :null=>false\n \n primary_key [:c1, :c2]\nend"
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
it "should use a composite foreign_key calls if there is a composite foreign key" do
|
|
176
176
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer'}], [:c2, {:db_type=>'integer'}]]}
|
|
177
177
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
178
178
|
@d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1, :c2], :table=>:t2, :key=>[:c3, :c4]}]}
|
|
179
|
-
@d.dump_table_schema(:t1).
|
|
179
|
+
@d.dump_table_schema(:t1).must_equal "create_table(:t1) do\n Integer :c1\n Integer :c2\n \n foreign_key [:c1, :c2], :t2, :key=>[:c3, :c4]\nend"
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
it "should include index information if available" do
|
|
@@ -185,11 +185,11 @@ describe "Sequel::Database dump methods" do
|
|
|
185
185
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
186
186
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
|
|
187
187
|
end
|
|
188
|
-
@d.dump_table_schema(:t1).
|
|
188
|
+
@d.dump_table_schema(:t1).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:i1\n index [:c2, :c1], :unique=>true\nend"
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
it "should support dumping the whole database as a migration" do
|
|
192
|
-
@d.dump_schema_migration.
|
|
192
|
+
@d.dump_schema_migration.must_equal <<-END_MIG
|
|
193
193
|
Sequel.migration do
|
|
194
194
|
change do
|
|
195
195
|
create_table(:t1) do
|
|
@@ -210,7 +210,7 @@ END_MIG
|
|
|
210
210
|
|
|
211
211
|
it "should sort table names when dumping a migration" do
|
|
212
212
|
@d.meta_def(:tables){|o| [:t2, :t1]}
|
|
213
|
-
@d.dump_schema_migration.
|
|
213
|
+
@d.dump_schema_migration.must_equal <<-END_MIG
|
|
214
214
|
Sequel.migration do
|
|
215
215
|
change do
|
|
216
216
|
create_table(:t1) do
|
|
@@ -238,7 +238,7 @@ END_MIG
|
|
|
238
238
|
@d.meta_def(:foreign_key_list) do |t|
|
|
239
239
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
|
|
240
240
|
end
|
|
241
|
-
@d.dump_schema_migration.
|
|
241
|
+
@d.dump_schema_migration.must_equal <<-END_MIG
|
|
242
242
|
Sequel.migration do
|
|
243
243
|
change do
|
|
244
244
|
create_table(:t2) do
|
|
@@ -262,7 +262,7 @@ END_MIG
|
|
|
262
262
|
@d.meta_def(:foreign_key_list) do |t|
|
|
263
263
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : [{:columns=>[:c1], :table=>:t1, :key=>[:c2]}]
|
|
264
264
|
end
|
|
265
|
-
@d.dump_schema_migration.
|
|
265
|
+
@d.dump_schema_migration.must_equal <<-END_MIG
|
|
266
266
|
Sequel.migration do
|
|
267
267
|
change do
|
|
268
268
|
create_table(:t1) do
|
|
@@ -291,7 +291,7 @@ END_MIG
|
|
|
291
291
|
raise Sequel::DatabaseError unless [:t1, :t2].include?(t)
|
|
292
292
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
|
|
293
293
|
end
|
|
294
|
-
@d.dump_schema_migration.
|
|
294
|
+
@d.dump_schema_migration.must_equal <<-END_MIG
|
|
295
295
|
Sequel.migration do
|
|
296
296
|
change do
|
|
297
297
|
create_table(:t2) do
|
|
@@ -307,8 +307,8 @@ END_MIG
|
|
|
307
307
|
end
|
|
308
308
|
|
|
309
309
|
it "should honor the :same_db option to not convert types" do
|
|
310
|
-
@d.dump_table_schema(:t1, :same_db=>true).
|
|
311
|
-
@d.dump_schema_migration(:same_db=>true).
|
|
310
|
+
@d.dump_table_schema(:t1, :same_db=>true).must_equal "create_table(:t1) do\n primary_key :c1\n column :c2, \"varchar(20)\"\nend"
|
|
311
|
+
@d.dump_schema_migration(:same_db=>true).must_equal <<-END_MIG
|
|
312
312
|
Sequel.migration do
|
|
313
313
|
change do
|
|
314
314
|
create_table(:t1) do
|
|
@@ -333,8 +333,8 @@ END_MIG
|
|
|
333
333
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
334
334
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
|
|
335
335
|
end
|
|
336
|
-
@d.dump_table_schema(:t1, :index_names=>false).
|
|
337
|
-
@d.dump_schema_migration(:index_names=>false).
|
|
336
|
+
@d.dump_table_schema(:t1, :index_names=>false).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1]\n index [:c2, :c1], :unique=>true\nend"
|
|
337
|
+
@d.dump_schema_migration(:index_names=>false).must_equal <<-END_MIG
|
|
338
338
|
Sequel.migration do
|
|
339
339
|
change do
|
|
340
340
|
create_table(:t1, :ignore_index_errors=>true) do
|
|
@@ -365,8 +365,8 @@ END_MIG
|
|
|
365
365
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
366
366
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
|
|
367
367
|
end
|
|
368
|
-
@d.dump_table_schema(:t1, :index_names=>:namespace).
|
|
369
|
-
@d.dump_schema_migration(:index_names=>:namespace).
|
|
368
|
+
@d.dump_table_schema(:t1, :index_names=>:namespace).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:i1\n index [:c2, :c1]\nend"
|
|
369
|
+
@d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
|
|
370
370
|
Sequel.migration do
|
|
371
371
|
change do
|
|
372
372
|
create_table(:t1, :ignore_index_errors=>true) do
|
|
@@ -398,8 +398,8 @@ END_MIG
|
|
|
398
398
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
399
399
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
|
|
400
400
|
end
|
|
401
|
-
@d.dump_table_schema(:t1, :index_names=>:namespace).
|
|
402
|
-
@d.dump_schema_migration(:index_names=>:namespace).
|
|
401
|
+
@d.dump_table_schema(:t1, :index_names=>:namespace).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:t1_i1\n index [:c2, :c1]\nend"
|
|
402
|
+
@d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
|
|
403
403
|
Sequel.migration do
|
|
404
404
|
change do
|
|
405
405
|
create_table(:t1, :ignore_index_errors=>true) do
|
|
@@ -430,8 +430,8 @@ END_MIG
|
|
|
430
430
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
431
431
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
|
|
432
432
|
end
|
|
433
|
-
@d.dump_table_schema(:t1, :indexes=>false).
|
|
434
|
-
@d.dump_schema_migration(:indexes=>false).
|
|
433
|
+
@d.dump_table_schema(:t1, :indexes=>false).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
|
|
434
|
+
@d.dump_schema_migration(:indexes=>false).must_equal <<-END_MIG
|
|
435
435
|
Sequel.migration do
|
|
436
436
|
change do
|
|
437
437
|
create_table(:t1) do
|
|
@@ -454,7 +454,7 @@ END_MIG
|
|
|
454
454
|
@d.meta_def(:foreign_key_list) do |t|
|
|
455
455
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
|
|
456
456
|
end
|
|
457
|
-
@d.dump_schema_migration(:indexes=>false).
|
|
457
|
+
@d.dump_schema_migration(:indexes=>false).wont_match(/foreign_key/)
|
|
458
458
|
end
|
|
459
459
|
|
|
460
460
|
it "should have :foreign_keys option override :indexes => false disabling of foreign keys" do
|
|
@@ -462,7 +462,7 @@ END_MIG
|
|
|
462
462
|
@d.meta_def(:foreign_key_list) do |t|
|
|
463
463
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
|
|
464
464
|
end
|
|
465
|
-
@d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).
|
|
465
|
+
@d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).must_match(/foreign_key/)
|
|
466
466
|
end
|
|
467
467
|
|
|
468
468
|
it "should support dumping just indexes as a migration" do
|
|
@@ -472,7 +472,7 @@ END_MIG
|
|
|
472
472
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
473
473
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
|
|
474
474
|
end
|
|
475
|
-
@d.dump_indexes_migration.
|
|
475
|
+
@d.dump_indexes_migration.must_equal <<-END_MIG
|
|
476
476
|
Sequel.migration do
|
|
477
477
|
change do
|
|
478
478
|
add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
|
|
@@ -489,7 +489,7 @@ END_MIG
|
|
|
489
489
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
490
490
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
|
|
491
491
|
end
|
|
492
|
-
@d.dump_indexes_migration(:index_names=>false).
|
|
492
|
+
@d.dump_indexes_migration(:index_names=>false).must_equal <<-END_MIG
|
|
493
493
|
Sequel.migration do
|
|
494
494
|
change do
|
|
495
495
|
add_index :t1, [:c1], :ignore_errors=>true
|
|
@@ -506,7 +506,7 @@ END_MIG
|
|
|
506
506
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
507
507
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
|
|
508
508
|
end
|
|
509
|
-
@d.dump_indexes_migration(:index_names=>:namespace).
|
|
509
|
+
@d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
|
|
510
510
|
Sequel.migration do
|
|
511
511
|
change do
|
|
512
512
|
add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
|
|
@@ -527,7 +527,7 @@ END_MIG
|
|
|
527
527
|
{:i1=>{:columns=>[:c1], :unique=>false},
|
|
528
528
|
:t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
|
|
529
529
|
end
|
|
530
|
-
@d.dump_indexes_migration(:index_names=>:namespace).
|
|
530
|
+
@d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
|
|
531
531
|
Sequel.migration do
|
|
532
532
|
change do
|
|
533
533
|
add_index :t1, [:c1], :ignore_errors=>true, :name=>:t1_i1
|
|
@@ -542,7 +542,7 @@ END_MIG
|
|
|
542
542
|
|
|
543
543
|
it "should handle missing index parsing support when dumping index migration" do
|
|
544
544
|
@d.meta_def(:tables){|o| [:t1]}
|
|
545
|
-
@d.dump_indexes_migration.
|
|
545
|
+
@d.dump_indexes_migration.must_equal <<-END_MIG
|
|
546
546
|
Sequel.migration do
|
|
547
547
|
change do
|
|
548
548
|
|
|
@@ -553,7 +553,7 @@ END_MIG
|
|
|
553
553
|
|
|
554
554
|
it "should handle missing foreign key parsing support when dumping foreign key migration" do
|
|
555
555
|
@d.meta_def(:tables){|o| [:t1]}
|
|
556
|
-
@d.dump_foreign_key_migration.
|
|
556
|
+
@d.dump_foreign_key_migration.must_equal <<-END_MIG
|
|
557
557
|
Sequel.migration do
|
|
558
558
|
change do
|
|
559
559
|
|
|
@@ -578,7 +578,7 @@ END_MIG
|
|
|
578
578
|
[]
|
|
579
579
|
end
|
|
580
580
|
end
|
|
581
|
-
@d.dump_foreign_key_migration.
|
|
581
|
+
@d.dump_foreign_key_migration.must_equal <<-END_MIG
|
|
582
582
|
Sequel.migration do
|
|
583
583
|
change do
|
|
584
584
|
alter_table(:t1) do
|
|
@@ -595,7 +595,7 @@ END_MIG
|
|
|
595
595
|
|
|
596
596
|
it "should handle not null values and defaults" do
|
|
597
597
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'date', :default=>"'now()'", :allow_null=>true}], [:c2, {:db_type=>'datetime', :allow_null=>false}]]}
|
|
598
|
-
@d.dump_table_schema(:t3).
|
|
598
|
+
@d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n Date :c1\n DateTime :c2, :null=>false\nend"
|
|
599
599
|
end
|
|
600
600
|
|
|
601
601
|
it "should handle converting common defaults" do
|
|
@@ -615,8 +615,8 @@ END_MIG
|
|
|
615
615
|
s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
|
|
616
616
|
s
|
|
617
617
|
end
|
|
618
|
-
@d.dump_table_schema(:t4).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').
|
|
619
|
-
@d.dump_table_schema(:t4, :same_db=>true).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').
|
|
618
|
+
@d.dump_table_schema(:t4).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n TrueClass :c1, :default=>false\n String :c2, :default=>\"blah\"\n Integer :c3, :default=>-1\n Float :c4, :default=>1.0\n BigDecimal :c5, :default=>BigDecimal.new(\"0.1005E3\")\n File :c6, :default=>Sequel::SQL::Blob.new(\"blah\")\n Date :c7, :default=>Date.new(2008, 10, 29)\n DateTime :c8, :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n Time :c9, :default=>Sequel::SQLTime.parse(\"10:20:30.0\"), :only_time=>true\n String :c10\n Date :c11, :default=>Sequel::CURRENT_DATE\n DateTime :c12, :default=>Sequel::CURRENT_TIMESTAMP\nend"
|
|
619
|
+
@d.dump_table_schema(:t4, :same_db=>true).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n column :c1, \"boolean\", :default=>false\n column :c2, \"varchar\", :default=>\"blah\"\n column :c3, \"integer\", :default=>-1\n column :c4, \"float\", :default=>1.0\n column :c5, \"decimal\", :default=>BigDecimal.new(\"0.1005E3\")\n column :c6, \"blob\", :default=>Sequel::SQL::Blob.new(\"blah\")\n column :c7, \"date\", :default=>Date.new(2008, 10, 29)\n column :c8, \"datetime\", :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n column :c9, \"time\", :default=>Sequel::SQLTime.parse(\"10:20:30.0\")\n column :c10, \"foo\", :default=>Sequel::LiteralString.new(\"'6 weeks'\")\n column :c11, \"date\", :default=>Sequel::CURRENT_DATE\n column :c12, \"timestamp\", :default=>Sequel::CURRENT_TIMESTAMP\nend"
|
|
620
620
|
end
|
|
621
621
|
|
|
622
622
|
it "should not use a literal string as a fallback if using MySQL with the :same_db option" do
|
|
@@ -628,11 +628,11 @@ END_MIG
|
|
|
628
628
|
s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
|
|
629
629
|
s
|
|
630
630
|
end
|
|
631
|
-
@d.dump_table_schema(:t5, :same_db=>true).
|
|
631
|
+
@d.dump_table_schema(:t5, :same_db=>true).must_equal "create_table(:t5) do\n column :c10, \"foo\"\nend"
|
|
632
632
|
end
|
|
633
633
|
|
|
634
634
|
it "should convert unknown database types to strings" do
|
|
635
|
-
@d.dump_table_schema(:t5).
|
|
635
|
+
@d.dump_table_schema(:t5).must_equal "create_table(:t5) do\n String :c1\nend"
|
|
636
636
|
end
|
|
637
637
|
|
|
638
638
|
it "should convert many database types to ruby types" do
|
|
@@ -652,7 +652,7 @@ END_MIG
|
|
|
652
652
|
i = 0
|
|
653
653
|
types.map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
|
|
654
654
|
end
|
|
655
|
-
@d.dump_table_schema(:x).
|
|
655
|
+
@d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
|
|
656
656
|
create_table(:x) do
|
|
657
657
|
Integer :c1
|
|
658
658
|
Integer :c2
|
|
@@ -744,7 +744,7 @@ END_MIG
|
|
|
744
744
|
i = 0
|
|
745
745
|
types.map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
|
|
746
746
|
end
|
|
747
|
-
@d.dump_table_schema(:x).
|
|
747
|
+
@d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
|
|
748
748
|
create_table(:x) do
|
|
749
749
|
Float :c1
|
|
750
750
|
Float :c2
|
|
@@ -757,16 +757,16 @@ END_MIG
|
|
|
757
757
|
it "should force specify :null option for MySQL timestamp columns when using :same_db" do
|
|
758
758
|
@d.meta_def(:database_type){:mysql}
|
|
759
759
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>true}]]}
|
|
760
|
-
@d.dump_table_schema(:t3, :same_db=>true).
|
|
760
|
+
@d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"timestamp\", :null=>true\n \n primary_key [:c1]\nend"
|
|
761
761
|
|
|
762
762
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>false}]]}
|
|
763
|
-
@d.dump_table_schema(:t3, :same_db=>true).
|
|
763
|
+
@d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"timestamp\", :null=>false\n \n primary_key [:c1]\nend"
|
|
764
764
|
end
|
|
765
765
|
|
|
766
766
|
it "should use separate primary_key call with non autoincrementable types" do
|
|
767
767
|
@d.meta_def(:schema){|*s| [[:c1, {:db_type=>'varchar(8)', :primary_key=>true, :auto_increment=>false}]]}
|
|
768
|
-
@d.dump_table_schema(:t3).
|
|
769
|
-
@d.dump_table_schema(:t3, :same_db=>true).
|
|
768
|
+
@d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n String :c1, :size=>8\n \n primary_key [:c1]\nend"
|
|
769
|
+
@d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"varchar(8)\"\n \n primary_key [:c1]\nend"
|
|
770
770
|
end
|
|
771
771
|
|
|
772
772
|
it "should use explicit type for non integer foreign_key types" do
|
|
@@ -774,9 +774,9 @@ END_MIG
|
|
|
774
774
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
775
775
|
@d.meta_def(:foreign_key_list){|t, *a| [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4}
|
|
776
776
|
["create_table(:t4) do\n foreign_key :c1, :t3, :type=>Date, :key=>[:c1]\n \n primary_key [:c1]\nend",
|
|
777
|
-
"create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>Date\n \n primary_key [:c1]\nend"].
|
|
777
|
+
"create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>Date\n \n primary_key [:c1]\nend"].must_include(@d.dump_table_schema(:t4))
|
|
778
778
|
["create_table(:t4) do\n foreign_key :c1, :t3, :type=>\"date\", :key=>[:c1]\n \n primary_key [:c1]\nend",
|
|
779
|
-
"create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>\"date\"\n \n primary_key [:c1]\nend"].
|
|
779
|
+
"create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>\"date\"\n \n primary_key [:c1]\nend"].must_include(@d.dump_table_schema(:t4, :same_db=>true))
|
|
780
780
|
end
|
|
781
781
|
|
|
782
782
|
it "should correctly handing autoincrementing primary keys that are also foreign keys" do
|
|
@@ -784,6 +784,6 @@ END_MIG
|
|
|
784
784
|
@d.meta_def(:supports_foreign_key_parsing?){true}
|
|
785
785
|
@d.meta_def(:foreign_key_list){|t, *a| [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4}
|
|
786
786
|
["create_table(:t4) do\n primary_key :c1, :table=>:t3, :key=>[:c1]\nend",
|
|
787
|
-
"create_table(:t4) do\n primary_key :c1, :key=>[:c1], :table=>:t3\nend"].
|
|
787
|
+
"create_table(:t4) do\n primary_key :c1, :key=>[:c1], :table=>:t3\nend"].must_include(@d.dump_table_schema(:t4))
|
|
788
788
|
end
|
|
789
789
|
end
|