convertBindParameters handles the conversion from bind parameters to variable values.
(ctx *sql.Context, types []uint32, formatCodes []int16, values [][]byte)
| 298 | |
| 299 | // convertBindParameters handles the conversion from bind parameters to variable values. |
| 300 | func (h *DoltgresHandler) convertBindParameters(ctx *sql.Context, types []uint32, formatCodes []int16, values [][]byte) (map[string]sqlparser.Expr, error) { |
| 301 | bindings := make(map[string]sqlparser.Expr, len(values)) |
| 302 | // It's valid to send just one format code that should be used by all values, so we extend the slice in that case |
| 303 | formatCodes, err := extendFormatCodes(len(values), formatCodes) |
| 304 | if err != nil { |
| 305 | return nil, err |
| 306 | } |
| 307 | typeColl, err := core.GetTypesCollectionFromContext(ctx, "") |
| 308 | if err != nil { |
| 309 | return nil, err |
| 310 | } |
| 311 | for i := range values { |
| 312 | formatCode := formatCodes[i] |
| 313 | dgType, err := typeColl.GetType(ctx, id.Type(id.Cache().ToInternal(types[i]))) |
| 314 | if err != nil { |
| 315 | return nil, err |
| 316 | } |
| 317 | if values[i] != nil { |
| 318 | if formatCode == 0 { |
| 319 | v, err := dgType.IoInput(ctx, string(values[i])) |
| 320 | if err != nil { |
| 321 | return nil, err |
| 322 | } |
| 323 | bindings[fmt.Sprintf("v%d", i+1)] = sqlparser.InjectedExpr{Expression: pgexprs.NewUnsafeLiteral(v, dgType)} |
| 324 | } else { |
| 325 | v, err := dgType.CallReceive(ctx, values[i]) |
| 326 | if err != nil { |
| 327 | return nil, err |
| 328 | } |
| 329 | bindings[fmt.Sprintf("v%d", i+1)] = sqlparser.InjectedExpr{Expression: pgexprs.NewUnsafeLiteral(v, dgType)} |
| 330 | } |
| 331 | } else { |
| 332 | bindings[fmt.Sprintf("v%d", i+1)] = sqlparser.InjectedExpr{Expression: pgexprs.NewUnsafeLiteral(nil, dgType)} |
| 333 | } |
| 334 | } |
| 335 | return bindings, nil |
| 336 | } |
| 337 | |
| 338 | var queryLoggingRegex = regexp.MustCompile(`[\r\n\t ]+`) |
| 339 |
no test coverage detected