Initial commit from internal SVN

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@2 34248759-47e7-d47c-fb29-7a6b1deae063
Fixed references to Pair

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@3 34248759-47e7-d47c-fb29-7a6b1deae063
- added target and Hyracks directories to svn:ignore

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@4 34248759-47e7-d47c-fb29-7a6b1deae063
1. changes in compiler and runtime that make external group-by operator work
2. don't call close in nextFrame method of Limit runtime
3. re-format some code

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@5 34248759-47e7-d47c-fb29-7a6b1deae063
reformat the source file

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@6 34248759-47e7-d47c-fb29-7a6b1deae063
do not allocate all frames within the framelimit at the beginning of merge phase, instead, allocate frames only when necessary

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@7 34248759-47e7-d47c-fb29-7a6b1deae063
Refactor external group by runtime and fix a minor issue

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@8 34248759-47e7-d47c-fb29-7a6b1deae063
merge with the version using two tuple builders (for distinct aggregation)

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@9 34248759-47e7-d47c-fb29-7a6b1deae063
change flushframe back to jarod's code

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@10 34248759-47e7-d47c-fb29-7a6b1deae063
Push the type inference of merge functions' input to language implementors, the information is put in the annotation for group-by operator.  For the next step, we need to change the type computer interface, since one aggregation function can have two different schemas (one for "finishPartial", and the other for "finish").  In other words, the type inference for aggregation function need to drill down to a specific mode ("finishPartial" or "finish").

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@11 34248759-47e7-d47c-fb29-7a6b1deae063
set the frame limit paramter for external group-by, since group keys are included in the memory

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@12 34248759-47e7-d47c-fb29-7a6b1deae063
- reverted nested-tuple-source to pointing to the operator enclosing it
- fixed IntroduceCombinerRule not to modify any aggregator in case the rule doesn't apply



git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@13 34248759-47e7-d47c-fb29-7a6b1deae063
- unnesting functions can now be annotated to say that each value obtained when calling them is unique
- fixed the FDsAndEquivalentClass visitor to introduce new FDs for Unnest and UnnestMap only when the result of the unnested expression is unique

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@14 34248759-47e7-d47c-fb29-7a6b1deae063
1. add two interfaces for using external group-by operator
   1.1. IMergeAggregateExpressionFactory:  generate a merge aggregation expression from an aggregation expression
   1.2. IPartialAggregationTypeComputer:  type inference for partial aggregation (when the finishPartial of an aggregation function is called)
2. make external group-by operator work end-to-end, changes include OptimizationContext, JobGenContext, ExternalGroupByPOperator, and the set physical operator rule


git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@15 34248759-47e7-d47c-fb29-7a6b1deae063
make physical optimization parameters configurable, in class PhysicalOptimizationConfig

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@16 34248759-47e7-d47c-fb29-7a6b1deae063
use dynamic array to store aggregation functions, rather than java list

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@17 34248759-47e7-d47c-fb29-7a6b1deae063
- added micro-op for preclustered group-by so that nested grouping can be implemented
- Nested left outer joins still fail because there is a bug in the introduction of group-by's: introducing decor variables is tricky since it's not clear what is their domain of visibility. Having decors that don't bind variables may be the solution, but it will complicate the code.
- Also, physical operators have a new method isMicroOperator(), which should be used in EnforceStructuralProperties and IsolateHyracksOperator, but it is currently disabled since some tests fail.

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@18 34248759-47e7-d47c-fb29-7a6b1deae063
- introduction of 1-1 exchange is now based on the result of the isMicroOperator() method, and not on a list of operator tags.

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@19 34248759-47e7-d47c-fb29-7a6b1deae063
1. add a new aggregation function interface that supports serialization of internal state
2. add SerializedAggregatorDescriptorFactory to support internal state serialization

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@20 34248759-47e7-d47c-fb29-7a6b1deae063
1. add a rule to push project into data source scan
2. clear frames in the close method of external group-by

git-svn-id: http://algebricks.googlecode.com/svn/trunk/algebricks@21 34248759-47e7-d47c-fb29-7a6b1deae063