Skip to content

Commit

Permalink
*: having adds SelectList field.
Browse files Browse the repository at this point in the history
  • Loading branch information
siddontang committed Oct 16, 2015
1 parent b1df134 commit 08e0491
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 11 deletions.
1 change: 1 addition & 0 deletions plan/plans/having.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type HavingPlan struct {
Src plan.Plan
Expr expression.Expression
evalArgs map[interface{}]interface{}
*SelectList
}

// Explain implements plan.Plan Explain interface.
Expand Down
4 changes: 4 additions & 0 deletions plan/plans/having_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ var _ = Suite(&testHavingPlan{})
func (t *testHavingPlan) TestHaving(c *C) {
tblPlan := &testTablePlan{groupByTestData, []string{"id", "name"}, 0}
havingPlan := &plans.HavingPlan{
SelectList: &plans.SelectList{
HiddenFieldOffset: len(tblPlan.GetFields()),
ResultFields: tblPlan.GetFields(),
},
Src: tblPlan,
Expr: &expression.BinaryOperation{
Op: opcode.GE,
Expand Down
7 changes: 4 additions & 3 deletions rset/rsets/having.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ var (

// HavingRset is record set for having fields.
type HavingRset struct {
Src plan.Plan
Expr expression.Expression
Src plan.Plan
Expr expression.Expression
SelectList *plans.SelectList
}

// CheckAndUpdateSelectList checks having fields validity and set hidden fields to selectList.
Expand Down Expand Up @@ -90,7 +91,7 @@ func (r *HavingRset) CheckAndUpdateSelectList(selectList *plans.SelectList, grou

// Plan gets HavingPlan.
func (r *HavingRset) Plan(ctx context.Context) (plan.Plan, error) {
return &plans.HavingPlan{Src: r.Src, Expr: r.Expr}, nil
return &plans.HavingPlan{Src: r.Src, Expr: r.Expr, SelectList: r.SelectList}, nil
}

// String implements fmt.Stringer interface.
Expand Down
14 changes: 8 additions & 6 deletions rset/rsets/having_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,7 @@ func (s *testHavingRsetSuite) SetUpSuite(c *C) {
// expr `id > 1`
expr := expression.NewBinaryOperation(opcode.GT, &expression.Ident{CIStr: model.NewCIStr("id")}, expression.Value{Val: 1})

s.r = &HavingRset{Src: tblPlan, Expr: expr}
}

func (s *testHavingRsetSuite) TestHavingRsetCheckAndUpdateSelectList(c *C) {
resultFields := s.r.Src.GetFields()

resultFields := tblPlan.GetFields()
fields := make([]*field.Field, len(resultFields))
for i, resultField := range resultFields {
name := resultField.Name
Expand All @@ -52,6 +47,13 @@ func (s *testHavingRsetSuite) TestHavingRsetCheckAndUpdateSelectList(c *C) {
ResultFields: resultFields,
Fields: fields,
}
s.r = &HavingRset{Src: tblPlan, Expr: expr, SelectList: selectList}
}

func (s *testHavingRsetSuite) TestHavingRsetCheckAndUpdateSelectList(c *C) {
resultFields := s.r.Src.GetFields()

selectList := s.r.SelectList

groupBy := []expression.Expression{}

Expand Down
5 changes: 3 additions & 2 deletions stmt/stmts/select.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,9 @@ func (s *SelectStmt) Plan(ctx context.Context) (plan.Plan, error) {

if s := s.Having; s != nil {
if r, err = (&rsets.HavingRset{
Src: r,
Expr: s.Expr}).Plan(ctx); err != nil {
Src: r,
Expr: s.Expr,
SelectList: selectList}).Plan(ctx); err != nil {
return nil, err
}
}
Expand Down

0 comments on commit 08e0491

Please sign in to comment.