Merge pull request #477 from pingcap/zimuxia/unify-assign

*: unify expression.Assignment in parser
This commit is contained in:
zimulala
2015-10-29 14:38:50 +08:00
3 changed files with 15 additions and 15 deletions

View File

@ -746,23 +746,23 @@ Assignment:
if err != nil {
yylex.(*lexer).errf("Parse Assignment error: %s", $1.(string))
}
$$ = *x
$$ = x
}
AssignmentList:
Assignment
{
$$ = []expression.Assignment{$1.(expression.Assignment)}
$$ = []*expression.Assignment{$1.(*expression.Assignment)}
}
| AssignmentList ',' Assignment
{
$$ = append($1.([]expression.Assignment), $3.(expression.Assignment))
$$ = append($1.([]*expression.Assignment), $3.(*expression.Assignment))
}
AssignmentListOpt:
/* EMPTY */
{
$$ = []expression.Assignment{}
$$ = []*expression.Assignment{}
}
| AssignmentList
@ -1727,7 +1727,7 @@ InsertIntoStmt:
x.Priority = $2.(int)
x.TableIdent = $5.(table.Ident)
if $7 != nil {
x.OnDuplicate = $7.([]expression.Assignment)
x.OnDuplicate = $7.([]*expression.Assignment)
}
$$ = x
if yylex.(*lexer).root {
@ -4306,7 +4306,7 @@ UpdateStmt:
st := &stmts.UpdateStmt{
LowPriority: $2.(bool),
TableRefs: r,
List: $6.([]expression.Assignment),
List: $6.([]*expression.Assignment),
}
if $7 != nil {
st.Where = $7.(expression.Expression)
@ -4328,7 +4328,7 @@ UpdateStmt:
st := &stmts.UpdateStmt{
LowPriority: $2.(bool),
TableRefs: $4.(*rsets.JoinRset),
List: $6.([]expression.Assignment),
List: $6.([]*expression.Assignment),
MultipleTable: true,
}
if $7 != nil {

View File

@ -60,7 +60,7 @@ type InsertValues struct {
// See: https://dev.mysql.com/doc/refman/5.7/en/insert.html
type InsertIntoStmt struct {
InsertValues
OnDuplicate []expression.Assignment
OnDuplicate []*expression.Assignment
Text string
}
@ -335,7 +335,7 @@ func (s *InsertValues) getRow(ctx context.Context, t table.Table, cols []*column
return r, nil
}
func execOnDuplicateUpdate(ctx context.Context, t table.Table, row []interface{}, h int64, cols map[int]expression.Assignment) error {
func execOnDuplicateUpdate(ctx context.Context, t table.Table, row []interface{}, h int64, cols map[int]*expression.Assignment) error {
// On duplicate key update the duplicate row.
// Evaluate the updated value.
// TODO: report rows affected and last insert id.
@ -360,8 +360,8 @@ func execOnDuplicateUpdate(ctx context.Context, t table.Table, row []interface{}
return nil
}
func getOnDuplicateUpdateColumns(assignList []expression.Assignment, t table.Table) (map[int]expression.Assignment, error) {
m := make(map[int]expression.Assignment, len(assignList))
func getOnDuplicateUpdateColumns(assignList []*expression.Assignment, t table.Table) (map[int]*expression.Assignment, error) {
m := make(map[int]*expression.Assignment, len(assignList))
for _, v := range assignList {
c, err := findColumnByName(t, field.JoinQualifiedName("", v.TableName, v.ColName))

View File

@ -44,7 +44,7 @@ var _ stmt.Statement = (*UpdateStmt)(nil)
// See: https://dev.mysql.com/doc/refman/5.7/en/update.html
type UpdateStmt struct {
TableRefs *rsets.JoinRset
List []expression.Assignment
List []*expression.Assignment
Where expression.Expression
Order *rsets.OrderByRset
Limit *rsets.LimitRset
@ -96,8 +96,8 @@ func findColumnByName(t table.Table, name string) (*column.Col, error) {
return c, nil
}
func getUpdateColumns(assignList []expression.Assignment, fields []*field.ResultField) (map[int]expression.Assignment, error) {
m := make(map[int]expression.Assignment, len(assignList))
func getUpdateColumns(assignList []*expression.Assignment, fields []*field.ResultField) (map[int]*expression.Assignment, error) {
m := make(map[int]*expression.Assignment, len(assignList))
for _, v := range assignList {
name := v.ColName
@ -119,7 +119,7 @@ func getUpdateColumns(assignList []expression.Assignment, fields []*field.Result
}
func updateRecord(ctx context.Context, h int64, data []interface{}, t table.Table,
updateColumns map[int]expression.Assignment, m map[interface{}]interface{},
updateColumns map[int]*expression.Assignment, m map[interface{}]interface{},
offset int, onDuplicateUpdate bool) error {
if err := t.LockRow(ctx, h, true); err != nil {
return errors.Trace(err)