arel_extensions 0.9.6 → 0.9.7
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/SQL_Challenges.md +1 -1
- data/TODO +0 -1
- data/lib/arel_extensions/math.rb +7 -0
- data/lib/arel_extensions/nodes/change_case.rb +11 -0
- data/lib/arel_extensions/nodes/locate.rb +1 -4
- data/lib/arel_extensions/nodes/substring.rb +5 -3
- data/lib/arel_extensions/string_functions.rb +9 -0
- data/lib/arel_extensions/tasks.rb +5 -5
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/sqlite.rb +2 -2
- data/lib/arel_extensions/visitors/to_sql.rb +20 -0
- data/test/real_db_test.rb +1 -1
- data/test/with_ar/all_agnostic_test.rb +13 -1
- data/test/with_ar/insert_agnostic_test.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6b6035bcab431e9db110bac526dba5d7ae50cf9
|
4
|
+
data.tar.gz: afb3bd312dbcd6ecc15ba1658b4ad2229f47e8d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f98fda0e062afc38ab6b9b10d9f72c857b348551095f396e0821b953296c9097067593ccdc50b764f35e5fb30e8994ef5c445491e7a0fc94a16ca19ed251da9f
|
7
|
+
data.tar.gz: e616f743571bde26c649646067dc3d25f8a60abdf8c479c204761ea2851824536534ba5d31d519ff3bc3b8b3fd04dc6056e696688fc732dfe2003282bb908742
|
data/SQL_Challenges.md
CHANGED
data/TODO
CHANGED
data/lib/arel_extensions/math.rb
CHANGED
@@ -12,6 +12,13 @@ module ArelExtensions
|
|
12
12
|
#Date and integer adds or subtracts a specified time interval from a date.
|
13
13
|
def +(other)
|
14
14
|
return ArelExtensions::Nodes::Concat.new [self, other] if self.is_a?(Arel::Nodes::Quoted)
|
15
|
+
if self.is_a?(Arel::Nodes::Grouping)
|
16
|
+
if self.expr.left.is_a?(String) || self.expr.right.is_a?(String)
|
17
|
+
return ArelExtensions::Nodes::Concat.new [self, other]
|
18
|
+
else
|
19
|
+
return Arel::Nodes::Grouping.new(Arel::Nodes::Addition.new self, other)
|
20
|
+
end
|
21
|
+
end
|
15
22
|
return case self.class.return_type
|
16
23
|
when :string, :text
|
17
24
|
ArelExtensions::Nodes::Concat.new [self, other]
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Locate < Function
|
4
|
+
@@return_type = :integer
|
4
5
|
|
5
6
|
def initialize expr
|
6
7
|
tab = expr.map do |arg|
|
@@ -9,10 +10,6 @@ module ArelExtensions
|
|
9
10
|
return super(tab)
|
10
11
|
end
|
11
12
|
|
12
|
-
def +(other)
|
13
|
-
return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
|
14
|
-
end
|
15
|
-
|
16
13
|
end
|
17
14
|
end
|
18
15
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Nodes
|
3
3
|
class Substring < Function
|
4
|
+
@@return_type = :string
|
4
5
|
|
5
6
|
def initialize expr
|
6
7
|
tab = [convert_to_node(expr[0]), convert_to_node(expr[1])]
|
@@ -12,9 +13,10 @@ module ArelExtensions
|
|
12
13
|
return super(tab)
|
13
14
|
end
|
14
15
|
|
15
|
-
def +(other)
|
16
|
-
|
17
|
-
|
16
|
+
# def +(other)
|
17
|
+
# puts "[Substring] : #{other.inspect} (#{self.expressions.inspect})"
|
18
|
+
# return ArelExtensions::Nodes::Concat.new(self.expressions + [other])
|
19
|
+
# end
|
18
20
|
|
19
21
|
end
|
20
22
|
end
|
@@ -7,6 +7,7 @@ require 'arel_extensions/nodes/find_in_set'
|
|
7
7
|
require 'arel_extensions/nodes/replace'
|
8
8
|
require 'arel_extensions/nodes/soundex'
|
9
9
|
require 'arel_extensions/nodes/trim'
|
10
|
+
require 'arel_extensions/nodes/change_case'
|
10
11
|
require 'arel_extensions/nodes/blank'
|
11
12
|
require 'arel_extensions/nodes/format'
|
12
13
|
|
@@ -94,6 +95,14 @@ module ArelExtensions
|
|
94
95
|
ArelExtensions::Nodes::Rtrim.new [self, other]
|
95
96
|
end
|
96
97
|
|
98
|
+
def downcase
|
99
|
+
ArelExtensions::Nodes::Downcase.new [self]
|
100
|
+
end
|
101
|
+
|
102
|
+
def upcase
|
103
|
+
ArelExtensions::Nodes::Upcase.new [self]
|
104
|
+
end
|
105
|
+
|
97
106
|
def blank
|
98
107
|
ArelExtensions::Nodes::Blank.new [self]
|
99
108
|
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
namespace :
|
2
|
-
desc 'Install DB functions'
|
1
|
+
namespace :arel_extensions do
|
2
|
+
desc 'Install DB functions into current DB'
|
3
3
|
task :install_functions => :environment do
|
4
|
-
|
4
|
+
if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
|
5
5
|
@env_db = (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
|
6
6
|
else
|
7
|
-
@env_db = ENV['DB']
|
7
|
+
@env_db = ENV['DB'] || ActiveRecord::Base.connection.adapter_name
|
8
8
|
end
|
9
|
-
ActiveRecord::Base.establish_connection(
|
9
|
+
ActiveRecord::Base.establish_connection(Rails.env)
|
10
10
|
@cnx = ActiveRecord::Base.connection
|
11
11
|
if File.exist?("init/#{@env_db}.sql")
|
12
12
|
sql = File.read("init/#{@env_db}.sql")
|
@@ -72,7 +72,7 @@ module ArelExtensions
|
|
72
72
|
collector << "instr("
|
73
73
|
collector = visit o.expr, collector
|
74
74
|
collector << Arel::Visitors::SQLite::COMMA
|
75
|
-
collector = visit o.
|
75
|
+
collector = visit o.right, collector
|
76
76
|
collector << ")"
|
77
77
|
collector
|
78
78
|
end
|
@@ -80,7 +80,7 @@ module ArelExtensions
|
|
80
80
|
def visit_ArelExtensions_Nodes_Substring o, collector
|
81
81
|
collector << "SUBSTR("
|
82
82
|
o.expressions.each_with_index { |arg, i|
|
83
|
-
collector << Arel::Visitors::
|
83
|
+
collector << Arel::Visitors::SQLite::COMMA unless i == 0
|
84
84
|
collector = visit arg, collector
|
85
85
|
}
|
86
86
|
collector << ")"
|
@@ -131,6 +131,26 @@ module ArelExtensions
|
|
131
131
|
collector
|
132
132
|
end
|
133
133
|
|
134
|
+
def visit_ArelExtensions_Nodes_Downcase o, collector
|
135
|
+
collector << "LOWER("
|
136
|
+
o.expressions.each_with_index { |arg, i|
|
137
|
+
collector << Arel::Visitors::ToSql::COMMA unless i == 0
|
138
|
+
collector = visit arg, collector
|
139
|
+
}
|
140
|
+
collector << ")"
|
141
|
+
collector
|
142
|
+
end
|
143
|
+
|
144
|
+
def visit_ArelExtensions_Nodes_Upcase o, collector
|
145
|
+
collector << "UPPER("
|
146
|
+
o.expressions.each_with_index { |arg, i|
|
147
|
+
collector << Arel::Visitors::ToSql::COMMA unless i == 0
|
148
|
+
collector = visit arg, collector
|
149
|
+
}
|
150
|
+
collector << ")"
|
151
|
+
collector
|
152
|
+
end
|
153
|
+
|
134
154
|
def visit_ArelExtensions_Nodes_Trim o, collector
|
135
155
|
collector << "TRIM("
|
136
156
|
o.expressions.each_with_index { |arg, i|
|
data/test/real_db_test.rb
CHANGED
@@ -241,6 +241,12 @@ module ArelExtensions
|
|
241
241
|
assert_equal "replace", t(@lucas, @name.replace(@name, "replace"))
|
242
242
|
end
|
243
243
|
|
244
|
+
def test_replace_once
|
245
|
+
skip "TODO"
|
246
|
+
# skip "Sqlite version can't load extension for locate" if $sqlite && $load_extension_disabled
|
247
|
+
assert_equal "LuCas", t(@lucas, @name.substring(1, @name.locate('c') - 1) + 'C' + @name.substring(@name.locate('c') + 1, @name.length))
|
248
|
+
end
|
249
|
+
|
244
250
|
def test_soundex
|
245
251
|
skip "Sqlite version can't load extension for soundex" if $sqlite && $load_extension_disabled
|
246
252
|
skip "PostgreSql version can't load extension for soundex" if @env_db == 'postgresql'
|
@@ -248,6 +254,12 @@ module ArelExtensions
|
|
248
254
|
assert_equal 8, User.where(@name.soundex.eq(@name.soundex)).count
|
249
255
|
end
|
250
256
|
|
257
|
+
def test_change_case
|
258
|
+
assert_equal "myung", t(@myung, @name.downcase)
|
259
|
+
assert_equal "MYUNG", t(@myung, @name.upcase)
|
260
|
+
assert_equal "myung", t(@myung, @name.upcase.downcase)
|
261
|
+
end
|
262
|
+
|
251
263
|
def test_trim
|
252
264
|
assert_equal "Myung", t(@myung, @name.trim)
|
253
265
|
assert_equal "Myung", t(@myung, @name.trim.ltrim.rtrim)
|
@@ -290,7 +302,7 @@ module ArelExtensions
|
|
290
302
|
|
291
303
|
assert_equal ' ', t(@myung, @comments.coalesce("Myung").coalesce('ignored'))
|
292
304
|
assert_equal 'Laure', t(@laure, @comments.coalesce("Laure"))
|
293
|
-
assert_equal '', t(@laure, @comments.coalesce(""))
|
305
|
+
assert_equal (@env_db == 'oracle' ? nil : ''), t(@laure, @comments.coalesce(""))
|
294
306
|
|
295
307
|
if @env_db == 'postgresql'
|
296
308
|
assert_equal 100, t(@test, @age.coalesce(100))
|
@@ -20,7 +20,7 @@ module ArelExtensions
|
|
20
20
|
if File.exist?("init/#{@env_db}.sql")
|
21
21
|
sql = File.read("init/#{@env_db}.sql")
|
22
22
|
unless sql.blank?
|
23
|
-
@cnx.execute(sql) rescue $stderr << "can't create functions"
|
23
|
+
@cnx.execute(sql) rescue $stderr << "can't create functions\n"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
@cnx.drop_table(:user_tests) rescue nil
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yann Azoury
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-03-
|
13
|
+
date: 2017-03-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: arel
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/arel_extensions/nodes/abs.rb
|
117
117
|
- lib/arel_extensions/nodes/blank.rb
|
118
118
|
- lib/arel_extensions/nodes/ceil.rb
|
119
|
+
- lib/arel_extensions/nodes/change_case.rb
|
119
120
|
- lib/arel_extensions/nodes/coalesce.rb
|
120
121
|
- lib/arel_extensions/nodes/concat.rb
|
121
122
|
- lib/arel_extensions/nodes/date_diff.rb
|