rebel 0.1.0 → 0.2.0
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/lib/rebel/sql.rb +73 -42
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa3b3e1d946d65b40349085c1f02503587f2f3fd
|
4
|
+
data.tar.gz: e7923044d3c6f76a81eda0001941bb978adf85f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5992df606d5eba47645c9301729488d4114f1d4278542d7476521675aaed788427d7a6f4e9673a32bd88f1238a06ee3bfa7ea9f14d6136d7a49805846cae8516
|
7
|
+
data.tar.gz: d44f06d4f085bee06d81b3db9a609a34dfdba2e6d191c003e316eca27bc154c8c7ffaa57c962f28b6e1ed46177ad04344fc5aa5cf72c5e6f2620849c7fc193b4
|
data/lib/rebel/sql.rb
CHANGED
@@ -6,49 +6,53 @@ module Rebel::SQL
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def create_table(table_name, desc)
|
9
|
-
exec(SQL.create_table(table_name, desc))
|
9
|
+
exec(Rebel::SQL.create_table(table_name, desc))
|
10
|
+
end
|
11
|
+
|
12
|
+
def drop_table(table_name)
|
13
|
+
exec(Rebel::SQL.drop_table(table_name))
|
10
14
|
end
|
11
15
|
|
12
16
|
def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
|
13
|
-
exec(SQL.select(*fields,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
exec(Rebel::SQL.select(*fields,
|
18
|
+
from: from,
|
19
|
+
where: where,
|
20
|
+
inner: inner,
|
21
|
+
left: left,
|
22
|
+
right: right))
|
19
23
|
end
|
20
24
|
|
21
25
|
def insert_into(table_name, *rows)
|
22
|
-
exec(SQL.insert_into(table_name, *rows))
|
26
|
+
exec(Rebel::SQL.insert_into(table_name, *rows))
|
23
27
|
end
|
24
28
|
|
25
29
|
def update(table_name, set: nil, where: nil, inner: nil, left: nil, right: nil)
|
26
|
-
exec(SQL.update(table_name, set: set, where: where, inner: inner, left: left, right: right))
|
30
|
+
exec(Rebel::SQL.update(table_name, set: set, where: where, inner: inner, left: left, right: right))
|
27
31
|
end
|
28
32
|
|
29
33
|
def delete_from(table_name, where: nil, inner: nil, left: nil, right: nil)
|
30
|
-
exec(SQL.delete_from(table_name, where: where, inner: inner, left: left, right: right))
|
34
|
+
exec(Rebel::SQL.delete_from(table_name, where: where, inner: inner, left: left, right: right))
|
31
35
|
end
|
32
36
|
|
33
37
|
def truncate(table_name)
|
34
|
-
exec(SQL.truncate(table_name))
|
38
|
+
exec(Rebel::SQL.truncate(table_name))
|
35
39
|
end
|
36
40
|
|
37
41
|
def count(*n)
|
38
|
-
SQL.count(*n)
|
42
|
+
Rebel::SQL.count(*n)
|
39
43
|
end
|
40
44
|
|
41
45
|
def join(table, on: nil)
|
42
|
-
SQL.join(table, on: on)
|
46
|
+
Rebel::SQL.join(table, on: on)
|
43
47
|
end
|
44
48
|
|
45
49
|
def outer_join(table, on: nil)
|
46
|
-
SQL.outer_join(table, on: on)
|
50
|
+
Rebel::SQL.outer_join(table, on: on)
|
47
51
|
end
|
48
52
|
|
49
53
|
class Raw < String
|
50
54
|
def as(n)
|
51
|
-
Raw.new(self + " AS #{SQL.name(n)}")
|
55
|
+
Raw.new(self + " AS #{Rebel::SQL.name(n)}")
|
52
56
|
end
|
53
57
|
|
54
58
|
def as?(n)
|
@@ -56,7 +60,7 @@ module Rebel::SQL
|
|
56
60
|
end
|
57
61
|
|
58
62
|
def on(clause)
|
59
|
-
Raw.new(self + " ON #{SQL.and_clause(clause)}")
|
63
|
+
Raw.new(self + " ON #{Rebel::SQL.and_clause(clause)}")
|
60
64
|
end
|
61
65
|
|
62
66
|
def on?(clause)
|
@@ -71,55 +75,61 @@ module Rebel::SQL
|
|
71
75
|
|
72
76
|
def create_table(table_name, desc)
|
73
77
|
<<-SQL
|
74
|
-
CREATE TABLE #{SQL.name(table_name)} (
|
75
|
-
#{SQL.list(desc.map { |k, v| "#{SQL.name(k)} #{v}" })}
|
78
|
+
CREATE TABLE #{Rebel::SQL.name(table_name)} (
|
79
|
+
#{Rebel::SQL.list(desc.map { |k, v| "#{Rebel::SQL.name(k)} #{v}" })}
|
76
80
|
);
|
77
81
|
SQL
|
78
82
|
end
|
79
83
|
|
84
|
+
def drop_table(table_name)
|
85
|
+
<<-SQL
|
86
|
+
DROP TABLE #{Rebel::SQL.name(table_name)};
|
87
|
+
SQL
|
88
|
+
end
|
89
|
+
|
80
90
|
def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
|
81
91
|
<<-SQL
|
82
92
|
SELECT #{names(*fields)} FROM #{name(from)}
|
83
|
-
#{SQL.inner?(inner)}
|
84
|
-
#{SQL.left?(left)}
|
85
|
-
#{SQL.right?(right)}
|
86
|
-
#{SQL.where?(where)};
|
93
|
+
#{Rebel::SQL.inner?(inner)}
|
94
|
+
#{Rebel::SQL.left?(left)}
|
95
|
+
#{Rebel::SQL.right?(right)}
|
96
|
+
#{Rebel::SQL.where?(where)};
|
87
97
|
SQL
|
88
98
|
end
|
89
99
|
|
90
100
|
def insert_into(table_name, *rows)
|
91
101
|
<<-SQL
|
92
|
-
INSERT INTO #{SQL.name(table_name)} (#{SQL.names(*rows.first.keys)})
|
93
|
-
VALUES #{SQL.list(rows.map { |r| "(#{SQL.values(*r.values)})" })};
|
102
|
+
INSERT INTO #{Rebel::SQL.name(table_name)} (#{Rebel::SQL.names(*rows.first.keys)})
|
103
|
+
VALUES #{Rebel::SQL.list(rows.map { |r| "(#{Rebel::SQL.values(*r.values)})" })};
|
94
104
|
SQL
|
95
105
|
end
|
96
106
|
|
97
107
|
def update(table_name, set: nil, where: nil, inner: nil, left: nil, right: nil)
|
98
|
-
|
108
|
+
raise ArgumentError if set.nil?
|
99
109
|
|
100
110
|
<<-SQL
|
101
|
-
UPDATE #{SQL.name(table_name)}
|
102
|
-
SET #{SQL.assign_clause(set)}
|
103
|
-
#{SQL.inner?(inner)}
|
104
|
-
#{SQL.left?(left)}
|
105
|
-
#{SQL.right?(right)}
|
106
|
-
#{SQL.where?(where)};
|
111
|
+
UPDATE #{Rebel::SQL.name(table_name)}
|
112
|
+
SET #{Rebel::SQL.assign_clause(set)}
|
113
|
+
#{Rebel::SQL.inner?(inner)}
|
114
|
+
#{Rebel::SQL.left?(left)}
|
115
|
+
#{Rebel::SQL.right?(right)}
|
116
|
+
#{Rebel::SQL.where?(where)};
|
107
117
|
SQL
|
108
118
|
end
|
109
119
|
|
110
120
|
def delete_from(table_name, where: nil, inner: nil, left: nil, right: nil)
|
111
121
|
<<-SQL
|
112
|
-
DELETE FROM #{SQL.name(table_name)}
|
113
|
-
#{SQL.inner?(inner)}
|
114
|
-
#{SQL.left?(left)}
|
115
|
-
#{SQL.right?(right)}
|
116
|
-
#{SQL.where?(where)};
|
122
|
+
DELETE FROM #{Rebel::SQL.name(table_name)}
|
123
|
+
#{Rebel::SQL.inner?(inner)}
|
124
|
+
#{Rebel::SQL.left?(left)}
|
125
|
+
#{Rebel::SQL.right?(right)}
|
126
|
+
#{Rebel::SQL.where?(where)};
|
117
127
|
SQL
|
118
128
|
end
|
119
129
|
|
120
130
|
def truncate(table_name)
|
121
131
|
<<-SQL
|
122
|
-
TRUNCATE #{SQL.name(table_name)};
|
132
|
+
TRUNCATE #{Rebel::SQL.name(table_name)};
|
123
133
|
SQL
|
124
134
|
end
|
125
135
|
|
@@ -137,6 +147,18 @@ module Rebel::SQL
|
|
137
147
|
raw("OUTER JOIN #{name(table)}").on?(on)
|
138
148
|
end
|
139
149
|
|
150
|
+
def inner_join(table, on: nil)
|
151
|
+
raw(inner? join(table, on: on))
|
152
|
+
end
|
153
|
+
|
154
|
+
def left_outer_join(table, on: nil)
|
155
|
+
raw(left? outer_join(table, on: on))
|
156
|
+
end
|
157
|
+
|
158
|
+
def right_outer_join(table, on: nil)
|
159
|
+
raw(right? outer_join(table, on: on))
|
160
|
+
end
|
161
|
+
|
140
162
|
## Support
|
141
163
|
|
142
164
|
def name(name)
|
@@ -158,9 +180,9 @@ module Rebel::SQL
|
|
158
180
|
case v
|
159
181
|
when Raw then v
|
160
182
|
when String then raw "'#{v.tr("'", "''")}'"
|
161
|
-
when
|
183
|
+
when Integer then raw v.to_s
|
162
184
|
when nil then raw 'NULL'
|
163
|
-
else
|
185
|
+
else raise NotImplementedError, v.inspect
|
164
186
|
end
|
165
187
|
end
|
166
188
|
|
@@ -180,14 +202,23 @@ module Rebel::SQL
|
|
180
202
|
list(clause.map { |k, v| equal(k, v) })
|
181
203
|
end
|
182
204
|
|
205
|
+
def clause_term(left, right)
|
206
|
+
case right
|
207
|
+
when Array
|
208
|
+
"#{name(left)} IN (#{values(*right)})"
|
209
|
+
else
|
210
|
+
"#{name(left)} = #{name_or_value(right)}"
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
183
214
|
def and_clause(clause)
|
184
215
|
return clause if clause.is_a?(Raw) || clause.is_a?(String)
|
185
216
|
|
186
217
|
clause.map do |e|
|
187
218
|
case e
|
188
|
-
when Array then
|
219
|
+
when Array then clause_term(e[0], e[1])
|
189
220
|
when Raw, String then e
|
190
|
-
else
|
221
|
+
else raise NotImplementedError, e.class
|
191
222
|
end
|
192
223
|
end.join(' AND ')
|
193
224
|
end
|
@@ -195,7 +226,7 @@ module Rebel::SQL
|
|
195
226
|
def where?(clause)
|
196
227
|
return "WHERE #{clause}" if clause.is_a?(Raw) || clause.is_a?(String)
|
197
228
|
|
198
|
-
|
229
|
+
clause && clause.any? ? "WHERE #{Rebel::SQL.and_clause(clause)}" : nil
|
199
230
|
end
|
200
231
|
|
201
232
|
def inner?(join)
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rebel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Loic Nageleisen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
13
|
+
description: SQL-flavoured Ruby, or is it the other way around?
|
14
14
|
email: loic.nageleisen@gmail.com
|
15
15
|
executables: []
|
16
16
|
extensions: []
|