arel 1.0.1 → 2.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 (247) hide show
  1. data/MIT-LICENSE.txt +20 -0
  2. data/Manifest.txt +105 -0
  3. data/README.markdown +12 -32
  4. data/Rakefile +17 -0
  5. data/arel.gemspec +39 -0
  6. data/lib/arel.rb +30 -9
  7. data/lib/arel/attributes.rb +20 -0
  8. data/lib/arel/attributes/attribute.rb +190 -0
  9. data/lib/arel/compatibility/wheres.rb +33 -0
  10. data/lib/arel/crud.rb +37 -0
  11. data/lib/arel/delete_manager.rb +22 -0
  12. data/lib/arel/deprecated.rb +4 -0
  13. data/lib/arel/expression.rb +4 -0
  14. data/lib/arel/expressions.rb +23 -0
  15. data/lib/arel/insert_manager.rb +34 -0
  16. data/lib/arel/nodes.rb +44 -0
  17. data/lib/arel/nodes/and.rb +6 -0
  18. data/lib/arel/nodes/assignment.rb +6 -0
  19. data/lib/arel/nodes/avg.rb +6 -0
  20. data/lib/arel/nodes/between.rb +6 -0
  21. data/lib/arel/nodes/binary.rb +12 -0
  22. data/lib/arel/nodes/count.rb +13 -0
  23. data/lib/arel/nodes/delete_statement.rb +17 -0
  24. data/lib/arel/nodes/does_not_match.rb +6 -0
  25. data/lib/arel/nodes/equality.rb +9 -0
  26. data/lib/arel/nodes/exists.rb +11 -0
  27. data/lib/arel/nodes/function.rb +18 -0
  28. data/lib/arel/nodes/greater_than.rb +6 -0
  29. data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
  30. data/lib/arel/nodes/group.rb +11 -0
  31. data/lib/arel/nodes/grouping.rb +11 -0
  32. data/lib/arel/nodes/having.rb +11 -0
  33. data/lib/arel/nodes/in.rb +6 -0
  34. data/lib/arel/nodes/inner_join.rb +6 -0
  35. data/lib/arel/nodes/insert_statement.rb +19 -0
  36. data/lib/arel/nodes/join.rb +13 -0
  37. data/lib/arel/nodes/less_than.rb +6 -0
  38. data/lib/arel/nodes/less_than_or_equal.rb +6 -0
  39. data/lib/arel/nodes/lock.rb +6 -0
  40. data/lib/arel/nodes/matches.rb +6 -0
  41. data/lib/arel/nodes/max.rb +6 -0
  42. data/lib/arel/nodes/min.rb +6 -0
  43. data/lib/arel/nodes/node.rb +30 -0
  44. data/lib/arel/nodes/not_equal.rb +6 -0
  45. data/lib/arel/nodes/not_in.rb +6 -0
  46. data/lib/arel/nodes/offset.rb +11 -0
  47. data/lib/arel/nodes/on.rb +11 -0
  48. data/lib/arel/nodes/or.rb +6 -0
  49. data/lib/arel/nodes/ordering.rb +19 -0
  50. data/lib/arel/nodes/outer_join.rb +6 -0
  51. data/lib/arel/nodes/select_core.rb +25 -0
  52. data/lib/arel/nodes/select_statement.rb +22 -0
  53. data/lib/arel/nodes/sql_literal.rb +7 -0
  54. data/lib/arel/nodes/string_join.rb +11 -0
  55. data/lib/arel/nodes/sum.rb +6 -0
  56. data/lib/arel/nodes/table_alias.rb +21 -0
  57. data/lib/arel/nodes/unqualified_column.rb +19 -0
  58. data/lib/arel/nodes/update_statement.rb +21 -0
  59. data/lib/arel/nodes/values.rb +12 -0
  60. data/lib/arel/relation.rb +6 -0
  61. data/lib/arel/select_manager.rb +203 -0
  62. data/lib/arel/sql/engine.rb +10 -0
  63. data/lib/arel/sql_literal.rb +1 -10
  64. data/lib/arel/table.rb +126 -0
  65. data/lib/arel/tree_manager.rb +26 -0
  66. data/lib/arel/update_manager.rb +48 -0
  67. data/lib/arel/visitors.rb +30 -0
  68. data/lib/arel/visitors/dot.rb +233 -0
  69. data/lib/arel/visitors/join_sql.rb +38 -0
  70. data/lib/arel/visitors/mysql.rb +16 -0
  71. data/lib/arel/visitors/oracle.rb +69 -0
  72. data/lib/arel/visitors/order_clauses.rb +9 -0
  73. data/lib/arel/visitors/postgresql.rb +54 -0
  74. data/lib/arel/visitors/to_sql.rb +301 -0
  75. data/lib/arel/visitors/where_sql.rb +9 -0
  76. data/spec/activerecord_compat_spec.rb +18 -0
  77. data/spec/attributes/attribute_spec.rb +648 -0
  78. data/spec/attributes_spec.rb +33 -6
  79. data/spec/crud_spec.rb +69 -0
  80. data/spec/delete_manager_spec.rb +53 -0
  81. data/spec/insert_manager_spec.rb +141 -0
  82. data/spec/nodes/count_spec.rb +18 -0
  83. data/spec/nodes/delete_statement_spec.rb +15 -0
  84. data/spec/nodes/equality_spec.rb +72 -0
  85. data/spec/nodes/insert_statement_spec.rb +18 -0
  86. data/spec/nodes/or_spec.rb +20 -0
  87. data/spec/nodes/select_core_spec.rb +21 -0
  88. data/spec/nodes/select_statement_spec.rb +14 -0
  89. data/spec/nodes/sql_literal_spec.rb +26 -0
  90. data/spec/nodes/sum_spec.rb +12 -0
  91. data/spec/nodes/update_statement_spec.rb +18 -0
  92. data/spec/select_manager_spec.rb +581 -0
  93. data/spec/spec.opts +3 -0
  94. data/spec/spec_helper.rb +6 -21
  95. data/spec/support/fake_record.rb +89 -0
  96. data/spec/support/shared/tree_manager_shared.rb +9 -0
  97. data/spec/table_spec.rb +176 -0
  98. data/spec/update_manager_spec.rb +89 -0
  99. data/spec/visitors/join_sql_spec.rb +35 -0
  100. data/spec/visitors/oracle_spec.rb +111 -0
  101. data/spec/visitors/to_sql_spec.rb +134 -0
  102. metadata +160 -260
  103. data/lib/arel/algebra.rb +0 -10
  104. data/lib/arel/algebra/attributes.rb +0 -7
  105. data/lib/arel/algebra/attributes/attribute.rb +0 -304
  106. data/lib/arel/algebra/attributes/boolean.rb +0 -21
  107. data/lib/arel/algebra/attributes/decimal.rb +0 -9
  108. data/lib/arel/algebra/attributes/float.rb +0 -9
  109. data/lib/arel/algebra/attributes/integer.rb +0 -10
  110. data/lib/arel/algebra/attributes/string.rb +0 -10
  111. data/lib/arel/algebra/attributes/time.rb +0 -6
  112. data/lib/arel/algebra/core_extensions.rb +0 -3
  113. data/lib/arel/algebra/core_extensions/hash.rb +0 -7
  114. data/lib/arel/algebra/core_extensions/object.rb +0 -13
  115. data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
  116. data/lib/arel/algebra/expression.rb +0 -56
  117. data/lib/arel/algebra/header.rb +0 -66
  118. data/lib/arel/algebra/ordering.rb +0 -31
  119. data/lib/arel/algebra/predicates.rb +0 -306
  120. data/lib/arel/algebra/relations.rb +0 -16
  121. data/lib/arel/algebra/relations/operations/from.rb +0 -14
  122. data/lib/arel/algebra/relations/operations/group.rb +0 -14
  123. data/lib/arel/algebra/relations/operations/having.rb +0 -14
  124. data/lib/arel/algebra/relations/operations/join.rb +0 -103
  125. data/lib/arel/algebra/relations/operations/lock.rb +0 -10
  126. data/lib/arel/algebra/relations/operations/order.rb +0 -23
  127. data/lib/arel/algebra/relations/operations/project.rb +0 -20
  128. data/lib/arel/algebra/relations/operations/skip.rb +0 -14
  129. data/lib/arel/algebra/relations/operations/take.rb +0 -18
  130. data/lib/arel/algebra/relations/operations/where.rb +0 -24
  131. data/lib/arel/algebra/relations/relation.rb +0 -205
  132. data/lib/arel/algebra/relations/row.rb +0 -29
  133. data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
  134. data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
  135. data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
  136. data/lib/arel/algebra/relations/writes.rb +0 -47
  137. data/lib/arel/algebra/value.rb +0 -53
  138. data/lib/arel/engines.rb +0 -2
  139. data/lib/arel/engines/memory.rb +0 -2
  140. data/lib/arel/engines/memory/engine.rb +0 -10
  141. data/lib/arel/engines/memory/relations.rb +0 -2
  142. data/lib/arel/engines/memory/relations/array.rb +0 -37
  143. data/lib/arel/engines/memory/relations/operations.rb +0 -9
  144. data/lib/arel/engines/sql.rb +0 -6
  145. data/lib/arel/engines/sql/attributes.rb +0 -45
  146. data/lib/arel/engines/sql/christener.rb +0 -20
  147. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
  148. data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
  149. data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
  150. data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
  151. data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
  152. data/lib/arel/engines/sql/core_extensions.rb +0 -4
  153. data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
  154. data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
  155. data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
  156. data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
  157. data/lib/arel/engines/sql/engine.rb +0 -47
  158. data/lib/arel/engines/sql/formatters.rb +0 -138
  159. data/lib/arel/engines/sql/relations.rb +0 -3
  160. data/lib/arel/engines/sql/relations/compiler.rb +0 -153
  161. data/lib/arel/engines/sql/relations/table.rb +0 -100
  162. data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
  163. data/lib/arel/recursion/base_case.rb +0 -13
  164. data/lib/arel/session.rb +0 -35
  165. data/lib/arel/version.rb +0 -3
  166. data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
  167. data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
  168. data/spec/algebra/unit/predicates/in_spec.rb +0 -12
  169. data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
  170. data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
  171. data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
  172. data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
  173. data/spec/algebra/unit/primitives/value_spec.rb +0 -15
  174. data/spec/algebra/unit/relations/alias_spec.rb +0 -16
  175. data/spec/algebra/unit/relations/delete_spec.rb +0 -9
  176. data/spec/algebra/unit/relations/group_spec.rb +0 -10
  177. data/spec/algebra/unit/relations/insert_spec.rb +0 -9
  178. data/spec/algebra/unit/relations/join_spec.rb +0 -18
  179. data/spec/algebra/unit/relations/order_spec.rb +0 -21
  180. data/spec/algebra/unit/relations/project_spec.rb +0 -34
  181. data/spec/algebra/unit/relations/relation_spec.rb +0 -241
  182. data/spec/algebra/unit/relations/skip_spec.rb +0 -10
  183. data/spec/algebra/unit/relations/table_spec.rb +0 -38
  184. data/spec/algebra/unit/relations/take_spec.rb +0 -10
  185. data/spec/algebra/unit/relations/update_spec.rb +0 -9
  186. data/spec/algebra/unit/relations/where_spec.rb +0 -19
  187. data/spec/algebra/unit/session/session_spec.rb +0 -84
  188. data/spec/attributes/boolean_spec.rb +0 -57
  189. data/spec/attributes/float_spec.rb +0 -119
  190. data/spec/attributes/header_spec.rb +0 -42
  191. data/spec/attributes/integer_spec.rb +0 -119
  192. data/spec/attributes/string_spec.rb +0 -43
  193. data/spec/attributes/time_spec.rb +0 -24
  194. data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
  195. data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
  196. data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
  197. data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
  198. data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
  199. data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
  200. data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
  201. data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
  202. data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
  203. data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
  204. data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
  205. data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
  206. data/spec/engines/sql/unit/engine_spec.rb +0 -65
  207. data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
  208. data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
  209. data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
  210. data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
  211. data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
  212. data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
  213. data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
  214. data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
  215. data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
  216. data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
  217. data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
  218. data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
  219. data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
  220. data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
  221. data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
  222. data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
  223. data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
  224. data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
  225. data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
  226. data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
  227. data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
  228. data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
  229. data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
  230. data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
  231. data/spec/relations/join_spec.rb +0 -42
  232. data/spec/relations/relation_spec.rb +0 -31
  233. data/spec/shared/relation_spec.rb +0 -255
  234. data/spec/sql/christener_spec.rb +0 -70
  235. data/spec/support/connections/mysql_connection.rb +0 -14
  236. data/spec/support/connections/oracle_connection.rb +0 -17
  237. data/spec/support/connections/postgresql_connection.rb +0 -13
  238. data/spec/support/connections/sqlite3_connection.rb +0 -24
  239. data/spec/support/guards.rb +0 -28
  240. data/spec/support/matchers/disambiguate_attributes.rb +0 -28
  241. data/spec/support/matchers/hash_the_same_as.rb +0 -26
  242. data/spec/support/matchers/have_rows.rb +0 -18
  243. data/spec/support/model.rb +0 -67
  244. data/spec/support/schemas/mysql_schema.rb +0 -26
  245. data/spec/support/schemas/oracle_schema.rb +0 -20
  246. data/spec/support/schemas/postgresql_schema.rb +0 -26
  247. data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -1,24 +0,0 @@
1
- puts "Using native SQLite3"
2
- require "active_record"
3
- require 'logger'
4
-
5
- ENV['ADAPTER'] = 'sqlite3'
6
-
7
- db_file = "spec/support/fixtures/fixture_database.sqlite3"
8
-
9
- ActiveRecord::Base.configurations = {
10
- "unit" => {
11
- :adapter => 'sqlite3',
12
- :database => db_file,
13
- :timeout => 5000
14
- }
15
- }
16
-
17
- unless File.exist?(db_file)
18
- puts "SQLite3 database not found at #{db_file}. Rebuilding it."
19
- require 'fileutils'
20
- FileUtils.mkdir_p(File.dirname(db_file))
21
- sqlite_command = %Q{sqlite3 "#{db_file}" "create table a (a integer); drop table a;"}
22
- puts "Executing '#{sqlite_command}'"
23
- raise "Seems that there is no sqlite3 executable available" unless system(sqlite_command)
24
- end
@@ -1,28 +0,0 @@
1
- module AdapterGuards
2
- def adapter_is(*names)
3
- names = names.map(&:to_s)
4
- names.each{|name| verify_adapter_name(name)}
5
- yield if names.include? adapter_name
6
- end
7
-
8
- def adapter_is_not(*names)
9
- names = names.map(&:to_s)
10
- names.each{|name| verify_adapter_name(name)}
11
- yield unless names.include? adapter_name
12
- end
13
-
14
- def adapter_name
15
- name = ActiveRecord::Base.configurations["unit"][:adapter]
16
- name = 'oracle' if name == 'oracle_enhanced'
17
- verify_adapter_name(name)
18
- name
19
- end
20
-
21
- def verify_adapter_name(name)
22
- raise "Invalid adapter name: #{name}" unless valid_adapters.include?(name.to_s)
23
- end
24
-
25
- def valid_adapters
26
- %w[mysql postgresql sqlite3 oracle]
27
- end
28
- end
@@ -1,28 +0,0 @@
1
- module Matchers
2
- class DisambiguateAttributes
3
- def initialize(attributes)
4
- @attributes = attributes
5
- end
6
-
7
- def matches?(actual)
8
- @actual = actual
9
- attribute1, attribute2 = @attributes
10
- @actual[attribute1].descends_from?(attribute1) &&
11
- !@actual[attribute1].descends_from?(attribute2) &&
12
- @actual[attribute2].descends_from?(attribute2)
13
- end
14
-
15
- def failure_message
16
- ""
17
- # "expected #{@actual} to disambiguate its attributes"
18
- end
19
-
20
- def negative_failure_message
21
- "expected #{@actual} to not disambiguate its attributes"
22
- end
23
- end
24
-
25
- def disambiguate_attributes(*attributes)
26
- DisambiguateAttributes.new(attributes)
27
- end
28
- end
@@ -1,26 +0,0 @@
1
- module Matchers
2
- class HashTheSameAs
3
- def initialize(expected)
4
- @expected = expected
5
- end
6
-
7
- def matches?(actual)
8
- @actual = actual
9
- hash = {}
10
- hash[@expected] = :some_arbitrary_value
11
- hash[@actual] == :some_arbitrary_value
12
- end
13
-
14
- def failure_message
15
- "expected #{@actual} to hash the same as #{@expected}; they must be `eql?` and have the same `#hash` value"
16
- end
17
-
18
- def negative_failure_message
19
- "expected #{@actual} to hash differently than #{@expected}; they must not be `eql?` or have a differing `#hash` values"
20
- end
21
- end
22
-
23
- def hash_the_same_as(expected)
24
- HashTheSameAs.new(expected)
25
- end
26
- end
@@ -1,18 +0,0 @@
1
- module Matchers
2
- def have_rows(expected)
3
- simple_matcher "have rows" do |given, matcher|
4
- found, got, expected = [], [], expected.map { |r| r.tuple }
5
- given.each do |row|
6
- got << row.tuple
7
- found << expected.find { |r| row.tuple == r }
8
- end
9
-
10
- matcher.failure_message = "Expected to get:\n" \
11
- "#{expected.map {|r| " #{r.inspect}" }.join("\n")}\n" \
12
- "instead, got:\n" \
13
- "#{got.map {|r| " #{r.inspect}" }.join("\n")}"
14
-
15
- found.compact.length == expected.length && got.compact.length == expected.length
16
- end
17
- end
18
- end
@@ -1,67 +0,0 @@
1
- module Arel
2
- module Testing
3
- class Engine < Arel::Memory::Engine
4
- attr_reader :rows
5
-
6
- def initialize
7
- @rows = []
8
- end
9
-
10
- def supports(operation)
11
- false
12
- end
13
-
14
- def read(relation)
15
- case relation
16
- when Arel::Take, Arel::Order, Arel::Skip, Arel::Where
17
- relation.eval
18
- else
19
- @rows.dup.map { |r| Row.new(relation, r) }
20
- end
21
- end
22
-
23
- def create(insert)
24
- @rows << insert.record.tuple
25
- insert
26
- end
27
- end
28
- end
29
-
30
- class Model
31
- include Relation
32
-
33
- attr_reader :engine
34
-
35
- def self.build
36
- relation = new
37
- yield relation
38
- relation
39
- end
40
-
41
- def initialize
42
- @attributes = []
43
- end
44
-
45
- def engine(engine = nil)
46
- @engine = engine if engine
47
- @engine
48
- end
49
-
50
- def attribute(name, type)
51
- @attributes << type.new(self, name)
52
- end
53
-
54
- def attributes
55
- Header.new(@attributes)
56
- end
57
-
58
- def format(attribute, value)
59
- value
60
- end
61
-
62
- def insert(row)
63
- insert = super Arel::Row.new(self, row)
64
- insert.record
65
- end
66
- end
67
- end
@@ -1,26 +0,0 @@
1
- sql = <<-SQL
2
- DROP TABLE IF EXISTS users;
3
- CREATE TABLE users (
4
- id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
5
- name VARCHAR(255) NOT NULL
6
- );
7
-
8
- DROP TABLE IF EXISTS photos;
9
- CREATE TABLE photos (
10
- id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
11
- user_id INTEGER NOT NULL,
12
- camera_id INTEGER NOT NULL
13
- );
14
- DROP TABLE IF EXISTS developers;
15
- CREATE TABLE developers (
16
- id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
17
- name VARCHAR(255) NOT NULL,
18
- salary INTEGER NOT NULL,
19
- department VARCHAR(255) NOT NULL,
20
- created_at TIMESTAMP NOT NULL
21
- );
22
- SQL
23
-
24
- sql.split(/;/).select(&:present?).each do |sql_statement|
25
- ActiveRecord::Base.connection.execute sql_statement
26
- end
@@ -1,20 +0,0 @@
1
- ActiveRecord::Schema.define do
2
- suppress_messages do
3
- create_table :users, :primary_key_trigger => true, :force => true do |t|
4
- t.string :name, :limit => 255, :null => false
5
- end
6
-
7
- create_table :photos, :primary_key_trigger => true, :force => true do |t|
8
- t.integer :user_id
9
- t.integer :camera_id
10
- end
11
-
12
- create_table :developers, :primary_key_trigger => true, :force => true do |t|
13
- t.string :name, :limit => 255, :null => false
14
- t.integer :salary
15
- t.string :department, :limit => 255, :null => false
16
- t.timestamp :created_at, :null => false
17
- end
18
-
19
- end
20
- end
@@ -1,26 +0,0 @@
1
- sql = <<-SQL
2
- DROP TABLE IF EXISTS users;
3
- CREATE TABLE users (
4
- id SERIAL PRIMARY KEY NOT NULL,
5
- name VARCHAR(255) NOT NULL
6
- );
7
-
8
- DROP TABLE IF EXISTS photos;
9
- CREATE TABLE photos (
10
- id SERIAL PRIMARY KEY NOT NULL,
11
- user_id INTEGER NOT NULL,
12
- camera_id INTEGER NOT NULL
13
- );
14
- DROP TABLE IF EXISTS developers;
15
- CREATE TABLE developers (
16
- id SERIAL PRIMARY KEY NOT NULL,
17
- name VARCHAR(255) NOT NULL,
18
- salary INTEGER NOT NULL,
19
- department VARCHAR(255) NOT NULL,
20
- created_at TIMESTAMP NOT NULL
21
- );
22
- SQL
23
-
24
- sql.split(/;/).select(&:present?).each do |sql_statement|
25
- ActiveRecord::Base.connection.execute sql_statement
26
- end
@@ -1,26 +0,0 @@
1
- sql = <<-SQL
2
- DROP TABLE IF EXISTS users;
3
- CREATE TABLE users (
4
- id INTEGER NOT NULL PRIMARY KEY,
5
- name VARCHAR(255) NOT NULL
6
- );
7
-
8
- DROP TABLE IF EXISTS photos;
9
- CREATE TABLE photos (
10
- id INTEGER NOT NULL PRIMARY KEY,
11
- user_id INTEGER NOT NULL,
12
- camera_id INTEGER NOT NULL
13
- );
14
- DROP TABLE IF EXISTS developers;
15
- CREATE TABLE developers (
16
- id INTEGER NOT NULL PRIMARY KEY,
17
- name VARCHAR(255) NOT NULL,
18
- salary INTEGER NOT NULL,
19
- department VARCHAR(255) NOT NULL,
20
- created_at TIMESTAMP NOT NULL
21
- );
22
- SQL
23
-
24
- sql.split(/;/).select(&:present?).each do |sql_statement|
25
- ActiveRecord::Base.connection.execute sql_statement
26
- end