ghazel-ar-extensions 0.9.3.1 → 0.9.3.2
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.
@@ -1,10 +1,57 @@
|
|
1
|
-
ActiveRecord::ConnectionAdapters::MysqlAdapter
|
1
|
+
module ActiveRecord::Extensions::ConnectionAdapters::MysqlAdapter # :nodoc:
|
2
|
+
|
3
|
+
include ActiveRecord::Extensions::Import::ImportSupport
|
4
|
+
include ActiveRecord::Extensions::Import::OnDuplicateKeyUpdateSupport
|
5
|
+
|
2
6
|
# Returns the maximum number of bytes that the server will allow
|
3
7
|
# in a single packet
|
4
8
|
def max_allowed_packet # :nodoc:
|
5
9
|
result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
|
6
|
-
|
10
|
+
# original Mysql gem responds to #fetch_row while Mysql2 responds to #first
|
11
|
+
val = result.respond_to?(:fetch_row) ? result.fetch_row[1] : result.first[1]
|
12
|
+
val.to_i
|
7
13
|
end
|
8
14
|
|
9
15
|
def rollup_sql; " WITH ROLLUP "; end
|
16
|
+
|
17
|
+
# Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
|
18
|
+
# in +args+.
|
19
|
+
def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
|
20
|
+
sql = ' ON DUPLICATE KEY UPDATE '
|
21
|
+
arg = args.first
|
22
|
+
if arg.is_a?( Array )
|
23
|
+
sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
|
24
|
+
elsif arg.is_a?( Hash )
|
25
|
+
sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
|
26
|
+
elsif arg.is_a?( String )
|
27
|
+
sql << arg
|
28
|
+
else
|
29
|
+
raise ArgumentError.new( "Expected Array or Hash" )
|
30
|
+
end
|
31
|
+
sql
|
32
|
+
end
|
33
|
+
|
34
|
+
def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
|
35
|
+
results = arr.map do |column|
|
36
|
+
qc = quote_column_name( column )
|
37
|
+
"#{table_name}.#{qc}=VALUES(#{qc})"
|
38
|
+
end
|
39
|
+
results.join( ',' )
|
40
|
+
end
|
41
|
+
|
42
|
+
def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
|
43
|
+
sql = ' ON DUPLICATE KEY UPDATE '
|
44
|
+
results = hsh.map do |column1, column2|
|
45
|
+
qc1 = quote_column_name( column1 )
|
46
|
+
qc2 = quote_column_name( column2 )
|
47
|
+
"#{table_name}.#{qc1}=VALUES( #{qc2} )"
|
48
|
+
end
|
49
|
+
results.join( ',')
|
50
|
+
end
|
51
|
+
|
52
|
+
#return true if the statement is a duplicate key record error
|
53
|
+
def duplicate_key_update_error?(exception)# :nodoc:
|
54
|
+
exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
|
55
|
+
end
|
56
|
+
|
10
57
|
end
|
@@ -1,50 +1,3 @@
|
|
1
|
-
module ActiveRecord::Extensions::ConnectionAdapters::MysqlAdapter # :nodoc:
|
2
|
-
|
3
|
-
include ActiveRecord::Extensions::Import::ImportSupport
|
4
|
-
include ActiveRecord::Extensions::Import::OnDuplicateKeyUpdateSupport
|
5
|
-
|
6
|
-
# Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
|
7
|
-
# in +args+.
|
8
|
-
def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
|
9
|
-
sql = ' ON DUPLICATE KEY UPDATE '
|
10
|
-
arg = args.first
|
11
|
-
if arg.is_a?( Array )
|
12
|
-
sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
|
13
|
-
elsif arg.is_a?( Hash )
|
14
|
-
sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
|
15
|
-
elsif arg.is_a?( String )
|
16
|
-
sql << arg
|
17
|
-
else
|
18
|
-
raise ArgumentError.new( "Expected Array or Hash" )
|
19
|
-
end
|
20
|
-
sql
|
21
|
-
end
|
22
|
-
|
23
|
-
def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
|
24
|
-
results = arr.map do |column|
|
25
|
-
qc = quote_column_name( column )
|
26
|
-
"#{table_name}.#{qc}=VALUES(#{qc})"
|
27
|
-
end
|
28
|
-
results.join( ',' )
|
29
|
-
end
|
30
|
-
|
31
|
-
def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
|
32
|
-
sql = ' ON DUPLICATE KEY UPDATE '
|
33
|
-
results = hsh.map do |column1, column2|
|
34
|
-
qc1 = quote_column_name( column1 )
|
35
|
-
qc2 = quote_column_name( column2 )
|
36
|
-
"#{table_name}.#{qc1}=VALUES( #{qc2} )"
|
37
|
-
end
|
38
|
-
results.join( ',')
|
39
|
-
end
|
40
|
-
|
41
|
-
#return true if the statement is a duplicate key record error
|
42
|
-
def duplicate_key_update_error?(exception)# :nodoc:
|
43
|
-
exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
1
|
ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
|
49
2
|
include ActiveRecord::Extensions::ConnectionAdapters::MysqlAdapter
|
50
3
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ghazel-ar-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 3
|
10
|
-
-
|
11
|
-
version: 0.9.3.
|
10
|
+
- 2
|
11
|
+
version: 0.9.3.2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Zach Dennis
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- config/postgresql.schema
|
60
60
|
- lib/ar-extensions/adapters/abstract_adapter.rb
|
61
61
|
- lib/ar-extensions/adapters/mysql.rb
|
62
|
-
- lib/ar-extensions/adapters/mysql2.rb
|
63
62
|
- lib/ar-extensions/adapters/oracle.rb
|
64
63
|
- lib/ar-extensions/adapters/postgresql.rb
|
65
64
|
- lib/ar-extensions/adapters/sqlite.rb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
ActiveRecord::ConnectionAdapters::Mysql2Adapter.class_eval do
|
2
|
-
# Returns the maximum number of bytes that the server will allow
|
3
|
-
# in a single packet
|
4
|
-
def max_allowed_packet # :nodoc:
|
5
|
-
result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
|
6
|
-
result.first[1].to_i
|
7
|
-
end
|
8
|
-
|
9
|
-
def rollup_sql; " WITH ROLLUP "; end
|
10
|
-
end
|