From 606a815e0897fae89f3782a131ffe5888e2c3cba Mon Sep 17 00:00:00 2001 From: Frantisek Haifler Date: Tue, 6 Apr 2021 20:25:23 +0200 Subject: [PATCH] Enforce new allocation for appends on cloned joins slice --- exp/select_clauses.go | 2 +- exp/select_clauses_test.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/exp/select_clauses.go b/exp/select_clauses.go index f5443caf..04cfc14b 100644 --- a/exp/select_clauses.go +++ b/exp/select_clauses.go @@ -112,7 +112,7 @@ func (c *selectClauses) clone() *selectClauses { selectColumns: c.selectColumns, distinct: c.distinct, from: c.from, - joins: c.joins, + joins: c.joins[0:len(c.joins):len(c.joins)], where: c.where, alias: c.alias, groupBy: c.groupBy, diff --git a/exp/select_clauses_test.go b/exp/select_clauses_test.go index f5e0be1f..c0573959 100644 --- a/exp/select_clauses_test.go +++ b/exp/select_clauses_test.go @@ -160,21 +160,33 @@ func (scs *selectClausesSuite) TestJoins() { func (scs *selectClausesSuite) TestJoinsAppend() { jc := NewConditionedJoinExpression( LeftJoinType, - NewIdentifierExpression("", "test", ""), + NewIdentifierExpression("", "test1", ""), nil, ) jc2 := NewUnConditionedJoinExpression( LeftJoinType, - NewIdentifierExpression("", "test", ""), + NewIdentifierExpression("", "test2", ""), + ) + jc3 := NewUnConditionedJoinExpression( + InnerJoinType, + NewIdentifierExpression("", "test3", ""), ) c := NewSelectClauses() c2 := c.JoinsAppend(jc) c3 := c2.JoinsAppend(jc2) + c4 := c3.JoinsAppend(jc2) // len(c4.joins) == 3, cap(c4.joins) == 4 + // next two appends shouldn't affect one another + c5 := c4.JoinsAppend(jc2) + c6 := c4.JoinsAppend(jc3) + scs.Nil(c.Joins()) scs.Equal(JoinExpressions{jc}, c2.Joins()) scs.Equal(JoinExpressions{jc, jc2}, c3.Joins()) + scs.Equal(JoinExpressions{jc, jc2, jc2}, c4.Joins()) + scs.Equal(JoinExpressions{jc, jc2, jc2, jc2}, c5.Joins()) + scs.Equal(JoinExpressions{jc, jc2, jc2, jc3}, c6.Joins()) } func (scs *selectClausesSuite) TestWhere() {