sequel 4.12.0 → 4.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +64 -0
  3. data/Rakefile +3 -1
  4. data/bin/sequel +13 -5
  5. data/doc/release_notes/4.13.0.txt +169 -0
  6. data/doc/sql.rdoc +3 -3
  7. data/lib/sequel/adapters/do.rb +11 -23
  8. data/lib/sequel/adapters/do/mysql.rb +8 -0
  9. data/lib/sequel/adapters/do/postgres.rb +8 -0
  10. data/lib/sequel/adapters/do/{sqlite.rb → sqlite3.rb} +9 -0
  11. data/lib/sequel/adapters/jdbc.rb +16 -139
  12. data/lib/sequel/adapters/jdbc/as400.rb +9 -0
  13. data/lib/sequel/adapters/jdbc/cubrid.rb +9 -0
  14. data/lib/sequel/adapters/jdbc/db2.rb +9 -0
  15. data/lib/sequel/adapters/jdbc/derby.rb +9 -0
  16. data/lib/sequel/adapters/jdbc/{firebird.rb → firebirdsql.rb} +9 -0
  17. data/lib/sequel/adapters/jdbc/h2.rb +10 -0
  18. data/lib/sequel/adapters/jdbc/hsqldb.rb +9 -0
  19. data/lib/sequel/adapters/jdbc/{informix.rb → informix-sqli.rb} +9 -0
  20. data/lib/sequel/adapters/jdbc/{progress.rb → jdbcprogress.rb} +9 -0
  21. data/lib/sequel/adapters/jdbc/jtds.rb +10 -0
  22. data/lib/sequel/adapters/jdbc/mysql.rb +14 -0
  23. data/lib/sequel/adapters/jdbc/oracle.rb +9 -0
  24. data/lib/sequel/adapters/jdbc/postgresql.rb +9 -0
  25. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +23 -0
  26. data/lib/sequel/adapters/jdbc/sqlite.rb +10 -0
  27. data/lib/sequel/adapters/jdbc/sqlserver.rb +10 -0
  28. data/lib/sequel/adapters/odbc.rb +6 -14
  29. data/lib/sequel/adapters/odbc/db2.rb +9 -0
  30. data/lib/sequel/adapters/odbc/mssql.rb +8 -0
  31. data/lib/sequel/adapters/odbc/progress.rb +8 -0
  32. data/lib/sequel/adapters/oracle.rb +1 -1
  33. data/lib/sequel/adapters/postgres.rb +1 -1
  34. data/lib/sequel/adapters/shared/firebird.rb +8 -1
  35. data/lib/sequel/adapters/shared/mssql.rb +68 -27
  36. data/lib/sequel/adapters/shared/mysql.rb +3 -5
  37. data/lib/sequel/adapters/shared/oracle.rb +17 -3
  38. data/lib/sequel/adapters/shared/postgres.rb +9 -4
  39. data/lib/sequel/adapters/shared/sqlanywhere.rb +6 -6
  40. data/lib/sequel/database/connecting.rb +38 -17
  41. data/lib/sequel/dataset/actions.rb +6 -2
  42. data/lib/sequel/dataset/graph.rb +18 -20
  43. data/lib/sequel/dataset/misc.rb +37 -0
  44. data/lib/sequel/dataset/prepared_statements.rb +1 -2
  45. data/lib/sequel/dataset/query.rb +1 -0
  46. data/lib/sequel/dataset/sql.rb +17 -10
  47. data/lib/sequel/extensions/dataset_source_alias.rb +90 -0
  48. data/lib/sequel/extensions/pg_array.rb +14 -10
  49. data/lib/sequel/extensions/pg_enum.rb +135 -0
  50. data/lib/sequel/extensions/pg_hstore.rb +4 -6
  51. data/lib/sequel/extensions/pg_inet.rb +4 -5
  52. data/lib/sequel/extensions/pg_interval.rb +3 -3
  53. data/lib/sequel/extensions/pg_json.rb +16 -12
  54. data/lib/sequel/extensions/pg_range.rb +5 -3
  55. data/lib/sequel/extensions/pg_row.rb +2 -2
  56. data/lib/sequel/extensions/round_timestamps.rb +52 -0
  57. data/lib/sequel/model.rb +5 -2
  58. data/lib/sequel/model/associations.rb +29 -3
  59. data/lib/sequel/model/base.rb +68 -29
  60. data/lib/sequel/plugins/class_table_inheritance.rb +25 -16
  61. data/lib/sequel/plugins/column_select.rb +57 -0
  62. data/lib/sequel/plugins/composition.rb +14 -16
  63. data/lib/sequel/plugins/dirty.rb +9 -11
  64. data/lib/sequel/plugins/insert_returning_select.rb +70 -0
  65. data/lib/sequel/plugins/instance_filters.rb +7 -9
  66. data/lib/sequel/plugins/lazy_attributes.rb +16 -4
  67. data/lib/sequel/plugins/list.rb +9 -0
  68. data/lib/sequel/plugins/modification_detection.rb +90 -0
  69. data/lib/sequel/plugins/serialization.rb +13 -15
  70. data/lib/sequel/plugins/serialization_modification_detection.rb +9 -9
  71. data/lib/sequel/plugins/single_table_inheritance.rb +3 -1
  72. data/lib/sequel/plugins/timestamps.rb +6 -6
  73. data/lib/sequel/version.rb +1 -1
  74. data/spec/adapters/mysql_spec.rb +7 -0
  75. data/spec/adapters/postgres_spec.rb +41 -0
  76. data/spec/bin_spec.rb +4 -1
  77. data/spec/core/database_spec.rb +6 -0
  78. data/spec/core/dataset_spec.rb +100 -90
  79. data/spec/core/object_graph_spec.rb +5 -0
  80. data/spec/extensions/class_table_inheritance_spec.rb +18 -13
  81. data/spec/extensions/column_select_spec.rb +108 -0
  82. data/spec/extensions/composition_spec.rb +20 -0
  83. data/spec/extensions/dataset_source_alias_spec.rb +51 -0
  84. data/spec/extensions/insert_returning_select_spec.rb +46 -0
  85. data/spec/extensions/lazy_attributes_spec.rb +24 -20
  86. data/spec/extensions/list_spec.rb +5 -0
  87. data/spec/extensions/modification_detection_spec.rb +80 -0
  88. data/spec/extensions/pg_enum_spec.rb +64 -0
  89. data/spec/extensions/pg_json_spec.rb +7 -13
  90. data/spec/extensions/prepared_statements_spec.rb +6 -4
  91. data/spec/extensions/round_timestamps_spec.rb +43 -0
  92. data/spec/extensions/serialization_modification_detection_spec.rb +10 -1
  93. data/spec/extensions/serialization_spec.rb +18 -0
  94. data/spec/extensions/single_table_inheritance_spec.rb +5 -0
  95. data/spec/extensions/timestamps_spec.rb +6 -0
  96. data/spec/integration/plugin_test.rb +14 -8
  97. data/spec/integration/prepared_statement_test.rb +12 -0
  98. data/spec/model/associations_spec.rb +24 -0
  99. data/spec/model/model_spec.rb +13 -3
  100. data/spec/model/record_spec.rb +24 -1
  101. metadata +22 -6
@@ -824,10 +824,10 @@ describe Sequel::Model, ".[]" do
824
824
  DB.sqls.should == ["SELECT * FROM items WHERE name = 'sharon'"]
825
825
  end
826
826
 
827
- it "should return the first record for the given pk for a filtered dataset" do
828
- @c.dataset = @c.dataset.filter(:active=>true)
827
+ it "should use a qualified primary key if the dataset is joined" do
828
+ @c.dataset = @c.dataset.cross_join(:a)
829
829
  @c[1].should == @c.load(:name => 'sharon', :id => 1)
830
- DB.sqls.should == ["SELECT * FROM items WHERE ((active IS TRUE) AND (id = 1)) LIMIT 1"]
830
+ DB.sqls.should == ["SELECT * FROM items CROSS JOIN a WHERE (items.id = 1) LIMIT 1"]
831
831
  end
832
832
 
833
833
  it "should work correctly for composite primary key specified as array" do
@@ -905,6 +905,16 @@ describe "Model.db_schema" do
905
905
  @c.primary_key.should == :x
906
906
  end
907
907
 
908
+ specify "should automatically set a singular primary key even if there are specific columns selected" do
909
+ ds = @dataset.select(:a, :b, :x)
910
+ d = ds.db
911
+ def d.schema(table, *opts) [[:a, {:primary_key=>false}], [:b, {:primary_key=>false}], [:x, {:primary_key=>true}]] end
912
+ @c.primary_key.should == :id
913
+ @c.dataset = ds
914
+ @c.db_schema.should == {:a=>{:primary_key=>false}, :b=>{:primary_key=>false}, :x=>{:primary_key=>true}}
915
+ @c.primary_key.should == :x
916
+ end
917
+
908
918
  specify "should automatically set the composite primary key based on the schema" do
909
919
  ds = @dataset
910
920
  d = ds.db
@@ -57,7 +57,7 @@ describe "Model#save" do
57
57
  ds._fetch = {:y=>2}
58
58
  def ds.supports_insert_select?() true end
59
59
  def ds.insert_select(hash)
60
- execute("INSERT INTO items (y) VALUES (2) RETURNING *"){|r| return r}
60
+ with_sql_first("INSERT INTO items (y) VALUES (2) RETURNING *")
61
61
  end
62
62
  o = @c.new(:x => 1)
63
63
  o.save
@@ -72,6 +72,23 @@ describe "Model#save" do
72
72
  @c.new(:x => 1).save
73
73
  end
74
74
 
75
+ it "should use dataset's insert_select method if the dataset uses returning, even if specific columns are selected" do
76
+ def (@c.dataset).supports_returning?(_) true end
77
+ ds = @c.dataset = @c.dataset.select(:y).returning(:y)
78
+ DB.reset
79
+ ds = @c.instance_dataset
80
+ ds._fetch = {:y=>2}
81
+ def ds.supports_insert_select?() true end
82
+ def ds.insert_select(hash)
83
+ with_sql_first("INSERT INTO items (y) VALUES (2) RETURNING y")
84
+ end
85
+ o = @c.new(:x => 1)
86
+ o.save
87
+
88
+ o.values.should == {:y=>2}
89
+ DB.sqls.should == ["INSERT INTO items (y) VALUES (2) RETURNING y"]
90
+ end
91
+
75
92
  it "should use value returned by insert as the primary key and refresh the object" do
76
93
  o = @c.new(:x => 11)
77
94
  o.save
@@ -783,6 +800,12 @@ describe Sequel::Model, "#this" do
783
800
  instance.this.sql.should == "SELECT * FROM examples WHERE (a = 3) LIMIT 1"
784
801
  end
785
802
 
803
+ it "should use a qualified primary key if the dataset is joined" do
804
+ @example.dataset = @example.dataset.cross_join(:a)
805
+ instance = @example.load(:id => 3)
806
+ instance.this.sql.should == "SELECT * FROM examples CROSS JOIN a WHERE (examples.id = 3) LIMIT 1"
807
+ end
808
+
786
809
  it "should support composite primary keys" do
787
810
  @example.set_primary_key [:x, :y]
788
811
  instance = @example.load(:x => 4, :y => 5)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.12.0
4
+ version: 4.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-08-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The Database Toolkit for Ruby
14
14
  email: code@jeremyevans.net
@@ -129,6 +129,7 @@ extra_rdoc_files:
129
129
  - doc/release_notes/4.10.0.txt
130
130
  - doc/release_notes/4.11.0.txt
131
131
  - doc/release_notes/4.12.0.txt
132
+ - doc/release_notes/4.13.0.txt
132
133
  files:
133
134
  - CHANGELOG
134
135
  - MIT-LICENSE
@@ -228,6 +229,7 @@ files:
228
229
  - doc/release_notes/4.10.0.txt
229
230
  - doc/release_notes/4.11.0.txt
230
231
  - doc/release_notes/4.12.0.txt
232
+ - doc/release_notes/4.13.0.txt
231
233
  - doc/release_notes/4.2.0.txt
232
234
  - doc/release_notes/4.3.0.txt
233
235
  - doc/release_notes/4.4.0.txt
@@ -256,7 +258,7 @@ files:
256
258
  - lib/sequel/adapters/do.rb
257
259
  - lib/sequel/adapters/do/mysql.rb
258
260
  - lib/sequel/adapters/do/postgres.rb
259
- - lib/sequel/adapters/do/sqlite.rb
261
+ - lib/sequel/adapters/do/sqlite3.rb
260
262
  - lib/sequel/adapters/firebird.rb
261
263
  - lib/sequel/adapters/ibmdb.rb
262
264
  - lib/sequel/adapters/informix.rb
@@ -265,16 +267,16 @@ files:
265
267
  - lib/sequel/adapters/jdbc/cubrid.rb
266
268
  - lib/sequel/adapters/jdbc/db2.rb
267
269
  - lib/sequel/adapters/jdbc/derby.rb
268
- - lib/sequel/adapters/jdbc/firebird.rb
270
+ - lib/sequel/adapters/jdbc/firebirdsql.rb
269
271
  - lib/sequel/adapters/jdbc/h2.rb
270
272
  - lib/sequel/adapters/jdbc/hsqldb.rb
271
- - lib/sequel/adapters/jdbc/informix.rb
273
+ - lib/sequel/adapters/jdbc/informix-sqli.rb
274
+ - lib/sequel/adapters/jdbc/jdbcprogress.rb
272
275
  - lib/sequel/adapters/jdbc/jtds.rb
273
276
  - lib/sequel/adapters/jdbc/mssql.rb
274
277
  - lib/sequel/adapters/jdbc/mysql.rb
275
278
  - lib/sequel/adapters/jdbc/oracle.rb
276
279
  - lib/sequel/adapters/jdbc/postgresql.rb
277
- - lib/sequel/adapters/jdbc/progress.rb
278
280
  - lib/sequel/adapters/jdbc/sqlanywhere.rb
279
281
  - lib/sequel/adapters/jdbc/sqlite.rb
280
282
  - lib/sequel/adapters/jdbc/sqlserver.rb
@@ -283,7 +285,9 @@ files:
283
285
  - lib/sequel/adapters/mysql.rb
284
286
  - lib/sequel/adapters/mysql2.rb
285
287
  - lib/sequel/adapters/odbc.rb
288
+ - lib/sequel/adapters/odbc/db2.rb
286
289
  - lib/sequel/adapters/odbc/mssql.rb
290
+ - lib/sequel/adapters/odbc/progress.rb
287
291
  - lib/sequel/adapters/openbase.rb
288
292
  - lib/sequel/adapters/oracle.rb
289
293
  - lib/sequel/adapters/postgres.rb
@@ -352,6 +356,7 @@ files:
352
356
  - lib/sequel/extensions/core_extensions.rb
353
357
  - lib/sequel/extensions/core_refinements.rb
354
358
  - lib/sequel/extensions/current_datetime_timestamp.rb
359
+ - lib/sequel/extensions/dataset_source_alias.rb
355
360
  - lib/sequel/extensions/date_arithmetic.rb
356
361
  - lib/sequel/extensions/empty_array_ignore_nulls.rb
357
362
  - lib/sequel/extensions/error_sql.rb
@@ -370,6 +375,7 @@ files:
370
375
  - lib/sequel/extensions/pagination.rb
371
376
  - lib/sequel/extensions/pg_array.rb
372
377
  - lib/sequel/extensions/pg_array_ops.rb
378
+ - lib/sequel/extensions/pg_enum.rb
373
379
  - lib/sequel/extensions/pg_hstore.rb
374
380
  - lib/sequel/extensions/pg_hstore_ops.rb
375
381
  - lib/sequel/extensions/pg_inet.rb
@@ -385,6 +391,7 @@ files:
385
391
  - lib/sequel/extensions/pretty_table.rb
386
392
  - lib/sequel/extensions/query.rb
387
393
  - lib/sequel/extensions/query_literals.rb
394
+ - lib/sequel/extensions/round_timestamps.rb
388
395
  - lib/sequel/extensions/ruby18_symbol_extensions.rb
389
396
  - lib/sequel/extensions/schema_caching.rb
390
397
  - lib/sequel/extensions/schema_dumper.rb
@@ -418,6 +425,7 @@ files:
418
425
  - lib/sequel/plugins/boolean_readers.rb
419
426
  - lib/sequel/plugins/caching.rb
420
427
  - lib/sequel/plugins/class_table_inheritance.rb
428
+ - lib/sequel/plugins/column_select.rb
421
429
  - lib/sequel/plugins/composition.rb
422
430
  - lib/sequel/plugins/constraint_validations.rb
423
431
  - lib/sequel/plugins/dataset_associations.rb
@@ -428,6 +436,7 @@ files:
428
436
  - lib/sequel/plugins/force_encoding.rb
429
437
  - lib/sequel/plugins/hook_class_methods.rb
430
438
  - lib/sequel/plugins/input_transformer.rb
439
+ - lib/sequel/plugins/insert_returning_select.rb
431
440
  - lib/sequel/plugins/instance_filters.rb
432
441
  - lib/sequel/plugins/instance_hooks.rb
433
442
  - lib/sequel/plugins/json_serializer.rb
@@ -435,6 +444,7 @@ files:
435
444
  - lib/sequel/plugins/list.rb
436
445
  - lib/sequel/plugins/many_through_many.rb
437
446
  - lib/sequel/plugins/many_to_one_pk_lookup.rb
447
+ - lib/sequel/plugins/modification_detection.rb
438
448
  - lib/sequel/plugins/mssql_optimistic_locking.rb
439
449
  - lib/sequel/plugins/nested_attributes.rb
440
450
  - lib/sequel/plugins/optimistic_locking.rb
@@ -507,6 +517,7 @@ files:
507
517
  - spec/extensions/boolean_readers_spec.rb
508
518
  - spec/extensions/caching_spec.rb
509
519
  - spec/extensions/class_table_inheritance_spec.rb
520
+ - spec/extensions/column_select_spec.rb
510
521
  - spec/extensions/columns_introspection_spec.rb
511
522
  - spec/extensions/composition_spec.rb
512
523
  - spec/extensions/connection_validator_spec.rb
@@ -515,6 +526,7 @@ files:
515
526
  - spec/extensions/core_refinements_spec.rb
516
527
  - spec/extensions/current_datetime_timestamp_spec.rb
517
528
  - spec/extensions/dataset_associations_spec.rb
529
+ - spec/extensions/dataset_source_alias_spec.rb
518
530
  - spec/extensions/date_arithmetic_spec.rb
519
531
  - spec/extensions/defaults_setter_spec.rb
520
532
  - spec/extensions/dirty_spec.rb
@@ -531,6 +543,7 @@ files:
531
543
  - spec/extensions/hook_class_methods_spec.rb
532
544
  - spec/extensions/inflector_spec.rb
533
545
  - spec/extensions/input_transformer_spec.rb
546
+ - spec/extensions/insert_returning_select_spec.rb
534
547
  - spec/extensions/instance_filters_spec.rb
535
548
  - spec/extensions/instance_hooks_spec.rb
536
549
  - spec/extensions/json_serializer_spec.rb
@@ -540,6 +553,7 @@ files:
540
553
  - spec/extensions/many_through_many_spec.rb
541
554
  - spec/extensions/meta_def_spec.rb
542
555
  - spec/extensions/migration_spec.rb
556
+ - spec/extensions/modification_detection_spec.rb
543
557
  - spec/extensions/mssql_optimistic_locking_spec.rb
544
558
  - spec/extensions/named_timezones_spec.rb
545
559
  - spec/extensions/nested_attributes_spec.rb
@@ -549,6 +563,7 @@ files:
549
563
  - spec/extensions/pg_array_associations_spec.rb
550
564
  - spec/extensions/pg_array_ops_spec.rb
551
565
  - spec/extensions/pg_array_spec.rb
566
+ - spec/extensions/pg_enum_spec.rb
552
567
  - spec/extensions/pg_hstore_ops_spec.rb
553
568
  - spec/extensions/pg_hstore_spec.rb
554
569
  - spec/extensions/pg_inet_spec.rb
@@ -571,6 +586,7 @@ files:
571
586
  - spec/extensions/query_literals_spec.rb
572
587
  - spec/extensions/query_spec.rb
573
588
  - spec/extensions/rcte_tree_spec.rb
589
+ - spec/extensions/round_timestamps_spec.rb
574
590
  - spec/extensions/schema_caching_spec.rb
575
591
  - spec/extensions/schema_dumper_spec.rb
576
592
  - spec/extensions/schema_spec.rb