Merge pull request #477 from pingcap/zimuxia/unify-assign
*: unify expression.Assignment in parser
This commit is contained in:
@ -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 {
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user