()
| 1076 | } |
| 1077 | |
| 1078 | func (m *Sqlbridge) parseValueList() ([][]*ValueColumn, error) { |
| 1079 | |
| 1080 | if m.Cur().T != lex.TokenLeftParenthesis { |
| 1081 | return nil, m.ErrMsg("Expecting opening paren ( ") |
| 1082 | } |
| 1083 | |
| 1084 | var row []*ValueColumn |
| 1085 | values := make([][]*ValueColumn, 0) |
| 1086 | |
| 1087 | for { |
| 1088 | |
| 1089 | //u.Debug(m.Cur().String()) |
| 1090 | switch m.Cur().T { |
| 1091 | case lex.TokenLeftParenthesis: |
| 1092 | // start of row |
| 1093 | if len(row) > 0 { |
| 1094 | values = append(values, row) |
| 1095 | } |
| 1096 | row = make([]*ValueColumn, 0) |
| 1097 | case lex.TokenRightParenthesis: |
| 1098 | values = append(values, row) |
| 1099 | case lex.TokenFrom, lex.TokenInto, lex.TokenLimit, lex.TokenEOS, lex.TokenEOF: |
| 1100 | if len(row) > 0 { |
| 1101 | values = append(values, row) |
| 1102 | } |
| 1103 | return values, nil |
| 1104 | case lex.TokenValue: |
| 1105 | row = append(row, &ValueColumn{Value: value.NewStringValue(m.Cur().V)}) |
| 1106 | case lex.TokenInteger: |
| 1107 | iv, err := strconv.ParseInt(m.Cur().V, 10, 64) |
| 1108 | if err != nil { |
| 1109 | return nil, err |
| 1110 | } |
| 1111 | row = append(row, &ValueColumn{Value: value.NewIntValue(iv)}) |
| 1112 | case lex.TokenFloat: |
| 1113 | fv, err := strconv.ParseFloat(m.Cur().V, 64) |
| 1114 | if err != nil { |
| 1115 | return nil, err |
| 1116 | } |
| 1117 | row = append(row, &ValueColumn{Value: value.NewNumberValue(fv)}) |
| 1118 | case lex.TokenBool: |
| 1119 | bv, err := strconv.ParseBool(m.Cur().V) |
| 1120 | if err != nil { |
| 1121 | return nil, err |
| 1122 | } |
| 1123 | row = append(row, &ValueColumn{Value: value.NewBoolValue(bv)}) |
| 1124 | case lex.TokenIdentity: |
| 1125 | // TODO: this is a bug in lexer |
| 1126 | lv := m.Cur().V |
| 1127 | if bv, err := strconv.ParseBool(lv); err == nil { |
| 1128 | row = append(row, &ValueColumn{Value: value.NewBoolValue(bv)}) |
| 1129 | } else { |
| 1130 | // error? |
| 1131 | u.Warnf("Could not figure out how to use: %v", m.Cur()) |
| 1132 | } |
| 1133 | case lex.TokenLeftBracket: |
| 1134 | // an array of values? |
| 1135 | m.Next() // Consume the [ |
no test coverage detected