|
@@ -109,60 +109,27 @@ func insertWalk(sql string) (*insertClause, error) {
|
|
|
w := &walk.AstWalker{
|
|
|
Fn: func(ctx interface{}, node interface{}) (stop bool) {
|
|
|
realNode := node.(*tree.Insert)
|
|
|
-
|
|
|
|
|
|
tableFmtCtx := tree.NewFmtCtx(tree.FmtSimple)
|
|
|
realNode.Table.Format(tableFmtCtx)
|
|
|
clause.table = tableFmtCtx.String()
|
|
|
|
|
|
-
|
|
|
- rowsStatement, err := parser.Parse(realNode.Rows.String())
|
|
|
- if err != nil {
|
|
|
- walkFuncErr = err
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
- var rowsWalkFuncErr error
|
|
|
- values := make([]clauseTableRowValue, 0)
|
|
|
-
|
|
|
- rowsWalker := &walk.AstWalker{Fn: func(ctx interface{}, node interface{}) (stop bool) {
|
|
|
- switch rowsNode := node.(type) {
|
|
|
- case *tree.ValuesClause:
|
|
|
- for _, row := range rowsNode.Rows {
|
|
|
- for _, column := range row {
|
|
|
- columnValue, err := parseValueExpr(column)
|
|
|
- if err != nil {
|
|
|
- rowsWalkFuncErr = err
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
- values = append(values, *columnValue)
|
|
|
- }
|
|
|
+
|
|
|
+ clause.tableRow = make(map[string]clauseTableRowValue)
|
|
|
+ columns := realNode.Columns.ToStrings()
|
|
|
+ valuesClause := realNode.Rows.Select.(*tree.ValuesClause)
|
|
|
+ for _, row := range valuesClause.Rows {
|
|
|
+ for i, column := range row {
|
|
|
+ columnValue, err := parseValueExpr(column)
|
|
|
+ if err != nil {
|
|
|
+ walkFuncErr = err
|
|
|
+ return true
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- return false
|
|
|
- }}
|
|
|
|
|
|
- _, err = rowsWalker.Walk(rowsStatement, nil)
|
|
|
- if err != nil {
|
|
|
- walkFuncErr = err
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
- if rowsWalkFuncErr != nil {
|
|
|
- walkFuncErr = rowsWalkFuncErr
|
|
|
- return true
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- tableRows := make(map[string]clauseTableRowValue)
|
|
|
- for i, column := range realNode.Columns.ToStrings() {
|
|
|
- tableRows[column] = values[i]
|
|
|
+ clause.tableRow[columns[i]] = *columnValue
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- clause.tableRow = tableRows
|
|
|
-
|
|
|
return false
|
|
|
},
|
|
|
}
|