arel 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/lib/arel.rb +4 -3
  2. data/lib/arel/algebra.rb +1 -1
  3. data/lib/arel/algebra/attributes.rb +7 -0
  4. data/lib/arel/algebra/{attribute.rb → attributes/attribute.rb} +32 -0
  5. data/lib/arel/algebra/attributes/boolean.rb +21 -0
  6. data/lib/arel/algebra/attributes/decimal.rb +9 -0
  7. data/lib/arel/algebra/attributes/float.rb +9 -0
  8. data/lib/arel/algebra/attributes/integer.rb +10 -0
  9. data/lib/arel/algebra/attributes/string.rb +10 -0
  10. data/lib/arel/algebra/attributes/time.rb +6 -0
  11. data/lib/arel/algebra/predicates.rb +1 -0
  12. data/lib/arel/algebra/relations/operations/join.rb +4 -2
  13. data/lib/arel/algebra/relations/operations/order.rb +2 -1
  14. data/lib/arel/algebra/relations/operations/skip.rb +2 -1
  15. data/lib/arel/algebra/relations/operations/take.rb +2 -1
  16. data/lib/arel/algebra/relations/operations/where.rb +7 -6
  17. data/lib/arel/algebra/relations/relation.rb +2 -1
  18. data/lib/arel/algebra/relations/utilities/compound.rb +22 -2
  19. data/lib/arel/algebra/relations/utilities/externalization.rb +1 -1
  20. data/lib/arel/algebra/relations/utilities/nil.rb +2 -2
  21. data/lib/arel/engines/memory/predicates.rb +6 -0
  22. data/lib/arel/engines/memory/relations/array.rb +11 -4
  23. data/lib/arel/engines/memory/relations/compound.rb +1 -1
  24. data/lib/arel/engines/memory/relations/operations.rb +2 -2
  25. data/lib/arel/engines/sql.rb +1 -0
  26. data/lib/arel/engines/sql/attributes.rb +40 -0
  27. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -14
  28. data/lib/arel/engines/sql/predicates.rb +4 -0
  29. data/lib/arel/engines/sql/primitives.rb +0 -4
  30. data/lib/arel/engines/sql/relations/compiler.rb +5 -5
  31. data/lib/arel/engines/sql/relations/operations/join.rb +1 -1
  32. data/lib/arel/engines/sql/relations/relation.rb +1 -1
  33. data/lib/arel/engines/sql/relations/table.rb +6 -7
  34. data/lib/arel/engines/sql/relations/utilities/compound.rb +1 -1
  35. data/lib/arel/engines/sql/relations/utilities/nil.rb +1 -1
  36. data/lib/arel/session.rb +2 -2
  37. data/lib/arel/version.rb +3 -0
  38. data/spec/{arel/algebra → algebra}/unit/predicates/binary_spec.rb +0 -0
  39. data/spec/{arel/algebra → algebra}/unit/predicates/equality_spec.rb +0 -0
  40. data/spec/{arel/algebra → algebra}/unit/predicates/in_spec.rb +0 -0
  41. data/spec/{arel/algebra → algebra}/unit/primitives/attribute_spec.rb +0 -0
  42. data/spec/{arel/algebra → algebra}/unit/primitives/expression_spec.rb +0 -0
  43. data/spec/{arel/algebra → algebra}/unit/primitives/value_spec.rb +0 -0
  44. data/spec/{arel/algebra → algebra}/unit/relations/alias_spec.rb +0 -0
  45. data/spec/{arel/algebra → algebra}/unit/relations/delete_spec.rb +0 -0
  46. data/spec/{arel/algebra → algebra}/unit/relations/group_spec.rb +0 -0
  47. data/spec/{arel/algebra → algebra}/unit/relations/insert_spec.rb +0 -0
  48. data/spec/{arel/algebra → algebra}/unit/relations/join_spec.rb +0 -0
  49. data/spec/{arel/algebra → algebra}/unit/relations/order_spec.rb +0 -0
  50. data/spec/{arel/algebra → algebra}/unit/relations/project_spec.rb +0 -0
  51. data/spec/{arel/algebra → algebra}/unit/relations/relation_spec.rb +0 -0
  52. data/spec/{arel/algebra → algebra}/unit/relations/skip_spec.rb +0 -0
  53. data/spec/{arel/algebra → algebra}/unit/relations/table_spec.rb +0 -0
  54. data/spec/{arel/algebra → algebra}/unit/relations/take_spec.rb +0 -0
  55. data/spec/{arel/algebra → algebra}/unit/relations/update_spec.rb +0 -0
  56. data/spec/{arel/algebra → algebra}/unit/relations/where_spec.rb +1 -0
  57. data/spec/{arel/algebra → algebra}/unit/session/session_spec.rb +0 -0
  58. data/spec/attributes/boolean_spec.rb +57 -0
  59. data/spec/attributes/float_spec.rb +119 -0
  60. data/spec/attributes/integer_spec.rb +119 -0
  61. data/spec/attributes/string_spec.rb +43 -0
  62. data/spec/attributes/time_spec.rb +22 -0
  63. data/spec/{arel/engines → engines}/memory/integration/joins/cross_engine_spec.rb +1 -1
  64. data/spec/{arel/engines → engines}/memory/unit/relations/array_spec.rb +1 -1
  65. data/spec/{arel/engines → engines}/memory/unit/relations/insert_spec.rb +1 -1
  66. data/spec/{arel/engines → engines}/memory/unit/relations/join_spec.rb +1 -1
  67. data/spec/{arel/engines → engines}/memory/unit/relations/order_spec.rb +1 -1
  68. data/spec/{arel/engines → engines}/memory/unit/relations/project_spec.rb +1 -1
  69. data/spec/{arel/engines → engines}/memory/unit/relations/skip_spec.rb +1 -1
  70. data/spec/{arel/engines → engines}/memory/unit/relations/take_spec.rb +1 -1
  71. data/spec/{arel/engines → engines}/memory/unit/relations/where_spec.rb +1 -1
  72. data/spec/{arel/engines → engines}/sql/integration/joins/with_adjacency_spec.rb +0 -0
  73. data/spec/{arel/engines → engines}/sql/integration/joins/with_aggregations_spec.rb +0 -0
  74. data/spec/{arel/engines → engines}/sql/integration/joins/with_compounds_spec.rb +0 -0
  75. data/spec/{arel/engines → engines}/sql/unit/engine_spec.rb +0 -0
  76. data/spec/{arel/engines → engines}/sql/unit/predicates/binary_spec.rb +0 -0
  77. data/spec/{arel/engines → engines}/sql/unit/predicates/equality_spec.rb +0 -0
  78. data/spec/{arel/engines → engines}/sql/unit/predicates/in_spec.rb +0 -0
  79. data/spec/{arel/engines → engines}/sql/unit/predicates/predicates_spec.rb +0 -0
  80. data/spec/{arel/engines → engines}/sql/unit/primitives/attribute_spec.rb +0 -0
  81. data/spec/{arel/engines → engines}/sql/unit/primitives/expression_spec.rb +0 -0
  82. data/spec/{arel/engines → engines}/sql/unit/primitives/literal_spec.rb +0 -0
  83. data/spec/{arel/engines → engines}/sql/unit/primitives/value_spec.rb +0 -0
  84. data/spec/{arel/engines → engines}/sql/unit/relations/alias_spec.rb +0 -0
  85. data/spec/{arel/engines → engines}/sql/unit/relations/delete_spec.rb +0 -0
  86. data/spec/{arel/engines → engines}/sql/unit/relations/from_spec.rb +0 -0
  87. data/spec/{arel/engines → engines}/sql/unit/relations/group_spec.rb +0 -0
  88. data/spec/{arel/engines → engines}/sql/unit/relations/having_spec.rb +0 -0
  89. data/spec/{arel/engines → engines}/sql/unit/relations/insert_spec.rb +0 -0
  90. data/spec/{arel/engines → engines}/sql/unit/relations/join_spec.rb +0 -0
  91. data/spec/{arel/engines → engines}/sql/unit/relations/lock_spec.rb +0 -0
  92. data/spec/{arel/engines → engines}/sql/unit/relations/order_spec.rb +0 -0
  93. data/spec/{arel/engines → engines}/sql/unit/relations/project_spec.rb +0 -0
  94. data/spec/{arel/engines → engines}/sql/unit/relations/skip_spec.rb +0 -0
  95. data/spec/{arel/engines → engines}/sql/unit/relations/table_spec.rb +0 -0
  96. data/spec/{arel/engines → engines}/sql/unit/relations/take_spec.rb +0 -0
  97. data/spec/{arel/engines → engines}/sql/unit/relations/update_spec.rb +0 -0
  98. data/spec/{arel/engines → engines}/sql/unit/relations/where_spec.rb +0 -0
  99. data/spec/relations/join_spec.rb +40 -0
  100. data/spec/relations/relation_spec.rb +31 -0
  101. data/spec/shared/relation_spec.rb +142 -0
  102. data/spec/spec_helper.rb +17 -45
  103. data/spec/support/check.rb +6 -0
  104. data/spec/{connections → support/connections}/mysql_connection.rb +2 -4
  105. data/spec/{connections → support/connections}/oracle_connection.rb +3 -5
  106. data/spec/{connections → support/connections}/postgresql_connection.rb +2 -4
  107. data/spec/{connections → support/connections}/sqlite3_connection.rb +2 -4
  108. data/spec/support/guards.rb +28 -0
  109. data/spec/support/matchers.rb +4 -0
  110. data/spec/{matchers → support/matchers}/be_like.rb +1 -1
  111. data/spec/{matchers → support/matchers}/disambiguate_attributes.rb +1 -1
  112. data/spec/{matchers → support/matchers}/hash_the_same_as.rb +1 -1
  113. data/spec/support/matchers/have_rows.rb +18 -0
  114. data/spec/support/model.rb +58 -0
  115. data/spec/{schemas → support/schemas}/mysql_schema.rb +0 -0
  116. data/spec/{schemas → support/schemas}/oracle_schema.rb +0 -0
  117. data/spec/{schemas → support/schemas}/postgresql_schema.rb +0 -0
  118. data/spec/{schemas → support/schemas}/sqlite3_schema.rb +0 -0
  119. metadata +107 -163
  120. data/.gitignore +0 -6
  121. data/.gitmodules +0 -3
  122. data/Rakefile +0 -48
  123. data/Thorfile +0 -124
  124. data/arel.gemspec +0 -258
  125. data/doc/CONVENTIONS +0 -17
  126. data/doc/TODO +0 -118
  127. data/spec/doubles/hash.rb +0 -27
  128. data/spec/spec.opts +0 -3
data/doc/TODO DELETED
@@ -1,118 +0,0 @@
1
- todo:
2
- - fix AR again
3
- - blocks for joins
4
- - fix sql insertions
5
- - implement mnesia adapter
6
-
7
- - CLEANUP!!!!!
8
- - rename externalize to derived.
9
- - deal with table tests in algebra
10
- - fix grouping
11
- - audit unit coverage of algebra
12
- - data objects
13
- - remove all explicit aliasing
14
- - scoped writes
15
- - refactor adapter pattern
16
- - break out adapters into sep modules
17
- - projection is by definition distincting?
18
- - union/intersection
19
- - cache expiry on write
20
- - transactions
21
-
22
- done:
23
- - and/or w/ predicates
24
- . Relation <=> Relation -> InnerJoinOperation
25
- . Relation << Relation -> LeftOuterJoinOperation
26
- . InnerJoinOperation.on(*Predicate) -> InnerJoinRelation
27
- . LeftOuterJoinOperation.on(*Predicate) -> LeftOuterJoinRelation
28
- . Relation[Symbol] -> Attribute
29
- . Relation[Range] -> Relation
30
- . Attribute == Attribute -> EqualityPredicate
31
- . Attribute >= Attribute -> GreaterThanOrEqualToPredicate
32
- . Relation.include?(Column) -> Predicate
33
- . Relation.project(*Column) -> ProjectRelation
34
- . Relation.select(*Predicate) -> SelectionRelation
35
- . Relation.order(*Column) -> OrderRelation
36
- . #to_sql
37
- . Remove Builder
38
- . Namespace
39
- . Audit SqlAlchemy for missing features
40
- - Generalized denormalizations on any aggregation (count, yes, but also max, min, average)
41
- - Remove operator overloading of << and <=> for joins. Make it just foo.join(bar) and foo.outer_join(bar).
42
- - Remove operator overloading of == for predicates. make it a.eq(b) (note lack of question mark).
43
- - hookup more predicates (=, <=, =>)
44
- - get some basic aggregations working: users.project(user[:points].max)
45
- - Alias Table Names
46
- - When joining with any sort of aggregation, it needs to be a nested select
47
- - get a value select working: users.project(users[:name], addresses.select(addresses[:user_id] == users[:id]).project(addresses[:id].count))
48
- - Session
49
- - sublimate values to deal with the fact that they must be quoted per engine
50
- - clean-up singleton monstrosity
51
- - extract hashing module
52
- - hash custom matcher
53
- - make session engine stuff follow laws of demeter - currently doing some odd method chaining? rethink who is responsible for what
54
- - session just calls execute, passing in a connection; by default it gets a connection from the relation.
55
- - #formatter is now on value, attribute and relation; you must admit it's name is confusing given that e.g., relation already has a formatter (Sql::Relation) ... should it be called predicate formatter? operand1.to_sql(operand2.predicate) maybe prefer operand1.cast(operand2) or project or in light of
56
- - renamed to #format: operand1.format(operand2)
57
- - rename sql strategies
58
- - need to_sql for ranges
59
- - {:conditions=>{:id=>2..3}}
60
- - nested orderings
61
- - string passthrough
62
- - conditions
63
- - orderings
64
- - relation inclusion when given an array (1,2,3,4) should quote the elements using the appropriate quoting formatter taken from the attribute
65
- - descend on array, along with bind written in terms of it
66
- - re-evaluate bind -- does bind belong inside the relation / predicate classes or in the factory methods?
67
- - string passthrough:
68
- :joins=>"INNER JOIN posts ON comments.post_id = posts.id"
69
- - finish pending tests
70
- - test relation, table reset
71
- - test Value, in particular bind.
72
- - test blank checks in relation.rb
73
- - rename active_relation to arel
74
- - mock out database
75
- - fix complex joining cases:
76
- - active record query adapter
77
- - anonymous table names
78
- - Explicitly model recursive structural decomposition / polymorphism
79
- - Explicitly model the namer/externalizer using interpreter jargon
80
- - All Sql Strategies should be accumulations with the top-level relation?
81
- - instance methodify externalize
82
- - test: find_attribute_given_attribute and all @attribute ||= everywhere and memoization of table class.
83
- - rename select to where
84
- - rename all ion classes
85
- - joining with LIMIT is like aggregations!!
86
- - blocks for non-joins
87
- - expressions should be class-based, and joins too, anything _sql should be renamed
88
- - implement in memory adapter
89
- - clean up block_given stuff
90
- - reorganize sql tests
91
- - recursive memory operations
92
- - reorganize memory tests
93
- - result sets to attr correlation too
94
- - implement joins in memory
95
- - result sets should be array relations
96
- - fix AR
97
- - insertions for in memory
98
- - cross-engine joins
99
-
100
- icebox:
101
- - #bind in Attribute and Expression should be doing a descend?
102
- - try to make aggegration testing in join spec to be a bit more unit-like
103
- - standardize quoting
104
- - use strings everywhere, not symbols ?
105
- - "unit" test sql strategies
106
- - use real world examples, so they should be like a tutorial.
107
- - rename the tion (Selection) classes so that words that don't end in tion don't seem inconsistent
108
- - consider this code from has_many:
109
- # replace the SELECT clause with COUNT(*), preserving any hints within /* ... */
110
- @reflection.options[:counter_sql] = @reflection.options[:finder_sql].sub(/SELECT (\/\*.*?\*\/ )?(.*)\bFROM\b/im) { "SELECT #{$1}COUNT(*) FROM" }
111
- - lock
112
- - SELECT suchandsuch FOR UPDATE
113
- - joins become subselects in writes:
114
- users.delete().where(
115
- addresses.c.user_id==
116
- select([users.c.id]).
117
- where(users.c.name=='jack')
118
- )
@@ -1,27 +0,0 @@
1
- class Hash
2
- def ordered_array
3
- to_a.sort { |(key1, value1), (key2, value2)| key1.hash <=> key2.hash }
4
- end
5
-
6
- undef :keys
7
- def keys
8
- ordered_array.collect(&:first)
9
- end
10
-
11
- undef :values
12
- def values
13
- ordered_array.collect { |_, v| v }
14
- end
15
-
16
- undef :each
17
- def each(&block)
18
- ordered_array.each(&block)
19
- end
20
-
21
- undef :shift
22
- def shift
23
- returning to_a.first do |k, v|
24
- delete(k)
25
- end
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- --backtrace
2
- --diff
3
- --color