qdsl 0.0.2 → 0.0.3

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