square-arel 2.0.9.20110222133018

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 (125) hide show
  1. data/.autotest +26 -0
  2. data/History.txt +105 -0
  3. data/MIT-LICENSE.txt +20 -0
  4. data/Manifest.txt +124 -0
  5. data/README.markdown +94 -0
  6. data/Rakefile +20 -0
  7. data/lib/arel.rb +39 -0
  8. data/lib/arel/attributes.rb +20 -0
  9. data/lib/arel/attributes/attribute.rb +18 -0
  10. data/lib/arel/compatibility/wheres.rb +33 -0
  11. data/lib/arel/crud.rb +37 -0
  12. data/lib/arel/delete_manager.rb +18 -0
  13. data/lib/arel/deprecated.rb +4 -0
  14. data/lib/arel/expression.rb +4 -0
  15. data/lib/arel/expressions.rb +23 -0
  16. data/lib/arel/insert_manager.rb +34 -0
  17. data/lib/arel/nodes.rb +53 -0
  18. data/lib/arel/nodes/and.rb +6 -0
  19. data/lib/arel/nodes/as.rb +6 -0
  20. data/lib/arel/nodes/assignment.rb +6 -0
  21. data/lib/arel/nodes/avg.rb +6 -0
  22. data/lib/arel/nodes/between.rb +6 -0
  23. data/lib/arel/nodes/binary.rb +12 -0
  24. data/lib/arel/nodes/count.rb +13 -0
  25. data/lib/arel/nodes/delete_statement.rb +19 -0
  26. data/lib/arel/nodes/does_not_match.rb +6 -0
  27. data/lib/arel/nodes/equality.rb +9 -0
  28. data/lib/arel/nodes/except.rb +7 -0
  29. data/lib/arel/nodes/exists.rb +7 -0
  30. data/lib/arel/nodes/function.rb +18 -0
  31. data/lib/arel/nodes/greater_than.rb +6 -0
  32. data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
  33. data/lib/arel/nodes/group.rb +6 -0
  34. data/lib/arel/nodes/grouping.rb +6 -0
  35. data/lib/arel/nodes/having.rb +6 -0
  36. data/lib/arel/nodes/in.rb +6 -0
  37. data/lib/arel/nodes/inner_join.rb +6 -0
  38. data/lib/arel/nodes/insert_statement.rb +19 -0
  39. data/lib/arel/nodes/intersect.rb +7 -0
  40. data/lib/arel/nodes/join.rb +13 -0
  41. data/lib/arel/nodes/less_than.rb +6 -0
  42. data/lib/arel/nodes/less_than_or_equal.rb +6 -0
  43. data/lib/arel/nodes/limit.rb +7 -0
  44. data/lib/arel/nodes/lock.rb +6 -0
  45. data/lib/arel/nodes/matches.rb +6 -0
  46. data/lib/arel/nodes/max.rb +6 -0
  47. data/lib/arel/nodes/min.rb +6 -0
  48. data/lib/arel/nodes/node.rb +44 -0
  49. data/lib/arel/nodes/not.rb +6 -0
  50. data/lib/arel/nodes/not_equal.rb +6 -0
  51. data/lib/arel/nodes/not_in.rb +6 -0
  52. data/lib/arel/nodes/offset.rb +7 -0
  53. data/lib/arel/nodes/on.rb +6 -0
  54. data/lib/arel/nodes/or.rb +6 -0
  55. data/lib/arel/nodes/ordering.rb +20 -0
  56. data/lib/arel/nodes/outer_join.rb +6 -0
  57. data/lib/arel/nodes/select_core.rb +26 -0
  58. data/lib/arel/nodes/select_statement.rb +22 -0
  59. data/lib/arel/nodes/sql_literal.rb +8 -0
  60. data/lib/arel/nodes/string_join.rb +11 -0
  61. data/lib/arel/nodes/sum.rb +6 -0
  62. data/lib/arel/nodes/table_alias.rb +13 -0
  63. data/lib/arel/nodes/top.rb +6 -0
  64. data/lib/arel/nodes/unary.rb +11 -0
  65. data/lib/arel/nodes/union.rb +7 -0
  66. data/lib/arel/nodes/union_all.rb +7 -0
  67. data/lib/arel/nodes/unqualified_column.rb +16 -0
  68. data/lib/arel/nodes/update_statement.rb +21 -0
  69. data/lib/arel/nodes/values.rb +14 -0
  70. data/lib/arel/predications.rb +183 -0
  71. data/lib/arel/relation.rb +6 -0
  72. data/lib/arel/select_manager.rb +237 -0
  73. data/lib/arel/sql/engine.rb +10 -0
  74. data/lib/arel/sql_literal.rb +4 -0
  75. data/lib/arel/table.rb +134 -0
  76. data/lib/arel/tree_manager.rb +36 -0
  77. data/lib/arel/update_manager.rb +49 -0
  78. data/lib/arel/visitors.rb +38 -0
  79. data/lib/arel/visitors/depth_first.rb +154 -0
  80. data/lib/arel/visitors/dot.rb +230 -0
  81. data/lib/arel/visitors/join_sql.rb +40 -0
  82. data/lib/arel/visitors/mssql.rb +16 -0
  83. data/lib/arel/visitors/mysql.rb +34 -0
  84. data/lib/arel/visitors/oracle.rb +116 -0
  85. data/lib/arel/visitors/order_clauses.rb +11 -0
  86. data/lib/arel/visitors/postgresql.rb +58 -0
  87. data/lib/arel/visitors/sqlite.rb +11 -0
  88. data/lib/arel/visitors/to_sql.rb +331 -0
  89. data/lib/arel/visitors/visitor.rb +27 -0
  90. data/lib/arel/visitors/where_sql.rb +9 -0
  91. data/square-arel.gemspec +36 -0
  92. data/test/attributes/test_attribute.rb +664 -0
  93. data/test/helper.rb +13 -0
  94. data/test/nodes/test_as.rb +16 -0
  95. data/test/nodes/test_count.rb +18 -0
  96. data/test/nodes/test_delete_statement.rb +14 -0
  97. data/test/nodes/test_equality.rb +74 -0
  98. data/test/nodes/test_insert_statement.rb +18 -0
  99. data/test/nodes/test_node.rb +33 -0
  100. data/test/nodes/test_not.rb +20 -0
  101. data/test/nodes/test_or.rb +22 -0
  102. data/test/nodes/test_select_core.rb +22 -0
  103. data/test/nodes/test_select_statement.rb +13 -0
  104. data/test/nodes/test_sql_literal.rb +52 -0
  105. data/test/nodes/test_sum.rb +12 -0
  106. data/test/nodes/test_update_statement.rb +18 -0
  107. data/test/support/fake_record.rb +91 -0
  108. data/test/test_activerecord_compat.rb +18 -0
  109. data/test/test_attributes.rb +46 -0
  110. data/test/test_crud.rb +69 -0
  111. data/test/test_delete_manager.rb +42 -0
  112. data/test/test_insert_manager.rb +125 -0
  113. data/test/test_select_manager.rb +659 -0
  114. data/test/test_table.rb +193 -0
  115. data/test/test_update_manager.rb +86 -0
  116. data/test/visitors/test_depth_first.rb +212 -0
  117. data/test/visitors/test_dot.rb +29 -0
  118. data/test/visitors/test_join_sql.rb +35 -0
  119. data/test/visitors/test_mssql.rb +18 -0
  120. data/test/visitors/test_mysql.rb +45 -0
  121. data/test/visitors/test_oracle.rb +147 -0
  122. data/test/visitors/test_postgres.rb +36 -0
  123. data/test/visitors/test_sqlite.rb +18 -0
  124. data/test/visitors/test_to_sql.rb +255 -0
  125. metadata +261 -0
@@ -0,0 +1,26 @@
1
+ # -*- ruby -*-
2
+
3
+ # require 'autotest/restart'
4
+
5
+ ENV['GEM_PATH'] = "tmp/isolate/ruby-1.8"
6
+
7
+ module Autotest::Restart
8
+ Autotest.add_hook :updated do |at, *args|
9
+ if args.flatten.include? ".autotest" then
10
+ warn "Detected change to .autotest, restarting"
11
+ cmd = %w(autotest)
12
+ cmd << " -v" if $v
13
+ cmd += ARGV
14
+
15
+ exec(*cmd)
16
+ end
17
+ end
18
+ end
19
+
20
+ Autotest.add_hook :initialize do |at|
21
+ at.add_exception 'tmp'
22
+ at.testlib = "minitest/autorun"
23
+
24
+ at.find_directories = ARGV unless ARGV.empty?
25
+ end
26
+
@@ -0,0 +1,105 @@
1
+ == 2.0.9 / 2010/02/25
2
+
3
+ * Bug Fixes
4
+
5
+ * Custom LOCK strings are allowed. Fixes LH # 6399
6
+ https://rails.lighthouseapp.com/projects/8994/tickets/6399-allow-database-specific-locking-clauses-to-be-used
7
+
8
+ * Strings passed to StringManager#on will be automatically tagged as SQL
9
+ literals. Fixes Rails LH #6384
10
+ https://rails.lighthouseapp.com/projects/8994/tickets/6384-activerecord-303-and-3-0-stable-generate-invalid-sql-for-has_many-through-association-with-conditions
11
+
12
+ == 2.0.8 / 2010/02/08
13
+
14
+ * Bug Fixes
15
+
16
+ * Added set operation support
17
+ * Fixed problems with *_any / *_all methods.
18
+
19
+ == 2.0.7
20
+
21
+ * Bug Fixes
22
+
23
+ * Limit members are visited
24
+ * Fixing MSSQL TOP support
25
+
26
+ == 2.0.6 12/01/2010
27
+
28
+ * Bug Fixes
29
+
30
+ * Rails 3.0.x does not like that Node is Enumerable, so removing for now.
31
+
32
+ == 2.0.5 11/30/2010
33
+
34
+ * Enhancements
35
+
36
+ * Arel::Visitors::DepthFirst can walk your AST depth first
37
+ * Arel::Nodes::Node is enumerable, depth first
38
+
39
+ * Bug fixes
40
+
41
+ * #lock will lock SELECT statements "FOR UPDATE" on mysql
42
+ * Nodes::Node#not factory method added for creating Nodes::Not nodes
43
+ * Added an As node
44
+
45
+ * Deprecations
46
+
47
+ * Support for Subclasses of core classes will be removed in ARel version
48
+ 2.2.0
49
+
50
+ == 2.0.4
51
+
52
+ * Bug fixes
53
+
54
+ * Speed improvements for Range queries. Thanks Rolf Timmermans!
55
+
56
+ == 2.0.3
57
+
58
+ * Bug fixes
59
+
60
+ * Fixing Oracle support
61
+ * Added a visitor for "Class" objects
62
+
63
+ == 2.0.2
64
+
65
+ * Bug fixes
66
+
67
+ * MySQL selects from DUAL on empty FROM
68
+ * Visitor translates nil to NULL
69
+ * Visitor translates Bignum properly
70
+
71
+ == 2.0.1
72
+
73
+ * Bug fixes
74
+
75
+ == 2.0.0 / 2010-08-01
76
+ * Enhancements
77
+
78
+ * Recreate library using the Visitor pattern.
79
+ http://en.wikipedia.org/wiki/Visitor_pattern
80
+
81
+ == 0.3.0 / 2010-03-10
82
+
83
+ * Enhancements
84
+
85
+ * Introduced "SQL compilers" for query generation.
86
+ * Added support for Oracle (Raimonds Simanovskis) and IBM/DB (Praveen Devarao).
87
+ * Improvements to give better support to ActiveRecord.
88
+
89
+ == 0.2.1 / 2010-02-05
90
+
91
+ * Enhancements
92
+
93
+ * Bump dependency version of activesupport to 3.0.0.beta
94
+
95
+ == 0.2.0 / 2010-01-31
96
+
97
+ * Ruby 1.9 compatibility
98
+ * Many improvements to support the Arel integration into ActiveRecord (see `git log v0.1.0..v0.2.0`)
99
+ * Thanks to Emilio Tagua and Pratik Naik for many significant contributions!
100
+
101
+ == 0.1.0 / 2009-08-06
102
+
103
+ * 1 major enhancement
104
+
105
+ * Birthday!
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007-2010 Nick Kallen, Bryan Helmkamp, Emilio Tagua, Aaron Patterson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,124 @@
1
+ .autotest
2
+ History.txt
3
+ MIT-LICENSE.txt
4
+ Manifest.txt
5
+ README.markdown
6
+ Rakefile
7
+ arel.gemspec
8
+ lib/arel.rb
9
+ lib/arel/attributes.rb
10
+ lib/arel/attributes/attribute.rb
11
+ lib/arel/compatibility/wheres.rb
12
+ lib/arel/crud.rb
13
+ lib/arel/delete_manager.rb
14
+ lib/arel/deprecated.rb
15
+ lib/arel/expression.rb
16
+ lib/arel/expressions.rb
17
+ lib/arel/insert_manager.rb
18
+ lib/arel/nodes.rb
19
+ lib/arel/nodes/and.rb
20
+ lib/arel/nodes/as.rb
21
+ lib/arel/nodes/assignment.rb
22
+ lib/arel/nodes/avg.rb
23
+ lib/arel/nodes/between.rb
24
+ lib/arel/nodes/binary.rb
25
+ lib/arel/nodes/count.rb
26
+ lib/arel/nodes/delete_statement.rb
27
+ lib/arel/nodes/does_not_match.rb
28
+ lib/arel/nodes/equality.rb
29
+ lib/arel/nodes/except.rb
30
+ lib/arel/nodes/exists.rb
31
+ lib/arel/nodes/function.rb
32
+ lib/arel/nodes/greater_than.rb
33
+ lib/arel/nodes/greater_than_or_equal.rb
34
+ lib/arel/nodes/group.rb
35
+ lib/arel/nodes/grouping.rb
36
+ lib/arel/nodes/having.rb
37
+ lib/arel/nodes/in.rb
38
+ lib/arel/nodes/inner_join.rb
39
+ lib/arel/nodes/insert_statement.rb
40
+ lib/arel/nodes/intersect.rb
41
+ lib/arel/nodes/join.rb
42
+ lib/arel/nodes/less_than.rb
43
+ lib/arel/nodes/less_than_or_equal.rb
44
+ lib/arel/nodes/limit.rb
45
+ lib/arel/nodes/lock.rb
46
+ lib/arel/nodes/matches.rb
47
+ lib/arel/nodes/max.rb
48
+ lib/arel/nodes/min.rb
49
+ lib/arel/nodes/node.rb
50
+ lib/arel/nodes/not.rb
51
+ lib/arel/nodes/not_equal.rb
52
+ lib/arel/nodes/not_in.rb
53
+ lib/arel/nodes/offset.rb
54
+ lib/arel/nodes/on.rb
55
+ lib/arel/nodes/or.rb
56
+ lib/arel/nodes/ordering.rb
57
+ lib/arel/nodes/outer_join.rb
58
+ lib/arel/nodes/select_core.rb
59
+ lib/arel/nodes/select_statement.rb
60
+ lib/arel/nodes/sql_literal.rb
61
+ lib/arel/nodes/string_join.rb
62
+ lib/arel/nodes/sum.rb
63
+ lib/arel/nodes/table_alias.rb
64
+ lib/arel/nodes/top.rb
65
+ lib/arel/nodes/unary.rb
66
+ lib/arel/nodes/union.rb
67
+ lib/arel/nodes/union_all.rb
68
+ lib/arel/nodes/unqualified_column.rb
69
+ lib/arel/nodes/update_statement.rb
70
+ lib/arel/nodes/values.rb
71
+ lib/arel/predications.rb
72
+ lib/arel/relation.rb
73
+ lib/arel/select_manager.rb
74
+ lib/arel/sql/engine.rb
75
+ lib/arel/sql_literal.rb
76
+ lib/arel/table.rb
77
+ lib/arel/tree_manager.rb
78
+ lib/arel/update_manager.rb
79
+ lib/arel/visitors.rb
80
+ lib/arel/visitors/depth_first.rb
81
+ lib/arel/visitors/dot.rb
82
+ lib/arel/visitors/join_sql.rb
83
+ lib/arel/visitors/mssql.rb
84
+ lib/arel/visitors/mysql.rb
85
+ lib/arel/visitors/oracle.rb
86
+ lib/arel/visitors/order_clauses.rb
87
+ lib/arel/visitors/postgresql.rb
88
+ lib/arel/visitors/sqlite.rb
89
+ lib/arel/visitors/to_sql.rb
90
+ lib/arel/visitors/visitor.rb
91
+ lib/arel/visitors/where_sql.rb
92
+ test/attributes/test_attribute.rb
93
+ test/helper.rb
94
+ test/nodes/test_as.rb
95
+ test/nodes/test_count.rb
96
+ test/nodes/test_delete_statement.rb
97
+ test/nodes/test_equality.rb
98
+ test/nodes/test_insert_statement.rb
99
+ test/nodes/test_node.rb
100
+ test/nodes/test_not.rb
101
+ test/nodes/test_or.rb
102
+ test/nodes/test_select_core.rb
103
+ test/nodes/test_select_statement.rb
104
+ test/nodes/test_sql_literal.rb
105
+ test/nodes/test_sum.rb
106
+ test/nodes/test_update_statement.rb
107
+ test/support/fake_record.rb
108
+ test/test_activerecord_compat.rb
109
+ test/test_attributes.rb
110
+ test/test_crud.rb
111
+ test/test_delete_manager.rb
112
+ test/test_insert_manager.rb
113
+ test/test_select_manager.rb
114
+ test/test_table.rb
115
+ test/test_update_manager.rb
116
+ test/visitors/test_depth_first.rb
117
+ test/visitors/test_dot.rb
118
+ test/visitors/test_join_sql.rb
119
+ test/visitors/test_mssql.rb
120
+ test/visitors/test_mysql.rb
121
+ test/visitors/test_oracle.rb
122
+ test/visitors/test_postgres.rb
123
+ test/visitors/test_sqlite.rb
124
+ test/visitors/test_to_sql.rb
@@ -0,0 +1,94 @@
1
+ # ARel
2
+
3
+ * http://github.com/rails/arel
4
+
5
+ ## DESCRIPTION
6
+
7
+ Arel is a Relational Algebra for Ruby. It 1) simplifies the generation complex of SQL queries and it 2) adapts to various RDBMS systems. It is intended to be a framework framework; that is, you can build your own ORM with it, focusing on innovative object and collection modeling as opposed to database compatibility and query generation.
8
+
9
+ ## Status
10
+
11
+ For the moment, Arel uses ActiveRecord's connection adapters to connect to the various engines, connection pooling, perform quoting, and do type conversion.
12
+
13
+ ## A Gentle Introduction
14
+
15
+ Generating a query with ARel is simple. For example, in order to produce
16
+
17
+ SELECT * FROM users
18
+
19
+ you construct a table relation and convert it to sql:
20
+
21
+ users = Arel::Table.new(:users)
22
+ users.project(Arel.sql('*'))
23
+ users.to_sql
24
+
25
+ ### More Sophisticated Queries
26
+
27
+ Here is a whirlwind tour through the most common relational operators. These will probably cover 80% of all interaction with the database.
28
+
29
+ First is the 'restriction' operator, `where`:
30
+
31
+ users.where(users[:name].eq('amy'))
32
+ # => SELECT * FROM users WHERE users.name = 'amy'
33
+
34
+ What would, in SQL, be part of the `SELECT` clause is called in Arel a `projection`:
35
+
36
+ users.project(users[:id]) # => SELECT users.id FROM users
37
+
38
+ Joins resemble SQL strongly:
39
+
40
+ users.join(photos).on(users[:id].eq(photos[:user_id]))
41
+ # => SELECT * FROM users INNER JOIN photos ON users.id = photos.user_id
42
+
43
+ What are called `LIMIT` and `OFFSET` in SQL are called `take` and `skip` in Arel:
44
+
45
+ users.take(5) # => SELECT * FROM users LIMIT 5
46
+ users.skip(4) # => SELECT * FROM users OFFSET 4
47
+
48
+ `GROUP BY` is called `group`:
49
+
50
+ users.group(users[:name]) # => SELECT * FROM users GROUP BY name
51
+
52
+ The best property of the Relational Algebra is its "composability", or closure under all operations. For example, to restrict AND project, just "chain" the method invocations:
53
+
54
+ users \
55
+ .where(users[:name].eq('amy')) \
56
+ .project(users[:id]) \
57
+ # => SELECT users.id FROM users WHERE users.name = 'amy'
58
+
59
+ All operators are chainable in this way, and they are chainable any number of times, in any order.
60
+
61
+ users.where(users[:name].eq('bob')).where(users[:age].lt(25))
62
+
63
+ Of course, many of the operators take multiple arguments, so the last example can be written more tersely:
64
+
65
+ users.where(users[:name].eq('bob'), users[:age].lt(25))
66
+
67
+ The `OR` operator works like this:
68
+
69
+ users.where(users[:name].eq('bob').or(users[:age].lt(25)))
70
+
71
+ The `AND` operator behaves similarly.
72
+
73
+ ### The Crazy Features
74
+
75
+ The examples above are fairly simple and other libraries match or come close to matching the expressiveness of Arel (e.g., `Sequel` in Ruby).
76
+
77
+ #### Complex Joins
78
+
79
+ Where Arel really shines in its ability to handle complex joins and aggregations. As a first example, let's consider an "adjacency list", a tree represented in a table. Suppose we have a table `comments`, representing a threaded discussion:
80
+
81
+ comments = Arel::Table.new(:comments)
82
+
83
+ And this table has the following attributes:
84
+
85
+ comments.columns # => [comments[:id], comments[:body], comments[:parent_id]]
86
+
87
+ The `parent_id` column is a foreign key from the `comments` table to itself. Now, joining a table to itself requires aliasing in SQL. In fact, you may alias in Arel as well:
88
+
89
+ replies = comments.alias
90
+ comments_with_replies = \
91
+ comments.join(replies).on(replies[:parent_id].eq(comments[:id]))
92
+ # => SELECT * FROM comments INNER JOIN comments AS comments_2 WHERE comments_2.parent_id = comments.id
93
+
94
+ This will return the first comment's reply's body.
@@ -0,0 +1,20 @@
1
+ require "rubygems"
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+
5
+ Hoe.plugins.delete :rubyforge
6
+ Hoe.plugin :minitest
7
+ Hoe.plugin :gemspec # `gem install hoe-gemspec`
8
+ Hoe.plugin :git # `gem install hoe-git`
9
+
10
+ Hoe.spec 'arel' do
11
+ developer('Aaron Patterson', 'aaron@tenderlovemaking.com')
12
+ developer('Bryan Halmkamp', 'bryan@brynary.com')
13
+ developer('Emilio Tagua', 'miloops@gmail.com')
14
+ developer('Nick Kallen', 'nick@example.org') # FIXME: need Nick's email
15
+
16
+ self.readme_file = 'README.markdown'
17
+ self.extra_rdoc_files = FileList['README.markdown']
18
+ self.extra_dev_deps << [ 'hoe', '>= 2.1.0' ]
19
+ self.extra_dev_deps << [ 'minitest', '>= 1.6.0' ]
20
+ end
@@ -0,0 +1,39 @@
1
+ require 'arel/crud'
2
+
3
+ require 'arel/expressions'
4
+ require 'arel/predications'
5
+ require 'arel/table'
6
+ require 'arel/attributes'
7
+ require 'arel/compatibility/wheres'
8
+
9
+ #### these are deprecated
10
+ # The Arel::Relation constant is referenced in Rails
11
+ require 'arel/relation'
12
+ require 'arel/expression'
13
+ ####
14
+
15
+ require 'arel/visitors'
16
+
17
+ require 'arel/tree_manager'
18
+ require 'arel/insert_manager'
19
+ require 'arel/select_manager'
20
+ require 'arel/update_manager'
21
+ require 'arel/delete_manager'
22
+ require 'arel/nodes'
23
+
24
+
25
+ #### these are deprecated
26
+ require 'arel/deprecated'
27
+ require 'arel/sql/engine'
28
+ require 'arel/sql_literal'
29
+ ####
30
+
31
+ module Arel
32
+ VERSION = '2.0.9'
33
+
34
+ def self.sql raw_sql
35
+ Arel::Nodes::SqlLiteral.new raw_sql
36
+ end
37
+ ## Convenience Alias
38
+ Node = Arel::Nodes::Node
39
+ end
@@ -0,0 +1,20 @@
1
+ require 'arel/attributes/attribute'
2
+
3
+ module Arel
4
+ module Attributes
5
+ ###
6
+ # Factory method to wrap a raw database +column+ to an Arel Attribute.
7
+ def self.for column
8
+ case column.type
9
+ when :string, :text, :binary then String
10
+ when :integer then Integer
11
+ when :float then Float
12
+ when :decimal then Decimal
13
+ when :date, :datetime, :timestamp, :time then Time
14
+ when :boolean then Boolean
15
+ else
16
+ Undefined
17
+ end
18
+ end
19
+ end
20
+ end