()
| 1037 | } |
| 1038 | |
| 1039 | func (m *Sqlbridge) parseUpdateList() (map[string]*ValueColumn, error) { |
| 1040 | |
| 1041 | cols := make(map[string]*ValueColumn) |
| 1042 | lastColName := "" |
| 1043 | for { |
| 1044 | |
| 1045 | //u.Debugf("col:%v cur:%v", lastColName, m.Cur().String()) |
| 1046 | switch m.Cur().T { |
| 1047 | case lex.TokenWhere, lex.TokenLimit, lex.TokenEOS, lex.TokenEOF: |
| 1048 | return cols, nil |
| 1049 | case lex.TokenValue: |
| 1050 | cols[lastColName] = &ValueColumn{Value: value.NewStringValue(m.Cur().V)} |
| 1051 | case lex.TokenInteger: |
| 1052 | iv, _ := strconv.ParseInt(m.Cur().V, 10, 64) |
| 1053 | cols[lastColName] = &ValueColumn{Value: value.NewIntValue(iv)} |
| 1054 | case lex.TokenComma, lex.TokenEqual: |
| 1055 | // don't need to do anything |
| 1056 | case lex.TokenIdentity: |
| 1057 | // TODO: this is a bug in lexer |
| 1058 | lv := m.Cur().V |
| 1059 | if bv, err := strconv.ParseBool(lv); err == nil { |
| 1060 | cols[lastColName] = &ValueColumn{Value: value.NewBoolValue(bv)} |
| 1061 | } else { |
| 1062 | lastColName = m.Cur().V |
| 1063 | } |
| 1064 | case lex.TokenUdfExpr: |
| 1065 | exprNode, err := expr.ParseExprWithFuncs(m, m.funcs) |
| 1066 | if err != nil { |
| 1067 | return nil, err |
| 1068 | } |
| 1069 | cols[lastColName] = &ValueColumn{Expr: exprNode} |
| 1070 | default: |
| 1071 | u.Warnf("don't know how to handle ? %v", m.Cur()) |
| 1072 | return nil, m.ErrMsg("expected column") |
| 1073 | } |
| 1074 | m.Next() |
| 1075 | } |
| 1076 | } |
| 1077 | |
| 1078 | func (m *Sqlbridge) parseValueList() ([][]*ValueColumn, error) { |
| 1079 |
no test coverage detected