arel 6.0.0.beta2 → 6.0.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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +1 -1
  3. data/README.markdown +5 -5
  4. data/lib/arel.rb +1 -1
  5. data/lib/arel/collectors/sql_string.rb +7 -1
  6. data/lib/arel/expressions.rb +5 -4
  7. data/lib/arel/nodes.rb +1 -0
  8. data/lib/arel/nodes/bind_param.rb +6 -0
  9. data/lib/arel/nodes/sql_literal.rb +0 -3
  10. data/lib/arel/predications.rb +2 -2
  11. data/lib/arel/visitors/depth_first.rb +6 -0
  12. data/lib/arel/visitors/oracle.rb +4 -0
  13. data/lib/arel/visitors/postgresql.rb +4 -0
  14. data/lib/arel/visitors/reduce.rb +4 -4
  15. data/lib/arel/visitors/to_sql.rb +3 -2
  16. data/lib/arel/visitors/visitor.rb +15 -15
  17. metadata +26 -69
  18. data/.gitignore +0 -9
  19. data/.travis.yml +0 -18
  20. data/Gemfile +0 -5
  21. data/Rakefile +0 -15
  22. data/arel.gemspec +0 -24
  23. data/test/attributes/test_attribute.rb +0 -910
  24. data/test/collectors/test_bind_collector.rb +0 -70
  25. data/test/collectors/test_sql_string.rb +0 -38
  26. data/test/helper.rb +0 -22
  27. data/test/nodes/test_and.rb +0 -20
  28. data/test/nodes/test_as.rb +0 -34
  29. data/test/nodes/test_ascending.rb +0 -44
  30. data/test/nodes/test_bin.rb +0 -33
  31. data/test/nodes/test_binary.rb +0 -26
  32. data/test/nodes/test_count.rb +0 -33
  33. data/test/nodes/test_delete_statement.rb +0 -34
  34. data/test/nodes/test_descending.rb +0 -44
  35. data/test/nodes/test_distinct.rb +0 -20
  36. data/test/nodes/test_equality.rb +0 -84
  37. data/test/nodes/test_extract.rb +0 -41
  38. data/test/nodes/test_false.rb +0 -20
  39. data/test/nodes/test_grouping.rb +0 -25
  40. data/test/nodes/test_infix_operation.rb +0 -40
  41. data/test/nodes/test_insert_statement.rb +0 -42
  42. data/test/nodes/test_named_function.rb +0 -46
  43. data/test/nodes/test_node.rb +0 -39
  44. data/test/nodes/test_not.rb +0 -29
  45. data/test/nodes/test_or.rb +0 -34
  46. data/test/nodes/test_over.rb +0 -67
  47. data/test/nodes/test_select_core.rb +0 -69
  48. data/test/nodes/test_select_statement.rb +0 -49
  49. data/test/nodes/test_sql_literal.rb +0 -73
  50. data/test/nodes/test_sum.rb +0 -24
  51. data/test/nodes/test_table_alias.rb +0 -36
  52. data/test/nodes/test_true.rb +0 -21
  53. data/test/nodes/test_update_statement.rb +0 -58
  54. data/test/nodes/test_window.rb +0 -79
  55. data/test/support/fake_record.rb +0 -135
  56. data/test/test_attributes.rb +0 -66
  57. data/test/test_crud.rb +0 -63
  58. data/test/test_delete_manager.rb +0 -42
  59. data/test/test_factory_methods.rb +0 -44
  60. data/test/test_insert_manager.rb +0 -171
  61. data/test/test_select_manager.rb +0 -1181
  62. data/test/test_table.rb +0 -253
  63. data/test/test_update_manager.rb +0 -124
  64. data/test/visitors/test_bind_visitor.rb +0 -60
  65. data/test/visitors/test_depth_first.rb +0 -258
  66. data/test/visitors/test_dispatch_contamination.rb +0 -22
  67. data/test/visitors/test_dot.rb +0 -76
  68. data/test/visitors/test_ibm_db.rb +0 -33
  69. data/test/visitors/test_informix.rb +0 -58
  70. data/test/visitors/test_mssql.rb +0 -70
  71. data/test/visitors/test_mysql.rb +0 -60
  72. data/test/visitors/test_oracle.rb +0 -170
  73. data/test/visitors/test_postgres.rb +0 -122
  74. data/test/visitors/test_sqlite.rb +0 -23
  75. data/test/visitors/test_to_sql.rb +0 -598
@@ -1,41 +0,0 @@
1
- require 'helper'
2
-
3
- describe Arel::Nodes::Extract do
4
- it "should extract field" do
5
- table = Arel::Table.new :users
6
- table[:timestamp].extract('date').to_sql.must_be_like %{
7
- EXTRACT(DATE FROM "users"."timestamp")
8
- }
9
- end
10
-
11
- describe "as" do
12
- it 'should alias the extract' do
13
- table = Arel::Table.new :users
14
- table[:timestamp].extract('date').as('foo').to_sql.must_be_like %{
15
- EXTRACT(DATE FROM "users"."timestamp") AS foo
16
- }
17
- end
18
-
19
- it 'should not mutate the extract' do
20
- table = Arel::Table.new :users
21
- extract = table[:timestamp].extract('date')
22
- before = extract.dup
23
- extract.as('foo')
24
- assert_equal extract, before
25
- end
26
- end
27
-
28
- describe 'equality' do
29
- it 'is equal with equal ivars' do
30
- table = Arel::Table.new :users
31
- array = [table[:attr].extract('foo'), table[:attr].extract('foo')]
32
- assert_equal 1, array.uniq.size
33
- end
34
-
35
- it 'is not equal with different ivars' do
36
- table = Arel::Table.new :users
37
- array = [table[:attr].extract('foo'), table[:attr].extract('bar')]
38
- assert_equal 2, array.uniq.size
39
- end
40
- end
41
- end
@@ -1,20 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- describe 'False' do
6
- describe 'equality' do
7
- it 'is equal to other false nodes' do
8
- array = [False.new, False.new]
9
- assert_equal 1, array.uniq.size
10
- end
11
-
12
- it 'is not equal with other nodes' do
13
- array = [False.new, Node.new]
14
- assert_equal 2, array.uniq.size
15
- end
16
- end
17
- end
18
- end
19
- end
20
-
@@ -1,25 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- describe 'Grouping' do
6
- it 'should create Equality nodes' do
7
- grouping = Grouping.new(Nodes.build_quoted('foo'))
8
- grouping.eq('foo').to_sql.must_be_like %q{('foo') = 'foo'}
9
- end
10
-
11
- describe 'equality' do
12
- it 'is equal with equal ivars' do
13
- array = [Grouping.new('foo'), Grouping.new('foo')]
14
- assert_equal 1, array.uniq.size
15
- end
16
-
17
- it 'is not equal with different ivars' do
18
- array = [Grouping.new('foo'), Grouping.new('bar')]
19
- assert_equal 2, array.uniq.size
20
- end
21
- end
22
- end
23
- end
24
- end
25
-
@@ -1,40 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- class TestInfixOperation < Minitest::Test
6
- def test_construct
7
- operation = InfixOperation.new :+, 1, 2
8
- assert_equal :+, operation.operator
9
- assert_equal 1, operation.left
10
- assert_equal 2, operation.right
11
- end
12
-
13
- def test_operation_alias
14
- operation = InfixOperation.new :+, 1, 2
15
- aliaz = operation.as('zomg')
16
- assert_kind_of As, aliaz
17
- assert_equal operation, aliaz.left
18
- assert_equal 'zomg', aliaz.right
19
- end
20
-
21
- def test_operation_ordering
22
- operation = InfixOperation.new :+, 1, 2
23
- ordering = operation.desc
24
- assert_kind_of Descending, ordering
25
- assert_equal operation, ordering.expr
26
- assert ordering.descending?
27
- end
28
-
29
- def test_equality_with_same_ivars
30
- array = [InfixOperation.new(:+, 1, 2), InfixOperation.new(:+, 1, 2)]
31
- assert_equal 1, array.uniq.size
32
- end
33
-
34
- def test_inequality_with_different_ivars
35
- array = [InfixOperation.new(:+, 1, 2), InfixOperation.new(:+, 1, 3)]
36
- assert_equal 2, array.uniq.size
37
- end
38
- end
39
- end
40
- end
@@ -1,42 +0,0 @@
1
- require 'helper'
2
-
3
- describe Arel::Nodes::InsertStatement do
4
- describe "#clone" do
5
- it "clones columns and values" do
6
- statement = Arel::Nodes::InsertStatement.new
7
- statement.columns = %w[a b c]
8
- statement.values = %w[x y z]
9
-
10
- dolly = statement.clone
11
- dolly.columns.must_equal statement.columns
12
- dolly.values.must_equal statement.values
13
-
14
- dolly.columns.wont_be_same_as statement.columns
15
- dolly.values.wont_be_same_as statement.values
16
- end
17
- end
18
-
19
- describe 'equality' do
20
- it 'is equal with equal ivars' do
21
- statement1 = Arel::Nodes::InsertStatement.new
22
- statement1.columns = %w[a b c]
23
- statement1.values = %w[x y z]
24
- statement2 = Arel::Nodes::InsertStatement.new
25
- statement2.columns = %w[a b c]
26
- statement2.values = %w[x y z]
27
- array = [statement1, statement2]
28
- assert_equal 1, array.uniq.size
29
- end
30
-
31
- it 'is not equal with different ivars' do
32
- statement1 = Arel::Nodes::InsertStatement.new
33
- statement1.columns = %w[a b c]
34
- statement1.values = %w[x y z]
35
- statement2 = Arel::Nodes::InsertStatement.new
36
- statement2.columns = %w[a b c]
37
- statement2.values = %w[1 2 3]
38
- array = [statement1, statement2]
39
- assert_equal 2, array.uniq.size
40
- end
41
- end
42
- end
@@ -1,46 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- class TestNamedFunction < Minitest::Test
6
- def test_construct
7
- function = NamedFunction.new 'omg', 'zomg'
8
- assert_equal 'omg', function.name
9
- assert_equal 'zomg', function.expressions
10
- end
11
-
12
- def test_function_alias
13
- function = NamedFunction.new 'omg', 'zomg'
14
- function = function.as('wth')
15
- assert_equal 'omg', function.name
16
- assert_equal 'zomg', function.expressions
17
- assert_kind_of SqlLiteral, function.alias
18
- assert_equal 'wth', function.alias
19
- end
20
-
21
- def test_construct_with_alias
22
- function = NamedFunction.new 'omg', 'zomg', 'wth'
23
- assert_equal 'omg', function.name
24
- assert_equal 'zomg', function.expressions
25
- assert_kind_of SqlLiteral, function.alias
26
- assert_equal 'wth', function.alias
27
- end
28
-
29
- def test_equality_with_same_ivars
30
- array = [
31
- NamedFunction.new('omg', 'zomg', 'wth'),
32
- NamedFunction.new('omg', 'zomg', 'wth')
33
- ]
34
- assert_equal 1, array.uniq.size
35
- end
36
-
37
- def test_inequality_with_different_ivars
38
- array = [
39
- NamedFunction.new('omg', 'zomg', 'wth'),
40
- NamedFunction.new('zomg', 'zomg', 'wth')
41
- ]
42
- assert_equal 2, array.uniq.size
43
- end
44
- end
45
- end
46
- end
@@ -1,39 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- class TestNode < Minitest::Test
5
- def test_includes_factory_methods
6
- assert Node.new.respond_to?(:create_join)
7
- end
8
-
9
- def test_all_nodes_are_nodes
10
- Nodes.constants.map { |k|
11
- Nodes.const_get(k)
12
- }.grep(Class).each do |klass|
13
- next if Nodes::SqlLiteral == klass
14
- next if Nodes::BindParam == klass
15
- next if klass.name =~ /^Arel::Nodes::Test/
16
- assert klass.ancestors.include?(Nodes::Node), klass.name
17
- end
18
- end
19
-
20
- def test_each
21
- list = []
22
- node = Nodes::Node.new
23
- node.each { |n| list << n }
24
- assert_equal [node], list
25
- end
26
-
27
- def test_generator
28
- list = []
29
- node = Nodes::Node.new
30
- node.each.each { |n| list << n }
31
- assert_equal [node], list
32
- end
33
-
34
- def test_enumerable
35
- node = Nodes::Node.new
36
- assert_kind_of Enumerable, node
37
- end
38
- end
39
- end
@@ -1,29 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- describe 'not' do
6
- describe '#not' do
7
- it 'makes a NOT node' do
8
- attr = Table.new(:users)[:id]
9
- expr = attr.eq(10)
10
- node = expr.not
11
- node.must_be_kind_of Not
12
- node.expr.must_equal expr
13
- end
14
- end
15
-
16
- describe 'equality' do
17
- it 'is equal with equal ivars' do
18
- array = [Not.new('foo'), Not.new('foo')]
19
- assert_equal 1, array.uniq.size
20
- end
21
-
22
- it 'is not equal with different ivars' do
23
- array = [Not.new('foo'), Not.new('baz')]
24
- assert_equal 2, array.uniq.size
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,34 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- describe 'or' do
6
- describe '#or' do
7
- it 'makes an OR node' do
8
- attr = Table.new(:users)[:id]
9
- left = attr.eq(10)
10
- right = attr.eq(11)
11
- node = left.or right
12
- node.expr.left.must_equal left
13
- node.expr.right.must_equal right
14
-
15
- oror = node.or(right)
16
- oror.expr.left.must_equal node
17
- oror.expr.right.must_equal right
18
- end
19
- end
20
-
21
- describe 'equality' do
22
- it 'is equal with equal ivars' do
23
- array = [Or.new('foo', 'bar'), Or.new('foo', 'bar')]
24
- assert_equal 1, array.uniq.size
25
- end
26
-
27
- it 'is not equal with different ivars' do
28
- array = [Or.new('foo', 'bar'), Or.new('foo', 'baz')]
29
- assert_equal 2, array.uniq.size
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,67 +0,0 @@
1
- require 'helper'
2
-
3
- describe Arel::Nodes::Over do
4
- describe 'as' do
5
- it 'should alias the expression' do
6
- table = Arel::Table.new :users
7
- table[:id].count.over.as('foo').to_sql.must_be_like %{
8
- COUNT("users"."id") OVER () AS foo
9
- }
10
- end
11
- end
12
-
13
- describe 'with literal' do
14
- it 'should reference the window definition by name' do
15
- table = Arel::Table.new :users
16
- table[:id].count.over('foo').to_sql.must_be_like %{
17
- COUNT("users"."id") OVER "foo"
18
- }
19
- end
20
- end
21
-
22
- describe 'with SQL literal' do
23
- it 'should reference the window definition by name' do
24
- table = Arel::Table.new :users
25
- table[:id].count.over(Arel.sql('foo')).to_sql.must_be_like %{
26
- COUNT("users"."id") OVER foo
27
- }
28
- end
29
- end
30
-
31
- describe 'with no expression' do
32
- it 'should use empty definition' do
33
- table = Arel::Table.new :users
34
- table[:id].count.over.to_sql.must_be_like %{
35
- COUNT("users"."id") OVER ()
36
- }
37
- end
38
- end
39
-
40
- describe 'with expression' do
41
- it 'should use definition in sub-expression' do
42
- table = Arel::Table.new :users
43
- window = Arel::Nodes::Window.new.order(table['foo'])
44
- table[:id].count.over(window).to_sql.must_be_like %{
45
- COUNT("users"."id") OVER (ORDER BY \"users\".\"foo\")
46
- }
47
- end
48
- end
49
-
50
- describe 'equality' do
51
- it 'is equal with equal ivars' do
52
- array = [
53
- Arel::Nodes::Over.new('foo', 'bar'),
54
- Arel::Nodes::Over.new('foo', 'bar')
55
- ]
56
- assert_equal 1, array.uniq.size
57
- end
58
-
59
- it 'is not equal with different ivars' do
60
- array = [
61
- Arel::Nodes::Over.new('foo', 'bar'),
62
- Arel::Nodes::Over.new('foo', 'baz')
63
- ]
64
- assert_equal 2, array.uniq.size
65
- end
66
- end
67
- end
@@ -1,69 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- module Nodes
5
- class TestSelectCore < Minitest::Test
6
- def test_clone
7
- core = Arel::Nodes::SelectCore.new
8
- core.froms = %w[a b c]
9
- core.projections = %w[d e f]
10
- core.wheres = %w[g h i]
11
-
12
- dolly = core.clone
13
-
14
- assert_equal core.froms, dolly.froms
15
- assert_equal core.projections, dolly.projections
16
- assert_equal core.wheres, dolly.wheres
17
-
18
- refute_same core.froms, dolly.froms
19
- refute_same core.projections, dolly.projections
20
- refute_same core.wheres, dolly.wheres
21
- end
22
-
23
- def test_set_quantifier
24
- core = Arel::Nodes::SelectCore.new
25
- core.set_quantifier = Arel::Nodes::Distinct.new
26
- viz = Arel::Visitors::ToSql.new Table.engine.connection_pool
27
- assert_match 'DISTINCT', viz.accept(core, Collectors::SQLString.new).value
28
- end
29
-
30
- def test_equality_with_same_ivars
31
- core1 = SelectCore.new
32
- core1.froms = %w[a b c]
33
- core1.projections = %w[d e f]
34
- core1.wheres = %w[g h i]
35
- core1.groups = %w[j k l]
36
- core1.windows = %w[m n o]
37
- core1.having = %w[p q r]
38
- core2 = SelectCore.new
39
- core2.froms = %w[a b c]
40
- core2.projections = %w[d e f]
41
- core2.wheres = %w[g h i]
42
- core2.groups = %w[j k l]
43
- core2.windows = %w[m n o]
44
- core2.having = %w[p q r]
45
- array = [core1, core2]
46
- assert_equal 1, array.uniq.size
47
- end
48
-
49
- def test_inequality_with_different_ivars
50
- core1 = SelectCore.new
51
- core1.froms = %w[a b c]
52
- core1.projections = %w[d e f]
53
- core1.wheres = %w[g h i]
54
- core1.groups = %w[j k l]
55
- core1.windows = %w[m n o]
56
- core1.having = %w[p q r]
57
- core2 = SelectCore.new
58
- core2.froms = %w[a b c]
59
- core2.projections = %w[d e f]
60
- core2.wheres = %w[g h i]
61
- core2.groups = %w[j k l]
62
- core2.windows = %w[m n o]
63
- core2.having = %w[l o l]
64
- array = [core1, core2]
65
- assert_equal 2, array.uniq.size
66
- end
67
- end
68
- end
69
- end