activerecord-jdbc-adapter 1.3.25 → 5.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +57 -72
  3. data/Appraisals +7 -2
  4. data/Gemfile +3 -7
  5. data/History.md +0 -50
  6. data/RUNNING_TESTS.md +4 -0
  7. data/activerecord-jdbc-adapter.gemspec +2 -1
  8. data/lib/arjdbc/common_jdbc_methods.rb +89 -0
  9. data/lib/arjdbc/db2/adapter.rb +58 -69
  10. data/lib/arjdbc/db2/as400.rb +2 -13
  11. data/lib/arjdbc/db2/column.rb +1 -1
  12. data/lib/arjdbc/derby/adapter.rb +2 -6
  13. data/lib/arjdbc/firebird/adapter.rb +7 -16
  14. data/lib/arjdbc/h2/adapter.rb +4 -13
  15. data/lib/arjdbc/hsqldb/adapter.rb +5 -5
  16. data/lib/arjdbc/jdbc/adapter.rb +15 -76
  17. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  18. data/lib/arjdbc/jdbc/adapter_require.rb +12 -31
  19. data/lib/arjdbc/jdbc/base_ext.rb +6 -25
  20. data/lib/arjdbc/jdbc/column.rb +15 -1
  21. data/lib/arjdbc/jdbc/connection_methods.rb +7 -1
  22. data/lib/arjdbc/jdbc/type_cast.rb +16 -4
  23. data/lib/arjdbc/jdbc/type_converter.rb +0 -1
  24. data/lib/arjdbc/mssql/adapter.rb +9 -21
  25. data/lib/arjdbc/mysql/adapter.rb +14 -19
  26. data/lib/arjdbc/mysql/connection_methods.rb +3 -5
  27. data/lib/arjdbc/oracle/adapter.rb +4 -38
  28. data/lib/arjdbc/oracle/connection_methods.rb +0 -4
  29. data/lib/arjdbc/postgresql/adapter.rb +18 -22
  30. data/lib/arjdbc/postgresql/connection_methods.rb +2 -5
  31. data/lib/arjdbc/postgresql/oid/bytea.rb +0 -1
  32. data/lib/arjdbc/postgresql/oid_types.rb +6 -6
  33. data/lib/arjdbc/sqlite3/adapter.rb +493 -404
  34. data/lib/arjdbc/tasks/database_tasks.rb +1 -1
  35. data/lib/arjdbc/tasks/databases3.rake +1 -1
  36. data/lib/arjdbc/tasks/databases4.rake +3 -8
  37. data/lib/arjdbc/version.rb +1 -1
  38. data/rakelib/db.rake +5 -8
  39. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +102 -37
  40. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +0 -7
  41. metadata +10 -17
  42. data/lib/arjdbc/jdbc/arel_support.rb +0 -133
  43. data/lib/arjdbc/mssql/attributes_for_update.rb +0 -22
  44. data/lib/arjdbc/sqlite3/explain_support.rb +0 -29
@@ -13,9 +13,6 @@ module ArJdbc
13
13
  # @see ActiveRecord::ConnectionAdapters::JdbcAdapter#jdbc_connection_class
14
14
  def self.jdbc_connection_class; DB2.jdbc_connection_class; end
15
15
 
16
- # @see ActiveRecord::ConnectionAdapters::Jdbc::ArelSupport
17
- def self.arel_visitor_type(config = nil); DB2.arel_visitor_type(config); end
18
-
19
16
  def self.column_selector
20
17
  [ /as400/i, lambda { |config, column| column.extend(Column) } ]
21
18
  end
@@ -60,11 +57,8 @@ module ArJdbc
60
57
  @connection.execute_update "call qsys.qcmdexc('QSYS/CHGJOB INQMSGRPY(*SYSRPYL)',0000000031.00000)"
61
58
  @connection.execute_update "call qsys.qcmdexc('ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY(''I'')',0000000045.00000)"
62
59
  rescue Exception => e
63
- # Sometimes the exception can be a false-positive when we already ran the second command
64
- unless e.message.include? 'Sequence number 9876 already defined in system reply list.'
65
- raise "Could not call CHGJOB INQMSGRPY(*SYSRPYL) and ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY('I').\n" +
66
- "Do you have authority to do this?\n\n#{e.inspect}"
67
- end
60
+ raise "Could not call CHGJOB INQMSGRPY(*SYSRPYL) and ADDRPYLE SEQNBR(9876) MSGID(CPA32B2) RPY('I').\n" +
61
+ "Do you have authority to do this?\n\n#{e.inspect}"
68
62
  end
69
63
 
70
64
  begin
@@ -103,11 +97,6 @@ module ArJdbc
103
97
  true
104
98
  end
105
99
 
106
- # AS400 does not support TRUNCATE command. Deleting everything from the table is should be close enough
107
- def truncate(table_name, name = nil)
108
- @connection.execute_update "DELETE FROM #{table_name}"
109
- end
110
-
111
100
  private
112
101
 
113
102
  # @override
@@ -47,7 +47,7 @@ module ArJdbc
47
47
 
48
48
  # @override
49
49
  def type_cast(value)
50
- return nil if value.nil? || value.eql?('NULL') || value =~ /^\s*NULL\s*$/i
50
+ return nil if value.nil? || value == 'NULL' || value =~ /^\s*NULL\s*$/i
51
51
  case type
52
52
  when :string then value
53
53
  when :integer then value.respond_to?(:to_i) ? value.to_i : (value ? 1 : 0)
@@ -2,6 +2,7 @@ ArJdbc.load_java_part :Derby
2
2
 
3
3
  require 'arjdbc/util/table_copier'
4
4
  require 'arjdbc/derby/schema_creation' # AR 4.x
5
+ require 'arel/visitors/derby'
5
6
 
6
7
  module ArJdbc
7
8
  module Derby
@@ -93,11 +94,6 @@ module ArJdbc
93
94
 
94
95
  end
95
96
 
96
- # @see ActiveRecord::ConnectionAdapters::Jdbc::ArelSupport
97
- def self.arel_visitor_type(config = nil)
98
- require 'arel/visitors/derby'; ::Arel::Visitors::Derby
99
- end
100
-
101
97
  ADAPTER_NAME = 'Derby'.freeze
102
98
 
103
99
  def adapter_name
@@ -511,7 +507,7 @@ module ArJdbc
511
507
  # Returns the value of an identity column of the last *INSERT* statement
512
508
  # made over this connection.
513
509
  # @note Check the *IDENTITY_VAL_LOCAL* function for documentation.
514
- # @return [Integer]
510
+ # @return [Fixnum]
515
511
  def last_insert_id
516
512
  @connection.identity_val_local
517
513
  end
@@ -1,5 +1,7 @@
1
1
  ArJdbc.load_java_part :Firebird
2
2
 
3
+ require 'arel/visitors/firebird'
4
+
3
5
  module ArJdbc
4
6
  module Firebird
5
7
 
@@ -62,16 +64,6 @@ module ArJdbc
62
64
  # @see ActiveRecord::ConnectionAdapters::JdbcAdapter#jdbc_column_class
63
65
  def jdbc_column_class; ::ActiveRecord::ConnectionAdapters::FirebirdColumn end
64
66
 
65
- # @see ArJdbc::ArelHelper::ClassMethods#arel_visitor_type
66
- def self.arel_visitor_type(config = nil)
67
- require 'arel/visitors/firebird'; ::Arel::Visitors::Firebird
68
- end
69
-
70
- # @deprecated no longer used
71
- def self.arel2_visitors(config = nil)
72
- { 'firebird' => arel_visitor_type, 'firebirdsql' => arel_visitor_type }
73
- end
74
-
75
67
  # @private
76
68
  @@emulate_booleans = true
77
69
 
@@ -224,11 +216,6 @@ module ArJdbc
224
216
  true
225
217
  end
226
218
 
227
- # Does this adapter support using DISTINCT within COUNT?
228
- def supports_count_distinct?
229
- true
230
- end
231
-
232
219
  # Does this adapter support DDL rollbacks in transactions? That is, would
233
220
  # CREATE TABLE or ALTER TABLE get rolled back by a transaction? PostgreSQL,
234
221
  # SQL Server, and others support this. MySQL and others do not.
@@ -354,7 +341,7 @@ module ArJdbc
354
341
  when NilClass then 'NULL'
355
342
  when TrueClass then (type == :integer ? '1' : quoted_true)
356
343
  when FalseClass then (type == :integer ? '0' : quoted_false)
357
- when Float, Integer then value.to_s
344
+ when Float, Fixnum, Bignum then value.to_s
358
345
  # BigDecimals need to be output in a non-normalized form and quoted.
359
346
  when BigDecimal then value.to_s('F')
360
347
  when Symbol then "'#{quote_string(value.to_s)}'"
@@ -434,6 +421,10 @@ module ActiveRecord::ConnectionAdapters
434
421
  super
435
422
  end
436
423
 
424
+ def arel_visitor
425
+ Arel::Visitors::Firebird.new(self)
426
+ end
427
+
437
428
  end
438
429
 
439
430
  class FirebirdColumn < JdbcColumn
@@ -1,5 +1,6 @@
1
1
  ArJdbc.load_java_part :H2
2
2
  require 'arjdbc/hsqldb/adapter'
3
+ require 'arel/visitors/h2'
3
4
 
4
5
  module ArJdbc
5
6
  module H2
@@ -10,11 +11,6 @@ module ArJdbc
10
11
  ::ActiveRecord::ConnectionAdapters::H2JdbcConnection
11
12
  end
12
13
 
13
- # @see ActiveRecord::ConnectionAdapters::JdbcAdapter#jdbc_column_class
14
- def jdbc_column_class
15
- ::ActiveRecord::ConnectionAdapters::H2Column
16
- end
17
-
18
14
  # @see ActiveRecord::ConnectionAdapters::JdbcColumn#column_types
19
15
  def self.column_selector
20
16
  [ /\.h2\./i, lambda { |config, column| column.extend(Column) } ]
@@ -77,11 +73,6 @@ module ArJdbc
77
73
 
78
74
  end
79
75
 
80
- # @see ActiveRecord::ConnectionAdapters::Jdbc::ArelSupport
81
- def self.arel_visitor_type(config = nil)
82
- require 'arel/visitors/h2'; ::Arel::Visitors::H2
83
- end
84
-
85
76
  ADAPTER_NAME = 'H2'.freeze
86
77
 
87
78
  # @override
@@ -303,10 +294,10 @@ module ActiveRecord::ConnectionAdapters
303
294
 
304
295
  class H2Adapter < JdbcAdapter
305
296
  include ArJdbc::H2
306
- end
307
297
 
308
- class H2Column < JdbcColumn
309
- include ::ArJdbc::H2::Column
298
+ def arel_visitor
299
+ Arel::Visitors::H2.new(self)
300
+ end
310
301
  end
311
302
 
312
303
  end
@@ -1,6 +1,7 @@
1
1
  ArJdbc.load_java_part :HSQLDB
2
2
  require 'arjdbc/hsqldb/explain_support'
3
3
  require 'arjdbc/hsqldb/schema_creation' # AR 4.x
4
+ require 'arel/visitors/hsqldb'
4
5
 
5
6
  module ArJdbc
6
7
  module HSQLDB
@@ -64,11 +65,6 @@ module ArJdbc
64
65
 
65
66
  end
66
67
 
67
- # @see ActiveRecord::ConnectionAdapters::Jdbc::ArelSupport
68
- def self.arel_visitor_type(config = nil)
69
- require 'arel/visitors/hsqldb'; ::Arel::Visitors::HSQLDB
70
- end
71
-
72
68
  ADAPTER_NAME = 'HSQLDB'.freeze
73
69
 
74
70
  def adapter_name
@@ -291,6 +287,10 @@ module ActiveRecord::ConnectionAdapters
291
287
 
292
288
  class HsqldbAdapter < JdbcAdapter
293
289
  include ArJdbc::HSQLDB
290
+
291
+ def arel_visitor # :nodoc:
292
+ Arel::Visitors::HSQLDB
293
+ end
294
294
  end
295
295
 
296
296
  end
@@ -8,7 +8,6 @@ require 'arjdbc/jdbc/connection_methods'
8
8
  require 'arjdbc/jdbc/driver'
9
9
  require 'arjdbc/jdbc/column'
10
10
  require 'arjdbc/jdbc/connection'
11
- require 'arjdbc/jdbc/arel_support'
12
11
  require 'arjdbc/jdbc/callbacks'
13
12
  require 'arjdbc/jdbc/extension'
14
13
  require 'arjdbc/jdbc/type_converter'
@@ -33,12 +32,9 @@ module ActiveRecord
33
32
  # compatibility with native (MRI) adapters it's perfectly fine to sub-class
34
33
  # the adapter and override some of its API methods.
35
34
  class JdbcAdapter < AbstractAdapter
36
- extend ShadowCoreMethods
37
-
38
- include Jdbc::ArelSupport
39
35
  include Jdbc::ConnectionPoolCallbacks
40
36
 
41
- attr_reader :config
37
+ attr_reader :config, :prepared_statements
42
38
 
43
39
  def self.new(connection, logger = nil, pool = nil)
44
40
  adapter = super
@@ -55,14 +51,13 @@ module ActiveRecord
55
51
  # @param logger the `ActiveRecord::Base.logger` to use (or nil)
56
52
  # @param config the database configuration
57
53
  # @note `initialize(logger, config)` with 2 arguments is supported as well
58
- def initialize(connection, logger, config = nil)
59
- # AR : initialize(connection, logger = nil, pool = nil)
60
- # AR < 3.2 : initialize(connection, logger = nil)
61
- if config.nil? && logger.respond_to?(:key?) # (logger, config)
62
- config, logger, connection = logger, connection, nil
63
- end
64
-
54
+ def initialize(connection, logger = nil, config = nil)
65
55
  @config = config.respond_to?(:symbolize_keys) ? config.symbolize_keys : config
56
+ # FIXME: Rails 5 defaults to prepared statements on and we do not seem
57
+ # to work yet. So default to off unless it is requested until that is
58
+ # fixed.
59
+ @config[:prepared_statements] = false if !@config[:prepared_statements]
60
+
66
61
  # NOTE: JDBC 4.0 drivers support checking if connection isValid
67
62
  # thus no need to @config[:connection_alive_sql] ||= 'SELECT 1'
68
63
  #
@@ -75,7 +70,7 @@ module ActiveRecord
75
70
  # NOTE: adapter spec's init_connection only called if instantiated here :
76
71
  connection ||= jdbc_connection_class(spec).new(@config, self)
77
72
 
78
- super(connection, logger)
73
+ super(connection, logger, @config)
79
74
 
80
75
  # kind of like `extend ArJdbc::MyDB if self.class == JdbcAdapter` :
81
76
  klass = @config[:adapter_class]
@@ -83,8 +78,6 @@ module ActiveRecord
83
78
 
84
79
  # NOTE: should not be necessary for JNDI due reconnect! on checkout :
85
80
  configure_connection if respond_to?(:configure_connection)
86
-
87
- @visitor = new_visitor # nil if no AREL (AR-2.3)
88
81
  end
89
82
 
90
83
  # Returns the (JDBC) connection class to be used for this adapter.
@@ -296,40 +289,15 @@ module ActiveRecord
296
289
 
297
290
  # @override
298
291
  def reconnect!
299
- super # clear_cache! && reset_transaction
300
292
  @connection.reconnect! # handles adapter.configure_connection
301
293
  @connection
302
294
  end
303
295
 
304
296
  # @override
305
297
  def disconnect!
306
- super # clear_cache! && reset_transaction
307
- return unless @connection
308
298
  @connection.disconnect!
309
299
  end
310
300
 
311
- if ActiveRecord::VERSION::MAJOR < 3
312
-
313
- # @private
314
- def jdbc_insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
315
- insert_sql(sql, name, pk, id_value, sequence_name)
316
- end
317
- alias_chained_method :insert, :query_dirty, :jdbc_insert
318
-
319
- # @private
320
- def jdbc_update(sql, name = nil, binds = [])
321
- execute(sql, name, binds)
322
- end
323
- alias_chained_method :update, :query_dirty, :jdbc_update
324
-
325
- # @private
326
- def jdbc_select_all(sql, name = nil, binds = [])
327
- select(sql, name, binds)
328
- end
329
- alias_chained_method :select_all, :query_cache, :jdbc_select_all
330
-
331
- end
332
-
333
301
  # @note Used on AR 2.3 and 3.0
334
302
  # @override
335
303
  def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
@@ -575,20 +543,6 @@ module ActiveRecord
575
543
  end
576
544
  end
577
545
 
578
- # @private documented above
579
- def execute(sql, name = nil, skip_logging = false)
580
- if skip_logging.is_a?(Array)
581
- binds, skip_logging = skip_logging, false
582
- sql = suble_binds to_sql(sql, binds), binds
583
- end
584
- if skip_logging || name == :skip_logging
585
- _execute(sql, name)
586
- else
587
- log(sql, name) { _execute(sql, name) }
588
- end
589
- end if ActiveRecord::VERSION::MAJOR < 3 ||
590
- ( ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0 )
591
-
592
546
  # We need to do it this way, to allow Rails stupid tests to always work
593
547
  # even if we define a new `execute` method. Instead of mixing in a new
594
548
  # `execute`, an `_execute` should be mixed in.
@@ -759,7 +713,11 @@ module ActiveRecord
759
713
  # @note AR-4x arguments expected: `(name, temporary, options)`
760
714
  # @private documented bellow
761
715
  def new_table_definition(table_definition, *args)
762
- table_definition.new native_database_types, *args
716
+ if ActiveRecord::VERSION::MAJOR > 4
717
+ table_definition.new(*args)
718
+ else
719
+ table_definition.new native_database_types, *args
720
+ end
763
721
  end
764
722
  private :new_table_definition
765
723
 
@@ -829,28 +787,16 @@ module ActiveRecord
829
787
  false # off by default - NOTE: on AR 4.x it's on by default !?
830
788
  end
831
789
 
832
- if @@suble_binds = ENV_JAVA['arjdbc.adapter.suble_binds']
790
+ if @@suble_binds = Java::JavaLang::System.getProperty('arjdbc.adapter.suble_binds')
833
791
  @@suble_binds = Java::JavaLang::Boolean.parseBoolean(@@suble_binds)
834
792
  else
835
793
  @@suble_binds = ActiveRecord::VERSION::MAJOR < 4 # due compatibility
836
794
  end
837
795
  def self.suble_binds?; @@suble_binds; end
838
- def self.suble_binds=(flag); @@suble_binds = flag; end # remove on 1.4
796
+ def self.suble_binds=(flag); @@suble_binds = flag; end
839
797
 
840
798
  private
841
799
 
842
- # @note Since AR 4.0 we (finally) do not "sub" SQL's '?' parameters !
843
- # @deprecated This should go away (hopefully), now here due 1.2.x.
844
- def suble_binds(sql, binds)
845
- return sql if ! @@suble_binds || binds.nil? || binds.empty?
846
- binds = binds.dup; warn = nil
847
- result = sql.gsub('?') { warn = true; quote(*binds.shift.reverse) }
848
- ActiveSupport::Deprecation.warn(
849
- "string binds substitution is deprecated - please refactor your sql", caller[1..-1]
850
- ) if warn
851
- result
852
- end
853
-
854
800
  # @private Supporting "string-subling" on AR 4.0 would require {#to_sql}
855
801
  # to consume binds parameters otherwise it happens twice e.g. for a record
856
802
  # insert it is called during {#insert} as well as on {#exec_insert} ...
@@ -858,13 +804,6 @@ module ActiveRecord
858
804
  # array and run a query again since it's the very same instance on 4.0 !
859
805
  def suble_binds(sql, binds)
860
806
  sql
861
- end if ActiveRecord::VERSION::MAJOR > 3
862
-
863
- # @deprecated No longer used, will be removed.
864
- # @see #suble_binds
865
- def substitute_binds(sql, binds)
866
- return sql if binds.nil? || binds.empty?; binds = binds.dup
867
- extract_sql(sql).gsub('?') { quote(*binds.shift.reverse) }
868
807
  end
869
808
 
870
809
  # @deprecated No longer used, kept for 1.2 API compatibility.
@@ -23,43 +23,24 @@ module ActiveRecord
23
23
  # adapters) would be to mingle with the $LOAD_PATH which seems worse ...
24
24
  case path
25
25
  when 'active_record/connection_adapters/mysql_adapter'
26
- if !$LOADED_FEATURES.include?('active_record/connection_adapters/mysql_adapter.rb')
27
- $LOADED_FEATURES << 'active_record/connection_adapters/mysql_adapter.rb'
28
- super('arjdbc/mysql')
29
- else
30
- false
31
- end
26
+ $LOADED_FEATURES << 'active_record/connection_adapters/mysql_adapter.rb'
27
+ super('arjdbc/mysql')
32
28
  when 'active_record/connection_adapters/mysql2_adapter'
33
- if !$LOADED_FEATURES.include?('active_record/connection_adapters/mysql2_adapter.rb')
34
- $LOADED_FEATURES << 'active_record/connection_adapters/mysql2_adapter.rb'
35
- super('arjdbc/mysql')
36
- else
37
- false
38
- end
29
+ $LOADED_FEATURES << 'active_record/connection_adapters/mysql2_adapter.rb'
30
+ super('arjdbc/mysql')
39
31
  when 'active_record/connection_adapters/postgresql_adapter'
40
- if !$LOADED_FEATURES.include?('active_record/connection_adapters/postgresql_adapter.rb')
41
- $LOADED_FEATURES << 'active_record/connection_adapters/postgresql_adapter.rb'
42
- super('arjdbc/postgresql')
43
- else
44
- false
45
- end
32
+ $LOADED_FEATURES << 'active_record/connection_adapters/postgresql_adapter.rb'
33
+ super('arjdbc/postgresql')
46
34
  when 'active_record/connection_adapters/sqlite_adapter'
47
- if !$LOADED_FEATURES.include?('active_record/connection_adapters/sqlite_adapter.rb')
48
- $LOADED_FEATURES << 'active_record/connection_adapters/sqlite_adapter.rb'
49
- super('arjdbc/sqlite3')
50
- else
51
- false
52
- end
35
+ $LOADED_FEATURES << 'active_record/connection_adapters/sqlite_adapter.rb'
36
+ super('arjdbc/sqlite3')
53
37
  when 'active_record/connection_adapters/sqlite3_adapter'
54
- if !$LOADED_FEATURES.include?('active_record/connection_adapters/sqlite3_adapter.rb')
55
- $LOADED_FEATURES << 'active_record/connection_adapters/sqlite3_adapter.rb'
56
- super('arjdbc/sqlite3')
57
- else
58
- false
59
- end
38
+ $LOADED_FEATURES << 'active_record/connection_adapters/sqlite3_adapter.rb'
39
+ super('arjdbc/sqlite3')
60
40
  else super
61
41
  end
62
42
  end
43
+
63
44
  end
64
45
 
65
- end
46
+ end
@@ -1,18 +1,16 @@
1
1
  module ActiveRecord
2
- # ActiveRecord::Base extensions.
3
- Base.class_eval do
4
- class << self
2
+ class << Base
3
+ m = Module.new do
5
4
  # Allow adapters to provide their own {#reset_column_information} method.
6
5
  # @note This only affects the current thread's connection.
7
- def reset_column_information_with_arjdbc # :nodoc:
6
+ def reset_column_information # :nodoc:
8
7
  # invoke the adapter-specific reset_column_information method
9
8
  connection.reset_column_information if connection.respond_to?(:reset_column_information)
10
- reset_column_information_without_arjdbc
11
- end
12
- unless method_defined?("reset_column_information_without_arjdbc")
13
- alias_method_chain :reset_column_information, :arjdbc
9
+ super
14
10
  end
15
11
  end
12
+
13
+ self.prepend(m)
16
14
  end
17
15
 
18
16
  # Represents exceptions that have propagated up through the JDBC API.
@@ -43,21 +41,4 @@ module ActiveRecord
43
41
  end
44
42
 
45
43
  end
46
-
47
- module ConnectionAdapters
48
- # Allows properly re-defining methods that may already be alias-chain-ed.
49
- # Query caching works even with overriden alias_method_chain'd methods.
50
- # @private
51
- module ShadowCoreMethods
52
- def alias_chained_method(name, feature, target)
53
- # NOTE: aliasing for things such as columns (with feature query_cache)
54
- # seems to only be used for 2.3 since 3.0 methods are not aliased ...
55
- if method_defined?(method = "#{name}_without_#{feature}")
56
- alias_method method, target
57
- else
58
- alias_method name, target if name.to_s != target.to_s
59
- end
60
- end
61
- end
62
- end
63
44
  end