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.
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 test_render_name_only
103
- column = Column.new('name')
104
- result = column.render(Context.new, 'id')
105
- assert_equal 'id.name', result
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 test_render_alias_name
109
- column = Column.new('name', 'alias_name')
110
- result = column.render(Context.new, 'id')
111
- assert_equal 'id.name AS alias_name', result
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
@@ -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 'SELECT _00.id AS alias0, _00.first_name AS alias1, _00.last_name AS alias2 FROM clients AS _00', result
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
@@ -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
- context = Context.new
11
- result = query.render(context)
12
-
13
- assert_sql 'SELECT _00.id ' +
14
- 'FROM clients AS _00 ' +
15
- 'WHERE (_00.first_name = :_param00) AND (_00.last_name = :_param01)', result
16
- assert_equal 2, context.parameters.size
17
- assert_equal 'Richard', context.parameters['_param00']
18
- assert_equal 'Cook', context.parameters['_param01']
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
- context = Context.new
27
- result = query.render(context)
28
+ result = query.render
28
29
 
29
- assert_sql 'SELECT _00.id ' +
30
- 'FROM clients AS _00 ' +
31
- 'WHERE (_00.first_name = :_param00) AND (_00.last_name = :_param01) AND (_00.id = :_param02)', result
32
- assert_equal 3, context.parameters.size
33
- assert_equal 'Richard', context.parameters['_param00']
34
- assert_equal 'Cook', context.parameters['_param01']
35
- assert_equal 'ID', context.parameters['_param02']
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
- context = Context.new
44
- result = query.render(context)
47
+ result = query.render
45
48
 
46
- assert_sql 'SELECT _00.id ' +
47
- 'FROM clients AS _00 ' +
48
- 'WHERE (_00.first_name = :_param00) OR (_00.last_name = :_param01)', result
49
- assert_equal 2, context.parameters.size
50
- assert_equal 'Richard', context.parameters['_param00']
51
- assert_equal 'Cook', context.parameters['_param01']
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
- context = Context.new
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
- def big_or(ids, t)
72
- ids.collect { |x| t[x].equals(true) }.inject { |acc, x| acc.or(x) }
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 'SELECT _00.id ' +
82
- 'FROM clients AS _00 ' +
83
- 'WHERE (_00.value0 = TRUE) OR (_00.value1 = TRUE) OR (_00.value2 = TRUE) OR (_00.value3 = TRUE)', result
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
- context = Context.new
92
- result = query.render(context)
93
-
94
- assert_sql 'SELECT _00.id ' +
95
- 'FROM clients AS _00 ' +
96
- 'WHERE ((_00.first_name = :_param00) OR ' +
97
- '(_00.last_name = :_param01)) ' +
98
- 'AND ((_00.id = :_param02) OR ' +
99
- '(_00.id = :_param03))', result
100
- assert_equal 4, context.parameters.size
101
- assert_equal 'Richard', context.parameters['_param00']
102
- assert_equal 'Cook', context.parameters['_param01']
103
- assert_equal 'ID', context.parameters['_param02']
104
- assert_equal 'OTHER_ID', context.parameters['_param03']
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
@@ -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 'SELECT _00.id, _01.member_id ' +
12
- 'FROM clients AS _00 ' +
13
- 'INNER JOIN members AS _01 ON _00.id = _01.id', result
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 'SELECT _00.id, _01.member_id FROM clients AS _00 INNER JOIN members AS _01 ON _00.id = _01.first_name', result
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 'SELECT _00.id, _01.member_id, _02.name ' +
33
- 'FROM clients AS _00 ' +
34
- 'INNER JOIN members AS _01 ON _00.id = _01.first_name ' +
35
- 'INNER JOIN colours AS _02 ON _00.first_name = _02.name', result
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 'SELECT _00.id, _01.id FROM ' +
45
- 'clients AS _00 ' +
46
- 'INNER JOIN clients AS _01 ON _00.id = _01.first_name', result
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 'SELECT _00.id, _01.id FROM ' +
58
- 'clients AS _00 ' +
59
- 'INNER JOIN clients AS _01 ON _00.id = _01.first_name ' +
60
- 'INNER JOIN clients AS _02 ON _00.id = _02.first_name ' +
61
- 'WHERE _00.id = _01.id', result
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
+
@@ -4,3 +4,5 @@ require 'qdsl'
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/pride'
6
6
 
7
+ require_relative 'query_test'
8
+
data/test/query_test.rb CHANGED
@@ -8,6 +8,7 @@ module Qdsl
8
8
  :id,
9
9
  :first_name,
10
10
  :last_name,
11
+ :birthdate,
11
12
  :value0,
12
13
  :value1,
13
14
  :value2,
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