qdsl 0.0.2 → 0.0.3
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/and.rb +6 -2
- data/lib/boolean.rb +5 -2
- data/lib/call.rb +28 -0
- data/lib/column.rb +14 -2
- data/lib/{funky_proxy.rb → column_proxy.rb} +10 -2
- data/lib/column_set.rb +25 -0
- data/lib/context.rb +6 -8
- data/lib/equals.rb +5 -8
- data/lib/expression.rb +14 -6
- data/lib/format_call.rb +37 -0
- data/lib/inner_join.rb +3 -3
- data/lib/inner_join_builder.rb +4 -5
- data/lib/is_true.rb +17 -0
- data/lib/or.rb +8 -2
- data/lib/qdsl/version.rb +1 -1
- data/lib/qdsl.rb +4 -18
- data/lib/render_result.rb +13 -0
- data/lib/select.rb +86 -53
- data/lib/select_query.rb +30 -0
- data/lib/simple_render_result.rb +11 -0
- data/lib/table_query.rb +1 -1
- data/lib/util.rb +8 -0
- data/test/column_test.rb +19 -8
- data/test/end_to_end_test.rb +8 -1
- data/test/expression_test.rb +72 -56
- data/test/inner_join_test.rb +44 -16
- data/test/is_true_test.rb +68 -0
- data/test/minitest_helper.rb +2 -0
- data/test/query_test.rb +1 -0
- data/test/select_test.rb +89 -15
- data/test/subquery_test.rb +177 -29
- data/test/where_test.rb +9 -7
- metadata +13 -5
- data/test/context_test.rb +0 -19
data/test/column_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'minitest_helper'
|
2
|
+
require 'ostruct'
|
2
3
|
|
3
4
|
module Qdsl
|
4
5
|
class ColumnTest < Minitest::Test
|
@@ -85,6 +86,16 @@ module Qdsl
|
|
85
86
|
assert_equal 'new_source', result.source
|
86
87
|
end
|
87
88
|
|
89
|
+
def test_to_expression
|
90
|
+
result = Column.new('name', 'alias_name', 'source').to_expression
|
91
|
+
assert result.is_a?(IsTrue)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_true
|
95
|
+
result = Column.new('name', 'alias_name', 'source').true?
|
96
|
+
assert result.is_a?(IsTrue)
|
97
|
+
end
|
98
|
+
|
88
99
|
def test_as_string
|
89
100
|
result = Column.new('name', 'alias_name', 'source').as('new_name_alias')
|
90
101
|
assert_equal 'name', result.name
|
@@ -99,16 +110,16 @@ module Qdsl
|
|
99
110
|
assert_equal 'source', result.source
|
100
111
|
end
|
101
112
|
|
102
|
-
def
|
103
|
-
column = Column.new('name')
|
104
|
-
result = column.
|
105
|
-
assert_equal '
|
113
|
+
def test_render_sql_name_only
|
114
|
+
column = Column.new('name').with_source(OpenStruct.new(id: '__id__'))
|
115
|
+
result = column.render_sql(nil, nil)
|
116
|
+
assert_equal '__id__.name', result.sql
|
106
117
|
end
|
107
118
|
|
108
|
-
def
|
109
|
-
column = Column.new('name', 'alias_name')
|
110
|
-
result = column.
|
111
|
-
assert_equal '
|
119
|
+
def test_render_sql_alias_name
|
120
|
+
column = Column.new('name', 'alias_name').with_source(OpenStruct.new(id: '__id__'))
|
121
|
+
result = column.render_sql(nil, nil)
|
122
|
+
assert_equal '__id__.name AS alias_name', result.sql
|
112
123
|
end
|
113
124
|
end
|
114
125
|
end
|
data/test/end_to_end_test.rb
CHANGED
@@ -9,9 +9,16 @@ module Qdsl
|
|
9
9
|
Column['first_name'].as(:alias1),
|
10
10
|
Column.new(:last_name).as(:alias2)
|
11
11
|
).from(@clients)
|
12
|
+
|
12
13
|
result = query.render
|
13
14
|
|
14
|
-
assert_sql
|
15
|
+
assert_sql <<-SQL, result.sql
|
16
|
+
SELECT
|
17
|
+
_00.id AS alias0,
|
18
|
+
_00.first_name AS alias1,
|
19
|
+
_00.last_name AS alias2
|
20
|
+
FROM clients AS _00
|
21
|
+
SQL
|
15
22
|
end
|
16
23
|
|
17
24
|
def test_unknown_column
|
data/test/expression_test.rb
CHANGED
@@ -7,15 +7,17 @@ module Qdsl
|
|
7
7
|
from(@clients).
|
8
8
|
where { |t| t.first_name.equals('Richard').and(t.last_name.equals('Cook')) }
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
assert_equal
|
10
|
+
result = query.render
|
11
|
+
|
12
|
+
assert_sql <<-SQL, result.sql
|
13
|
+
SELECT
|
14
|
+
_00.id
|
15
|
+
FROM clients AS _00
|
16
|
+
WHERE (_00.first_name = :_param00) AND (_00.last_name = :_param01)
|
17
|
+
SQL
|
18
|
+
assert_equal 2, result.parameters.size
|
19
|
+
assert_equal 'Richard', result.parameters['_param00']
|
20
|
+
assert_equal 'Cook', result.parameters['_param01']
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_multiple_and
|
@@ -23,16 +25,18 @@ module Qdsl
|
|
23
25
|
from(@clients).
|
24
26
|
where { |t| t.first_name.equals('Richard').and(t.last_name.equals('Cook')).and(t.id.equals('ID')) }
|
25
27
|
|
26
|
-
|
27
|
-
result = query.render(context)
|
28
|
+
result = query.render
|
28
29
|
|
29
|
-
assert_sql
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
assert_equal
|
30
|
+
assert_sql <<-SQL, result.sql
|
31
|
+
SELECT
|
32
|
+
_00.id
|
33
|
+
FROM clients AS _00
|
34
|
+
WHERE (_00.first_name = :_param00) AND (_00.last_name = :_param01) AND (_00.id = :_param02)
|
35
|
+
SQL
|
36
|
+
assert_equal 3, result.parameters.size
|
37
|
+
assert_equal 'Richard', result.parameters['_param00']
|
38
|
+
assert_equal 'Cook', result.parameters['_param01']
|
39
|
+
assert_equal 'ID', result.parameters['_param02']
|
36
40
|
end
|
37
41
|
|
38
42
|
def test_simple_or
|
@@ -40,15 +44,17 @@ module Qdsl
|
|
40
44
|
from(@clients).
|
41
45
|
where { |t| t.first_name.equals('Richard').or(t.last_name.equals('Cook')) }
|
42
46
|
|
43
|
-
|
44
|
-
result = query.render(context)
|
47
|
+
result = query.render
|
45
48
|
|
46
|
-
assert_sql
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
assert_sql <<-SQL, result.sql
|
50
|
+
SELECT
|
51
|
+
_00.id
|
52
|
+
FROM clients AS _00
|
53
|
+
WHERE (_00.first_name = :_param00) OR (_00.last_name = :_param01)
|
54
|
+
SQL
|
55
|
+
assert_equal 2, result.parameters.size
|
56
|
+
assert_equal 'Richard', result.parameters['_param00']
|
57
|
+
assert_equal 'Cook', result.parameters['_param01']
|
52
58
|
end
|
53
59
|
|
54
60
|
def test_multiple_or
|
@@ -56,31 +62,33 @@ module Qdsl
|
|
56
62
|
from(@clients).
|
57
63
|
where { |t| t.first_name.equals('Richard').or(t.last_name.equals('Cook')).or(t.id.equals('ID')) }
|
58
64
|
|
59
|
-
|
60
|
-
result = query.render(context)
|
61
|
-
|
62
|
-
assert_sql 'SELECT _00.id ' +
|
63
|
-
'FROM clients AS _00 ' +
|
64
|
-
'WHERE (_00.first_name = :_param00) OR (_00.last_name = :_param01) OR (_00.id = :_param02)', result
|
65
|
-
assert_equal 3, context.parameters.size
|
66
|
-
assert_equal 'Richard', context.parameters['_param00']
|
67
|
-
assert_equal 'Cook', context.parameters['_param01']
|
68
|
-
assert_equal 'ID', context.parameters['_param02']
|
69
|
-
end
|
65
|
+
result = query.render
|
70
66
|
|
71
|
-
|
72
|
-
|
67
|
+
assert_sql <<-SQL, result.sql
|
68
|
+
SELECT
|
69
|
+
_00.id
|
70
|
+
FROM clients AS _00
|
71
|
+
WHERE (_00.first_name = :_param00) OR (_00.last_name = :_param01) OR (_00.id = :_param02)
|
72
|
+
SQL
|
73
|
+
assert_equal 3, result.parameters.size
|
74
|
+
assert_equal 'Richard', result.parameters['_param00']
|
75
|
+
assert_equal 'Cook', result.parameters['_param01']
|
76
|
+
assert_equal 'ID', result.parameters['_param02']
|
73
77
|
end
|
74
78
|
|
75
79
|
def test_multiple_or2
|
76
80
|
query = Qdsl::select(:id).
|
77
81
|
from(@clients).
|
78
82
|
where { |t| big_or([:value0, :value1, :value2, :value3], t) }
|
83
|
+
|
79
84
|
result = query.render
|
80
85
|
|
81
|
-
assert_sql
|
82
|
-
|
83
|
-
|
86
|
+
assert_sql <<-SQL, result.sql
|
87
|
+
SELECT
|
88
|
+
_00.id
|
89
|
+
FROM clients AS _00
|
90
|
+
WHERE (_00.value0 = TRUE) OR (_00.value1 = TRUE) OR (_00.value2 = TRUE) OR (_00.value3 = TRUE)
|
91
|
+
SQL
|
84
92
|
end
|
85
93
|
|
86
94
|
def test_boolean
|
@@ -88,20 +96,28 @@ module Qdsl
|
|
88
96
|
from(@clients).
|
89
97
|
where { |t| t.first_name.equals('Richard').or(t.last_name.equals('Cook')).and(t.id.equals('ID').or(t.id.equals('OTHER_ID'))) }
|
90
98
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
assert_equal
|
103
|
-
assert_equal '
|
104
|
-
assert_equal '
|
99
|
+
result = query.render
|
100
|
+
|
101
|
+
assert_sql <<-SQL, result.sql
|
102
|
+
SELECT
|
103
|
+
_00.id
|
104
|
+
FROM clients AS _00
|
105
|
+
WHERE ((_00.first_name = :_param00)
|
106
|
+
OR (_00.last_name = :_param01))
|
107
|
+
AND ((_00.id = :_param02)
|
108
|
+
OR (_00.id = :_param03))
|
109
|
+
SQL
|
110
|
+
assert_equal 4, result.parameters.size
|
111
|
+
assert_equal 'Richard', result.parameters['_param00']
|
112
|
+
assert_equal 'Cook', result.parameters['_param01']
|
113
|
+
assert_equal 'ID', result.parameters['_param02']
|
114
|
+
assert_equal 'OTHER_ID', result.parameters['_param03']
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def big_or(ids, t)
|
120
|
+
ids.collect { |x| t[x].equals(true) }.inject { |acc, x| acc.or(x) }
|
105
121
|
end
|
106
122
|
end
|
107
123
|
end
|
data/test/inner_join_test.rb
CHANGED
@@ -6,20 +6,32 @@ module Qdsl
|
|
6
6
|
query = Qdsl::select { |t0, t1| [t0.id, t1.member_id] }.
|
7
7
|
from(@clients).
|
8
8
|
inner_join(@members).on { |f, j| f.id.equals(j.id) }
|
9
|
+
|
9
10
|
result = query.render
|
10
11
|
|
11
|
-
assert_sql
|
12
|
-
|
13
|
-
|
12
|
+
assert_sql <<-SQL, result.sql
|
13
|
+
SELECT
|
14
|
+
_00.id,
|
15
|
+
_01.member_id
|
16
|
+
FROM clients AS _00
|
17
|
+
INNER JOIN members AS _01 ON _00.id = _01.id
|
18
|
+
SQL
|
14
19
|
end
|
15
20
|
|
16
21
|
def test_inner_join
|
17
22
|
query = Qdsl::select { |t0, t1| [t0.id, t1.member_id] }.
|
18
23
|
from(@clients).
|
19
24
|
inner_join(@members).on { |t0, t1| t0.id.equals(t1.first_name) }
|
25
|
+
|
20
26
|
result = query.render
|
21
27
|
|
22
|
-
assert_sql
|
28
|
+
assert_sql <<-SQL, result.sql
|
29
|
+
SELECT
|
30
|
+
_00.id,
|
31
|
+
_01.member_id
|
32
|
+
FROM clients AS _00
|
33
|
+
INNER JOIN members AS _01 ON _00.id = _01.first_name
|
34
|
+
SQL
|
23
35
|
end
|
24
36
|
|
25
37
|
def test_multiple_inner_joins
|
@@ -27,23 +39,34 @@ module Qdsl
|
|
27
39
|
from(@clients).
|
28
40
|
inner_join(@members).on { |f, j| f.id.equals(j.first_name) }.
|
29
41
|
inner_join(@colours).on { |f, j| f.first_name.equals(j.name) }
|
42
|
+
|
30
43
|
result = query.render
|
31
44
|
|
32
|
-
assert_sql
|
33
|
-
|
34
|
-
|
35
|
-
|
45
|
+
assert_sql <<-SQL, result.sql
|
46
|
+
SELECT
|
47
|
+
_00.id,
|
48
|
+
_01.member_id,
|
49
|
+
_02.name
|
50
|
+
FROM clients AS _00
|
51
|
+
INNER JOIN members AS _01 ON _00.id = _01.first_name
|
52
|
+
INNER JOIN colours AS _02 ON _00.first_name = _02.name
|
53
|
+
SQL
|
36
54
|
end
|
37
55
|
|
38
56
|
def test_multiple_inner_join_same
|
39
57
|
query = Qdsl::select { |t0, t1| [t0.id, t1.id] }.
|
40
58
|
from(@clients).
|
41
59
|
inner_join(@clients).on { |f, j| f.id.equals(j.first_name) }
|
60
|
+
|
42
61
|
result = query.render
|
43
62
|
|
44
|
-
assert_sql
|
45
|
-
|
46
|
-
|
63
|
+
assert_sql <<-SQL, result.sql
|
64
|
+
SELECT
|
65
|
+
_00.id,
|
66
|
+
_01.id
|
67
|
+
FROM clients AS _00
|
68
|
+
INNER JOIN clients AS _01 ON _00.id = _01.first_name
|
69
|
+
SQL
|
47
70
|
end
|
48
71
|
|
49
72
|
def test_multiple_inner_join_same_where
|
@@ -52,13 +75,18 @@ module Qdsl
|
|
52
75
|
inner_join(@clients).on { |f, j| f.id.equals(j.first_name) }.
|
53
76
|
inner_join(@clients).on { |f, j| f.id.equals(j.first_name) }.
|
54
77
|
where { |t0, t1, t2| t0.id.equals(t1.id) }
|
78
|
+
|
55
79
|
result = query.render
|
56
80
|
|
57
|
-
assert_sql
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
81
|
+
assert_sql <<-SQL, result.sql
|
82
|
+
SELECT
|
83
|
+
_00.id,
|
84
|
+
_01.id
|
85
|
+
FROM clients AS _00
|
86
|
+
INNER JOIN clients AS _01 ON _00.id = _01.first_name
|
87
|
+
INNER JOIN clients AS _02 ON _00.id = _02.first_name
|
88
|
+
WHERE _00.id = _01.id
|
89
|
+
SQL
|
62
90
|
end
|
63
91
|
end
|
64
92
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative 'minitest_helper'
|
2
|
+
|
3
|
+
module Qdsl
|
4
|
+
class IsTrueTest < QueryTest
|
5
|
+
def test_explicit
|
6
|
+
query = Qdsl::select(:id).from(@clients).where { |t| t.id.true? }
|
7
|
+
result = query.render
|
8
|
+
|
9
|
+
assert_sql <<-SQL, result.sql
|
10
|
+
SELECT
|
11
|
+
_00.id
|
12
|
+
FROM clients AS _00
|
13
|
+
WHERE _00.id
|
14
|
+
SQL
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_implicit_method
|
18
|
+
query = Qdsl::select(:id).from(@clients).where { |t| t.id }
|
19
|
+
result = query.render
|
20
|
+
|
21
|
+
assert_sql <<-SQL, result.sql
|
22
|
+
SELECT
|
23
|
+
_00.id
|
24
|
+
FROM clients AS _00
|
25
|
+
WHERE _00.id
|
26
|
+
SQL
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_implicit_string
|
30
|
+
query = Qdsl::select(:id).from(@clients).where { |t| t['id'] }
|
31
|
+
result = query.render
|
32
|
+
|
33
|
+
assert_sql <<-SQL, result.sql
|
34
|
+
SELECT
|
35
|
+
_00.id
|
36
|
+
FROM clients AS _00
|
37
|
+
WHERE _00.id
|
38
|
+
SQL
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_implicit_symbol
|
42
|
+
query = Qdsl::select(:id).from(@clients).where { |t| t[:id] }
|
43
|
+
result = query.render
|
44
|
+
|
45
|
+
assert_sql <<-SQL, result.sql
|
46
|
+
SELECT
|
47
|
+
_00.id
|
48
|
+
FROM clients AS _00
|
49
|
+
WHERE _00.id
|
50
|
+
SQL
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_operators
|
54
|
+
query = Qdsl::select(:id).from(@clients).where do |t|
|
55
|
+
t.id.true?.and(t.id.true?.or(t.id.true?))
|
56
|
+
end
|
57
|
+
result = query.render
|
58
|
+
|
59
|
+
assert_sql <<-SQL, result.sql
|
60
|
+
SELECT
|
61
|
+
_00.id
|
62
|
+
FROM clients AS _00
|
63
|
+
WHERE (_00.id) AND ((_00.id) OR (_00.id))
|
64
|
+
SQL
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
data/test/minitest_helper.rb
CHANGED
data/test/query_test.rb
CHANGED
data/test/select_test.rb
CHANGED
@@ -5,91 +5,165 @@ module Qdsl
|
|
5
5
|
def test_single_table_select_single_column_string
|
6
6
|
query = Qdsl::select('id').from(@clients)
|
7
7
|
result = query.render
|
8
|
-
assert_sql 'SELECT _00.id FROM clients AS _00', result
|
8
|
+
assert_sql 'SELECT _00.id FROM clients AS _00', result.sql
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_single_table_select_single_column_symbol
|
12
12
|
query = Qdsl::select(:id).from(@clients)
|
13
13
|
result = query.render
|
14
|
-
assert_sql 'SELECT _00.id FROM clients AS _00', result
|
14
|
+
assert_sql 'SELECT _00.id FROM clients AS _00', result.sql
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_single_table_select_single_column_method
|
18
18
|
query = Qdsl::select { |t| t.id }.from(@clients)
|
19
19
|
result = query.render
|
20
|
-
assert_sql 'SELECT _00.id FROM clients AS _00', result
|
20
|
+
assert_sql 'SELECT _00.id FROM clients AS _00', result.sql
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_single_table_select_single_column_name_string
|
24
24
|
query = Qdsl::select { |t| t['id'] }.from(@clients)
|
25
25
|
result = query.render
|
26
|
-
assert_sql 'SELECT _00.id FROM clients AS _00', result
|
26
|
+
assert_sql 'SELECT _00.id FROM clients AS _00', result.sql
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_single_table_select_single_column_name_symbol
|
30
30
|
query = Qdsl::select { |t| t[:id] }.from(@clients)
|
31
31
|
result = query.render
|
32
|
-
assert_sql 'SELECT _00.id FROM clients AS _00', result
|
32
|
+
assert_sql 'SELECT _00.id FROM clients AS _00', result.sql
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_single_table_select_two_columns_string
|
36
36
|
query = Qdsl::select('id', 'first_name').from(@clients)
|
37
37
|
result = query.render
|
38
|
-
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result
|
38
|
+
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result.sql
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_single_table_select_two_columns_symbol
|
42
42
|
query = Qdsl::select(:id, :first_name).from(@clients)
|
43
43
|
result = query.render
|
44
|
-
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result
|
44
|
+
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result.sql
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_single_table_select_two_columns_method
|
48
48
|
query = Qdsl::select { |t| [t.id, t.first_name] }.from(@clients)
|
49
49
|
result = query.render
|
50
|
-
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result
|
50
|
+
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result.sql
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_single_table_select_two_columns_name_string
|
54
54
|
query = Qdsl::select { |t| [t['id'], t['first_name']] }.from(@clients)
|
55
55
|
result = query.render
|
56
|
-
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result
|
56
|
+
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result.sql
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_single_table_select_two_columns_name_symbol
|
60
60
|
query = Qdsl::select { |t| [t[:id], t[:first_name]] }.from(@clients)
|
61
61
|
result = query.render
|
62
|
-
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result
|
62
|
+
assert_sql 'SELECT _00.id, _00.first_name FROM clients AS _00', result.sql
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_two_tables_select_single_column_string
|
66
66
|
query = Qdsl::select('id').from(@clients).inner_join(@members).on { |t0, t1| t0.id.equals(t1.id) }
|
67
67
|
result = query.render
|
68
|
-
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result
|
68
|
+
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result.sql
|
69
69
|
end
|
70
70
|
|
71
71
|
def test_two_tables_select_single_column_symbol
|
72
72
|
query = Qdsl::select(:id).from(@clients).inner_join(@members).on { |t0, t1| t0.id.equals(t1.id) }
|
73
73
|
result = query.render
|
74
|
-
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result
|
74
|
+
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result.sql
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_two_tables_select_single_column_method
|
78
78
|
query = Qdsl::select { |t0, t1| t0.id }.from(@clients).inner_join(@members).on { |t0, t1| t0.id.equals(t1.id) }
|
79
79
|
result = query.render
|
80
|
-
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result
|
80
|
+
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result.sql
|
81
81
|
end
|
82
82
|
|
83
83
|
def test_two_tables_select_single_column_name_string
|
84
84
|
query = Qdsl::select { |t0, t1| t0['id'] }.from(@clients).inner_join(@members).on { |t0, t1| t0.id.equals(t1.id) }
|
85
85
|
result = query.render
|
86
|
-
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result
|
86
|
+
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result.sql
|
87
87
|
end
|
88
88
|
|
89
89
|
def test_two_tables_select_single_column_name_symbol
|
90
90
|
query = Qdsl::select { |t0, t1| t0[:id] }.from(@clients).inner_join(@members).on { |t0, t1| t0.id.equals(t1.id) }
|
91
91
|
result = query.render
|
92
|
-
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result
|
92
|
+
assert_sql 'SELECT _00.id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.id', result.sql
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_limit
|
96
|
+
query = Qdsl::select(:id).from(@clients).limit(5)
|
97
|
+
result = query.render
|
98
|
+
|
99
|
+
assert_sql <<-SQL, result.sql
|
100
|
+
SELECT _00.id
|
101
|
+
FROM clients AS _00
|
102
|
+
LIMIT 5
|
103
|
+
SQL
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_order_by_string
|
107
|
+
query = Qdsl::select(:id).from(@clients).limit(5).order_by('first_name')
|
108
|
+
result = query.render
|
109
|
+
|
110
|
+
assert_sql <<-SQL, result.sql
|
111
|
+
SELECT _00.id
|
112
|
+
FROM clients AS _00
|
113
|
+
ORDER BY _00.first_name
|
114
|
+
LIMIT 5
|
115
|
+
SQL
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_order_by_symbol
|
119
|
+
query = Qdsl::select(:id).from(@clients).limit(5).order_by(:first_name)
|
120
|
+
result = query.render
|
121
|
+
|
122
|
+
assert_sql <<-SQL, result.sql
|
123
|
+
SELECT _00.id
|
124
|
+
FROM clients AS _00
|
125
|
+
ORDER BY _00.first_name
|
126
|
+
LIMIT 5
|
127
|
+
SQL
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_order_by_method
|
131
|
+
query = Qdsl::select(:id).from(@clients).limit(5).order_by { |t| t.first_name }
|
132
|
+
result = query.render
|
133
|
+
|
134
|
+
assert_sql <<-SQL, result.sql
|
135
|
+
SELECT
|
136
|
+
_00.id
|
137
|
+
FROM clients AS _00
|
138
|
+
ORDER BY _00.first_name
|
139
|
+
LIMIT 5
|
140
|
+
SQL
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_call
|
144
|
+
query = Qdsl::select { |t| [t.first_name, t._call('AGE', t.birthdate).as(:age)] }.
|
145
|
+
from(@clients)
|
146
|
+
result = query.render
|
147
|
+
|
148
|
+
assert_sql <<-SQL, result.sql
|
149
|
+
SELECT
|
150
|
+
_00.first_name,
|
151
|
+
AGE(_00.birthdate) AS age
|
152
|
+
FROM clients AS _00
|
153
|
+
SQL
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_formatcall
|
157
|
+
query = Qdsl::select { |t| [t.first_name, t._formatcall('EXTRACT(year FROM %1)', t._call('AGE', t.birthdate)).as(:age)] }.
|
158
|
+
from(@clients)
|
159
|
+
result = query.render
|
160
|
+
|
161
|
+
assert_sql <<-SQL, result.sql
|
162
|
+
SELECT
|
163
|
+
_00.first_name,
|
164
|
+
EXTRACT(year FROM AGE(_00.birthdate)) AS age
|
165
|
+
FROM clients AS _00
|
166
|
+
SQL
|
93
167
|
end
|
94
168
|
end
|
95
169
|
end
|