sequel 4.34.0 → 4.35.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +30 -0
  3. data/Rakefile +14 -17
  4. data/doc/object_model.rdoc +4 -4
  5. data/doc/release_notes/4.35.0.txt +130 -0
  6. data/doc/schema_modification.rdoc +8 -3
  7. data/doc/security.rdoc +3 -3
  8. data/lib/sequel/adapters/ado.rb +2 -2
  9. data/lib/sequel/adapters/ado/access.rb +6 -6
  10. data/lib/sequel/adapters/ado/mssql.rb +2 -2
  11. data/lib/sequel/adapters/amalgalite.rb +6 -6
  12. data/lib/sequel/adapters/cubrid.rb +4 -4
  13. data/lib/sequel/adapters/do.rb +2 -2
  14. data/lib/sequel/adapters/do/mysql.rb +1 -1
  15. data/lib/sequel/adapters/do/postgres.rb +1 -1
  16. data/lib/sequel/adapters/do/sqlite3.rb +1 -1
  17. data/lib/sequel/adapters/ibmdb.rb +6 -6
  18. data/lib/sequel/adapters/jdbc.rb +15 -15
  19. data/lib/sequel/adapters/jdbc/db2.rb +1 -1
  20. data/lib/sequel/adapters/jdbc/derby.rb +3 -3
  21. data/lib/sequel/adapters/jdbc/h2.rb +3 -3
  22. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -2
  23. data/lib/sequel/adapters/jdbc/mssql.rb +1 -1
  24. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  25. data/lib/sequel/adapters/jdbc/oracle.rb +1 -1
  26. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -2
  27. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +1 -1
  28. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -1
  29. data/lib/sequel/adapters/jdbc/transactions.rb +10 -10
  30. data/lib/sequel/adapters/mock.rb +1 -1
  31. data/lib/sequel/adapters/mysql.rb +2 -2
  32. data/lib/sequel/adapters/mysql2.rb +2 -2
  33. data/lib/sequel/adapters/odbc.rb +2 -2
  34. data/lib/sequel/adapters/odbc/mssql.rb +2 -2
  35. data/lib/sequel/adapters/oracle.rb +9 -9
  36. data/lib/sequel/adapters/postgres.rb +3 -3
  37. data/lib/sequel/adapters/shared/mssql.rb +36 -8
  38. data/lib/sequel/adapters/shared/oracle.rb +15 -0
  39. data/lib/sequel/adapters/shared/postgres.rb +22 -1
  40. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  41. data/lib/sequel/adapters/sqlite.rb +7 -7
  42. data/lib/sequel/adapters/swift.rb +3 -3
  43. data/lib/sequel/adapters/swift/mysql.rb +1 -1
  44. data/lib/sequel/adapters/swift/postgres.rb +1 -1
  45. data/lib/sequel/adapters/swift/sqlite.rb +1 -1
  46. data/lib/sequel/adapters/tinytds.rb +5 -7
  47. data/lib/sequel/database/logging.rb +18 -3
  48. data/lib/sequel/database/misc.rb +19 -8
  49. data/lib/sequel/database/schema_generator.rb +7 -2
  50. data/lib/sequel/database/schema_methods.rb +9 -2
  51. data/lib/sequel/database/transactions.rb +52 -18
  52. data/lib/sequel/dataset/actions.rb +24 -19
  53. data/lib/sequel/dataset/features.rb +5 -0
  54. data/lib/sequel/dataset/query.rb +6 -0
  55. data/lib/sequel/extensions/_pretty_table.rb +1 -1
  56. data/lib/sequel/extensions/error_sql.rb +3 -3
  57. data/lib/sequel/extensions/pg_range.rb +10 -1
  58. data/lib/sequel/extensions/schema_dumper.rb +8 -5
  59. data/lib/sequel/extensions/server_logging.rb +61 -0
  60. data/lib/sequel/extensions/sql_comments.rb +91 -0
  61. data/lib/sequel/model/associations.rb +40 -8
  62. data/lib/sequel/model/base.rb +19 -5
  63. data/lib/sequel/plugins/class_table_inheritance.rb +12 -0
  64. data/lib/sequel/plugins/delay_add_association.rb +1 -0
  65. data/lib/sequel/plugins/json_serializer.rb +10 -2
  66. data/lib/sequel/version.rb +1 -1
  67. data/spec/adapter_spec.rb +4 -0
  68. data/spec/adapters/mysql_spec.rb +1 -1
  69. data/spec/adapters/postgres_spec.rb +3 -2
  70. data/spec/core/connection_pool_spec.rb +2 -0
  71. data/spec/core/database_spec.rb +49 -0
  72. data/spec/core/dataset_spec.rb +25 -1
  73. data/spec/core/mock_adapter_spec.rb +3 -1
  74. data/spec/core/schema_generator_spec.rb +1 -1
  75. data/spec/core_model_spec.rb +2 -0
  76. data/spec/core_spec.rb +1 -0
  77. data/spec/extensions/delay_add_association_spec.rb +22 -0
  78. data/spec/extensions/json_serializer_spec.rb +6 -0
  79. data/spec/extensions/pg_range_spec.rb +30 -2
  80. data/spec/extensions/schema_dumper_spec.rb +3 -2
  81. data/spec/extensions/server_logging_spec.rb +45 -0
  82. data/spec/extensions/sql_comments_spec.rb +27 -0
  83. data/spec/files/reversible_migrations/006_reversible.rb +10 -0
  84. data/spec/files/reversible_migrations/007_reversible.rb +10 -0
  85. data/spec/integration/dataset_test.rb +28 -2
  86. data/spec/integration/migrator_test.rb +23 -1
  87. data/spec/integration/schema_test.rb +12 -32
  88. data/spec/integration/transaction_test.rb +10 -0
  89. data/spec/integration/type_test.rb +1 -1
  90. data/spec/model/eager_loading_spec.rb +16 -0
  91. data/spec/model/record_spec.rb +9 -0
  92. data/spec/model_no_assoc_spec.rb +1 -0
  93. data/spec/model_spec.rb +1 -0
  94. data/spec/plugin_spec.rb +1 -0
  95. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bbb9208954c7c7fb4d531621af12ac2ce850339
4
- data.tar.gz: fb5c58d9906bba99dd60543dae4089f71b3b3037
3
+ metadata.gz: 29e8963c69c4f6e3b0af0840e6cc881934ca608f
4
+ data.tar.gz: 30d2fa8ead89124fa8a4e8a4582a11a78bf7a5c8
5
5
  SHA512:
6
- metadata.gz: e00cd2f1752cdd25fd45c30479d4f104c10a7e4b6411eba817601b48b367c1a8cda00f84da65486b948497cf27f7429245654e0f77886ff1088a0d1588b39ca7
7
- data.tar.gz: 63fce28567f5a354105a9cf816a6be443b73755beed960567011e3b16169cd22a8ae65fc692b00bd4f337fef57cb1db8105ada35aa150634b738675b83dfdeb8
6
+ metadata.gz: 2961452f5e6b3f1ab7e32da5e4a4dd92e9362a13bb561999ebd493ab8877132d803b7c3e22206ded6a9c2e8336a9bde344c3e2707cbe81732a115d45383d4186
7
+ data.tar.gz: 72c885ba7219f83ac043bf213045f7b67ebbf213c4aa8380224c9c9d76fd1cd446f043e77ba0765e34684cf0fd35300b6b966a688f6e631e83b4b556ecb25b76
data/CHANGELOG CHANGED
@@ -1,3 +1,33 @@
1
+ === 4.35.0 (2016-06-01)
2
+
3
+ * Add :headline option to PostgreSQL Dataset#full_text_search for adding an extract of the matched text to the SELECT list (jeremyevans)
4
+
5
+ * Make :rollback=>:always inside a transaction use a savepoint automatically if supported (jeremyevans) (#1193)
6
+
7
+ * Recognize bool type as boolean in the schema dumper (jeremyevans) (#1192)
8
+
9
+ * Make Dataset#to_hash and #to_hash_groups work correctly for model datasets doing eager loading (jeremyevans)
10
+
11
+ * Make delay_add_association plugin handle hashes and primary keys passed to add_* association methods (jeremyevans) (#1187)
12
+
13
+ * Treat :Bignum as a generic type, to support 64-bit integers on ruby 2.4+, where Bignum == Integer (jeremyevans)
14
+
15
+ * Add server_logging extension for including server/shard information when logging queries (jeremyevans)
16
+
17
+ * Add Database#log_connection_info, for including connection information when logging queries (jeremyevans)
18
+
19
+ * Add Dataset#skip_locked for skipping locked rows on PostgreSQL 9.5+, MSSQL, and Oracle (jeremyevans)
20
+
21
+ * Allow Sequel::Model#lock! to accept an optional lock style (petedmarsh) (#1183)
22
+
23
+ * Add sql_comments extension for setting SQL comments on queries (jeremyevans)
24
+
25
+ * Make Postgres::PGRange#cover? handle empty, unbounded, and exclusive beginning ranges (jeremyevans)
26
+
27
+ * Fix frozen string literal issues on JRuby 9.1.0.0 (jeremyevans)
28
+
29
+ * Allow json_serializer :include option with cascaded values to work correctly when used with association_proxies (jeremyevans)
30
+
1
31
  === 4.34.0 (2016-05-01)
2
32
 
3
33
  * Add support for :dataset_associations_join association option to dataset_associations plugin, for making resulting datasets have appropriate joins (jeremyevans)
data/Rakefile CHANGED
@@ -82,21 +82,18 @@ end
82
82
 
83
83
  ### Specs
84
84
 
85
- run_spec = proc do |patterns|
85
+ run_spec = proc do |file|
86
86
  lib_dir = File.join(File.dirname(File.expand_path(__FILE__)), 'lib')
87
87
  rubylib = ENV['RUBYLIB']
88
88
  ENV['RUBYLIB'] ? (ENV['RUBYLIB'] += ":#{lib_dir}") : (ENV['RUBYLIB'] = lib_dir)
89
- if RUBY_PLATFORM =~ /mingw32/ || RUBY_DESCRIPTION =~ /windows/i
90
- patterns = patterns.split.map{|pat| Dir[pat].to_a}.flatten.join(' ')
91
- end
92
- sh "#{FileUtils::RUBY} -e \"ARGV.each{|f| require f}\" #{patterns}"
89
+ sh "#{FileUtils::RUBY} #{file}"
93
90
  ENV['RUBYLIB'] = rubylib
94
91
  end
95
92
 
96
- spec_task = proc do |description, name, files, coverage|
93
+ spec_task = proc do |description, name, file, coverage|
97
94
  desc description
98
95
  task name do
99
- run_spec.call(files)
96
+ run_spec.call(file)
100
97
  end
101
98
 
102
99
  desc "#{description} with warnings, some warnings filtered"
@@ -110,7 +107,7 @@ spec_task = proc do |description, name, files, coverage|
110
107
  desc "#{description} with coverage"
111
108
  task :"#{name}_cov" do
112
109
  ENV['COVERAGE'] = '1'
113
- run_spec.call(files)
110
+ run_spec.call(file)
114
111
  ENV.delete('COVERAGE')
115
112
  end
116
113
  end
@@ -121,19 +118,19 @@ task :default => :spec
121
118
  desc "Run the core, model, and extension/plugin specs"
122
119
  task :spec => [:spec_core, :spec_model, :spec_plugin]
123
120
 
124
- spec_task.call("Run core and model specs together", :spec_core_model, './spec/core/*_spec.rb ./spec/model/*_spec.rb', true)
125
- spec_task.call("Run core specs", :spec_core, './spec/core/*_spec.rb', false)
126
- spec_task.call("Run model specs", :spec_model, './spec/model/*_spec.rb', false)
127
- spec_task.call("Run plugin/extension specs", :spec_plugin, './spec/extensions/*_spec.rb', true)
128
- spec_task.call("Run bin/sequel specs", :spec_bin, './spec/bin_spec.rb', false)
129
- spec_task.call("Run core extensions specs", :spec_core_ext, './spec/core_extensions_spec.rb', true)
130
- spec_task.call("Run integration tests", :spec_integration, './spec/integration/*_test.rb', true)
121
+ spec_task.call("Run core and model specs together", :spec_core_model, 'spec/core_model_spec.rb', true)
122
+ spec_task.call("Run core specs", :spec_core, 'spec/core_spec.rb', false)
123
+ spec_task.call("Run model specs", :spec_model, 'spec/model_spec.rb', false)
124
+ spec_task.call("Run plugin/extension specs", :spec_plugin, 'spec/plugin_spec.rb', true)
125
+ spec_task.call("Run bin/sequel specs", :spec_bin, 'spec/bin_spec.rb', false)
126
+ spec_task.call("Run core extensions specs", :spec_core_ext, 'spec/core_extensions_spec.rb', true)
127
+ spec_task.call("Run integration tests", :spec_integration, 'spec/adapter_spec.rb none', true)
131
128
 
132
129
  %w'postgres sqlite mysql informix oracle firebird mssql db2 sqlanywhere'.each do |adapter|
133
- spec_task.call("Run #{adapter} tests", :"spec_#{adapter}", "./spec/adapters/#{adapter}_spec.rb ./spec/integration/*_test.rb", true)
130
+ spec_task.call("Run #{adapter} tests", :"spec_#{adapter}", "spec/adapter_spec.rb #{adapter}", true)
134
131
  end
135
132
 
136
- spec_task.call("Run model specs without the associations code", :_spec_model_no_assoc, Dir["./spec/model/*_spec.rb"].delete_if{|f| f =~ /association|eager_loading/}.join(' '), false)
133
+ spec_task.call("Run model specs without the associations code", :_spec_model_no_assoc, 'spec/model_no_assoc_spec.rb', false)
137
134
  desc "Run model specs without the associations code"
138
135
  task :spec_model_no_assoc do
139
136
  ENV['SEQUEL_NO_ASSOCIATIONS'] = '1'
@@ -263,7 +263,7 @@ The following shortcuts exist for creating Sequel::SQL::ValueList objects:
263
263
  === Sequel::SQL::Identifier
264
264
 
265
265
  Sequel::SQL::Identifier objects represent single identifiers. The main reason for
266
- their existance is that they are not checked for double or triple underscores, so no
266
+ their existence is that they are not checked for double or triple underscores, so no
267
267
  automatic qualification or aliasing happens for them:
268
268
 
269
269
  Sequel::SQL::Identifier.new(:col__umn) # "col__umn"
@@ -389,7 +389,7 @@ The following shortcut exists for creating Sequel::SQL::ColumnAll objects:
389
389
 
390
390
  === Sequel::SQL::Constant
391
391
 
392
- Sequel::SQL::Constant objects represent constants or psuedo-constants in SQL,
392
+ Sequel::SQL::Constant objects represent constants or pseudo-constants in SQL,
393
393
  such as TRUE, NULL, and CURRENT_TIMESTAMP. These are not designed to be created
394
394
  or used by the end user, but some existing values are predefined under the
395
395
  Sequel namespace:
@@ -544,9 +544,9 @@ They use a hash-based API, supporting the :frame, :order, :partition, and :windo
544
544
  options:
545
545
 
546
546
  Sequel::SQL::Window.new(:order=>:a) # (ORDER BY "a")
547
- Sequel::SQL::Window.new(:parition=>:a) # (PARTITION BY "a")
547
+ Sequel::SQL::Window.new(:partition=>:a) # (PARTITION BY "a")
548
548
 
549
- Sequel::SQL::Window.new(:parition=>:a, :frame=>:all)
549
+ Sequel::SQL::Window.new(:partition=>:a, :frame=>:all)
550
550
  # (PARTITION BY "a" ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
551
551
 
552
552
  === Sequel::SQL::Wrapper
@@ -0,0 +1,130 @@
1
+ = Forwards Compatibility
2
+
3
+ * Ruby 2.4 will unify the Fixnum and Bignum classes into the Integer
4
+ class, making both Fixnum and Bignum references to Integer. This
5
+ will have the affect of changing the behavior of Sequel migrations
6
+ that use a reference to the Bignum class.
7
+
8
+ For example, code like this will change behavior in ruby 2.4:
9
+
10
+ DB.create_table(:table) do
11
+ add_column :column, Bignum
12
+ end
13
+ # or:
14
+ DB.get(Sequel.cast('1', Bignum))
15
+
16
+ as this references the Bignum class. On ruby <2.4, this will create
17
+ a 64-bit integer column, on ruby 2.4+, it will create a 32-bit
18
+ integer column.
19
+
20
+ Code like this will be fine and does not need changing:
21
+
22
+ DB.create_table(:table) do
23
+ Bignum :column
24
+ end
25
+
26
+ as this calls the Bignum method.
27
+
28
+ Sequel now supports the :Bignum symbol as a generic type, so you
29
+ can now switch references to the Bignum class to the :Bignum
30
+ symbol whenever you want a generic 64-bit integer type:
31
+
32
+ DB.create_table(:table) do
33
+ add_column :column, :Bignum
34
+ end
35
+ # or:
36
+ DB.get(Sequel.cast('1', :Bignum))
37
+
38
+ Note that you should only do this if you are using Sequel 4.35.0+,
39
+ as previous versions of Sequel will treat the :Bignum symbol as
40
+ a database-specific type named Bignum.
41
+
42
+ = New Features
43
+
44
+ * A Sequel::Database#log_connection_info accessor has been added. If
45
+ set to true, this includes connection information in Sequel's query
46
+ log. In threaded connection pools (the default), this makes it
47
+ simple to see which connection is executing which queries.
48
+
49
+ DB.log_connection_info = true
50
+ DB.get(1)
51
+ # Logged: (0.000004s) (conn: 9713390226040) SELECT 1 AS v LIMIT
52
+
53
+ * Sequel::Model#lock! now supports an optional lock style, instead
54
+ of always using FOR UPDATE (which is still the default):
55
+
56
+ Example.first.lock!('FOR NO KEY UPDATE')
57
+ #=> SELECT * FROM examples WHERE id = 1 FOR NO KEY UPDATE LIMIT 1
58
+
59
+ * Sequel::Database#skip_locked has been added, which skips locked rows
60
+ when returning query results. This is useful whenever you are
61
+ implementing a queue or similar data structure. Currently, this is
62
+ supported on PostgreSQL 9.5+, Oracle, and Microsoft SQL Server.
63
+
64
+ * An sql_comments extension has been added for setting SQL comments
65
+ on queries:
66
+
67
+ ds = DB[:table].comment("Some Comment").all
68
+ # SELECT * FROM table -- Some Comment
69
+ #
70
+
71
+ All consecutive whitespace in the comment is replaced by a
72
+ single space, and the comment ends in a newline so that it works
73
+ correctly in subqueries.
74
+
75
+ This extension is mostly useful if you are doing analysis of your
76
+ database server query log and want to include higher level
77
+ information about the query in the comment.
78
+
79
+ * A server_logging extension has been added, which includes
80
+ server/shard information in the query log, if connection info
81
+ is being logged.
82
+
83
+ DB.extension :server_logging
84
+ DB.log_connection_info = true
85
+ DB.get(1)
86
+ # Logged: (0.000004s) (conn: 9712828677240, server: read_only)
87
+ # SELECT 1 AS v LIMIT 1
88
+ DB[:a].insert(:b=>1)
89
+ # Logged: (0.000003s) (conn: 9712534040260, server: default)
90
+ # INSERT INTO a (b) VALUES (1)
91
+
92
+ * On PostgreSQL, Database#full_text_search now supports a
93
+ :headline option for adding an extract of the matched text to
94
+ the SELECT list.
95
+
96
+ * Sequel::Postgres::PGRange#cover? has been added to the pg_range
97
+ extension, which works with empty, unbounded, and exclusive
98
+ beginning ranges. Previously, using #cover? with these ranges
99
+ would raise an exception. Note that cover? is now always
100
+ defined, where previously it was only defined on ruby 1.9+.
101
+
102
+ = Other Improvements
103
+
104
+ * The jdbc adapters now work correctly on JRuby 9.1. Previously,
105
+ some parts were broken on JRuby 9.1 due to frozen string literal
106
+ issues.
107
+
108
+ * Sequel::Dataset#to_hash and #to_hash_groups now work correctly for
109
+ model datasets doing eager loading.
110
+
111
+ * Using Sequel::Database#transaction with the :rollback=>:always
112
+ option now automatically uses a savepoint if supported when run
113
+ inside another transaction. If savepoints are not supported,
114
+ using :rollback=>:always inside a transaction will now raise an
115
+ exception.
116
+
117
+ * The delay_add_association plugin now handles hashes and primary keys
118
+ passed to the add_* association methods.
119
+
120
+ * The json_serializer :include option now works correctly when using
121
+ *_to_many associations with the association_proxies plugin.
122
+
123
+ * The schema_dumper extension now recognizes bool as a boolean type,
124
+ for consistency with the Database schema parser.
125
+
126
+ = Backwards Compatibility
127
+
128
+ * Custom adapters should switch from using log_yield to
129
+ log_connection_yield so that they work correctly when using
130
+ log_connection_info.
@@ -74,6 +74,11 @@ as the second argument, either as ruby classes, symbols, or strings:
74
74
  column :a6, 'timestamp(6)' # timestamp(6)
75
75
  end
76
76
 
77
+ If you use a ruby class as the type, Sequel will try to guess the appropriate type name for the
78
+ database you are using. If a symbol or string as used as the type, it is used verbatim as the type
79
+ name in SQL, with the exception of :Bignum. Using the symbol :Bignum as a type will use the
80
+ appropriate 64-bit integer type for the database you are using.
81
+
77
82
  === Column options
78
83
 
79
84
  When using the type name as method, the third argument is an options hash, and when using the +column+
@@ -107,7 +112,7 @@ You've seen this one used already. It's used to create an autoincrementing inte
107
112
 
108
113
  If you want an autoincrementing 64-bit integer:
109
114
 
110
- create_table(:a0){primary_key :id, :type=>Bignum}
115
+ create_table(:a0){primary_key :id, :type=>:Bignum}
111
116
 
112
117
  If you want to create a primary key column that doesn't use an autoincrementing integer, you should
113
118
  not use this method. Instead, you should use the :primary_key option to the +column+ method or type
@@ -520,11 +525,11 @@ This modifies a column's type. Most databases will attempt to convert existing
520
525
  the columns to the new type:
521
526
 
522
527
  alter_table(:albums) do
523
- set_column_type :copies_sold, Bignum
528
+ set_column_type :copies_sold, :Bignum
524
529
  end
525
530
 
526
531
  You can specify the type as a string or symbol, in which case it is used verbatim, or as a supported
527
- ruby class, in which case it gets converted to an appropriate database type.
532
+ ruby class or the :Bignum symbol, in which case it gets converted to an appropriate database type.
528
533
 
529
534
  === +set_column_allow_null+
530
535
 
data/doc/security.rdoc CHANGED
@@ -191,10 +191,10 @@ Instead, you should do:
191
191
  The no_auto_string_literals extension can also be used to remove the default support
192
192
  for plain strings as literal strings in update methods.
193
193
 
194
- ==== SQL Fragment passed to Dataset#lock_style
194
+ ==== SQL Fragment passed to Dataset#lock_style and Model#lock!
195
195
 
196
- The Sequel::Dataset#lock_style method also treats an input string
197
- as SQL code. This method should not be called with user input.
196
+ The Sequel::Dataset#lock_style and Sequel::Model#lock! methods also treat
197
+ an input string as SQL code. This method should not be called with user input.
198
198
 
199
199
  ==== SQL Type Names
200
200
 
@@ -64,7 +64,7 @@ module Sequel
64
64
  return super if opts[:provider]
65
65
  synchronize(opts[:server]) do |conn|
66
66
  begin
67
- log_yield(sql){conn.Execute(sql, 1)}
67
+ log_connection_yield(sql, conn){conn.Execute(sql, 1)}
68
68
  WIN32OLE::ARGV[1]
69
69
  rescue ::WIN32OLERuntimeError => e
70
70
  raise_error(e)
@@ -75,7 +75,7 @@ module Sequel
75
75
  def execute(sql, opts=OPTS)
76
76
  synchronize(opts[:server]) do |conn|
77
77
  begin
78
- r = log_yield(sql){conn.Execute(sql)}
78
+ r = log_connection_yield(sql, conn){conn.Execute(sql)}
79
79
  yield(r) if block_given?
80
80
  rescue ::WIN32OLERuntimeError => e
81
81
  raise_error(e)
@@ -111,8 +111,8 @@ module Sequel
111
111
  def execute_insert(sql, opts=OPTS)
112
112
  synchronize(opts[:server]) do |conn|
113
113
  begin
114
- log_yield(sql){conn.Execute(sql)}
115
- res = log_yield(LAST_INSERT_ID){conn.Execute(LAST_INSERT_ID)}
114
+ log_connection_yield(sql, conn){conn.Execute(sql)}
115
+ res = log_connection_yield(LAST_INSERT_ID, conn){conn.Execute(LAST_INSERT_ID)}
116
116
  res.getRows.transpose.each{|r| return r.shift}
117
117
  rescue ::WIN32OLERuntimeError => e
118
118
  raise_error(e)
@@ -203,15 +203,15 @@ module Sequel
203
203
  end
204
204
 
205
205
  def begin_transaction(conn, opts=OPTS)
206
- log_yield('Transaction.begin'){conn.BeginTrans}
206
+ log_connection_yield('Transaction.begin', conn){conn.BeginTrans}
207
207
  end
208
208
 
209
209
  def commit_transaction(conn, opts=OPTS)
210
- log_yield('Transaction.commit'){conn.CommitTrans}
210
+ log_connection_yield('Transaction.commit', conn){conn.CommitTrans}
211
211
  end
212
212
 
213
213
  def rollback_transaction(conn, opts=OPTS)
214
- log_yield('Transaction.rollback'){conn.RollbackTrans}
214
+ log_connection_yield('Transaction.rollback', conn){conn.RollbackTrans}
215
215
  end
216
216
 
217
217
  def schema_column_type(db_type)
@@ -313,7 +313,7 @@ module Sequel
313
313
  ado_schema = AdoSchema.new(type, criteria)
314
314
  synchronize(opts[:server]) do |conn|
315
315
  begin
316
- r = log_yield("OpenSchema #{type.inspect}, #{criteria.inspect}") {
316
+ r = log_connection_yield("OpenSchema #{type.inspect}, #{criteria.inspect}", conn) {
317
317
  if ado_schema.criteria.empty?
318
318
  conn.OpenSchema(ado_schema.type)
319
319
  else
@@ -21,8 +21,8 @@ module Sequel
21
21
  return super unless @opts[:provider]
22
22
  synchronize(opts[:server]) do |conn|
23
23
  begin
24
- log_yield(sql){conn.Execute(sql)}
25
- res = log_yield(ROWS_AFFECTED){conn.Execute(ROWS_AFFECTED)}
24
+ log_connection_yield(sql, conn){conn.Execute(sql)}
25
+ res = log_connection_yield(ROWS_AFFECTED, conn){conn.Execute(ROWS_AFFECTED)}
26
26
  res.getRows.transpose.each{|r| return r.shift}
27
27
  rescue ::WIN32OLERuntimeError => e
28
28
  raise_error(e)
@@ -81,7 +81,7 @@ module Sequel
81
81
  db = ::Amalgalite::Database.new(opts[:database])
82
82
  db.busy_handler(::Amalgalite::BusyTimeout.new(opts.fetch(:timeout, 5000)/50, 50))
83
83
  db.type_map = SequelTypeMap.new(self)
84
- connection_pragmas.each{|s| log_yield(s){db.execute_batch(s)}}
84
+ connection_pragmas.each{|s| log_connection_yield(s, db){db.execute_batch(s)}}
85
85
  db
86
86
  end
87
87
 
@@ -92,25 +92,25 @@ module Sequel
92
92
 
93
93
  # Run the given SQL with the given arguments. Returns nil.
94
94
  def execute_ddl(sql, opts=OPTS)
95
- _execute(sql, opts){|conn| log_yield(sql){conn.execute_batch(sql)}}
95
+ _execute(sql, opts){|conn| log_connection_yield(sql, conn){conn.execute_batch(sql)}}
96
96
  nil
97
97
  end
98
98
 
99
99
  # Run the given SQL with the given arguments and return the number of changed rows.
100
100
  def execute_dui(sql, opts=OPTS)
101
- _execute(sql, opts){|conn| log_yield(sql){conn.execute_batch(sql)}; conn.row_changes}
101
+ _execute(sql, opts){|conn| log_connection_yield(sql, conn){conn.execute_batch(sql)}; conn.row_changes}
102
102
  end
103
103
 
104
104
  # Run the given SQL with the given arguments and return the last inserted row id.
105
105
  def execute_insert(sql, opts=OPTS)
106
- _execute(sql, opts){|conn| log_yield(sql){conn.execute_batch(sql)}; conn.last_insert_rowid}
106
+ _execute(sql, opts){|conn| log_connection_yield(sql, conn){conn.execute_batch(sql)}; conn.last_insert_rowid}
107
107
  end
108
108
 
109
109
  # Run the given SQL with the given arguments and yield each row.
110
110
  def execute(sql, opts=OPTS)
111
111
  _execute(sql, opts) do |conn|
112
112
  begin
113
- yield(stmt = log_yield(sql){conn.prepare(sql)})
113
+ yield(stmt = log_connection_yield(sql, conn){conn.prepare(sql)})
114
114
  ensure
115
115
  stmt.close if stmt
116
116
  end
@@ -119,7 +119,7 @@ module Sequel
119
119
 
120
120
  # Run the given SQL with the given arguments and return the first value of the first row.
121
121
  def single_value(sql, opts=OPTS)
122
- _execute(sql, opts){|conn| log_yield(sql){conn.first_value_from(sql)}}
122
+ _execute(sql, opts){|conn| log_connection_yield(sql, conn){conn.first_value_from(sql)}}
123
123
  end
124
124
 
125
125
  private
@@ -38,7 +38,7 @@ module Sequel
38
38
 
39
39
  def execute(sql, opts=OPTS)
40
40
  synchronize(opts[:server]) do |conn|
41
- r = log_yield(sql) do
41
+ r = log_connection_yield(sql, conn) do
42
42
  begin
43
43
  conn.query(sql)
44
44
  rescue => e
@@ -92,11 +92,11 @@ module Sequel
92
92
  private
93
93
 
94
94
  def begin_transaction(conn, opts=OPTS)
95
- log_yield(TRANSACTION_BEGIN){conn.auto_commit = false}
95
+ log_connection_yield(TRANSACTION_BEGIN, conn){conn.auto_commit = false}
96
96
  end
97
97
 
98
98
  def commit_transaction(conn, opts=OPTS)
99
- log_yield(TRANSACTION_COMMIT){conn.commit}
99
+ log_connection_yield(TRANSACTION_COMMIT, conn){conn.commit}
100
100
  end
101
101
 
102
102
  def database_error_classes
@@ -112,7 +112,7 @@ module Sequel
112
112
  # This doesn't actually work, as the cubrid ruby driver
113
113
  # does not implement transactions correctly.
114
114
  def rollback_transaction(conn, opts=OPTS)
115
- log_yield(TRANSACTION_ROLLBACK){conn.rollback}
115
+ log_connection_yield(TRANSACTION_ROLLBACK, conn){conn.rollback}
116
116
  end
117
117
  end
118
118