forked from dkubb/axiom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
54 lines (47 loc) · 2.33 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
* Remove Order, Reverse, Limit and Offset from the Relation inheritance chain
* Instead make it so they are proxy classes that wrap Relations, but
proxy method calls to the Relation methods, and then wrap the return
value (assuming it's a Relation) in a copy of itself.
* Also this will allow knowledge of #directions to be removed from
all the Relation classes. Only the Ranking classes will need to know
about directions.
* The Reverse class will probably not be needed either. All we need is
for the #reverse method to create a new Order with the directions
reversed.
* Remove the knowledge of directions from materialized relations
and instead wrap materialized relations in the Order object
if any.
* Add Relation#group and Relation#ungroup
* Update Attributes so that constraints are modelled using predicates,
so that when "join-ability" is tested, the predicates can just be
compared for equality.
* Create an object that can wrap a predicate, and if it fails it will
set the object's error state, and then propagate the status to the
caller. This will allow a "complex" predicate to set the errors
on tuples, while still allowing all the same objects to be used.
* Update memoization to take into account the arguments passed into
the method. It should memoize differently for different
methods. Perhaps it could have a special case for methods
with a 0-arity vs n-arity methods, but it needs to handle cases
like with #hash that accept no args, and #optimize that accepts
1 arg.
* Add Relation#antijoin
* Allows "NOT EXISTS/IN" type queries to be executes where every tuple
from the relation is returned that *does not* join with the tuples in
the operand.
* Inclusion/Exclusion improvements:
* Allow attribute/function expressions to exist within the enumerable part
of the Inclusion and Exclusion operations
* The #call method should propagate the Tuple down to each callable entry
in the Enumerable.
* Within the restriction context, make sure the attributes have aliases for:
* Alias #== to #eq (may break alot)
* Alias #!= to #ne (in 1.9 only)
* Alias #>= to #gte
* Alias #> to #gt
* Alias #<= to #lte
* Alias #< to #lt
* Alias #=~ to #match
* Within the sort_by context, make sure the attributes have aliases for:
* Alias #@+ to #asc
* Alias #@- to #desc