arel_extensions 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|