(keyOrPrefix string)
| 45 | } |
| 46 | |
| 47 | func (runner *RuntimeQueryRunner) get(keyOrPrefix string) ([]record.Record, error) { |
| 48 | query := strings.TrimPrefix( |
| 49 | keyOrPrefix, |
| 50 | runner.keyPrefix, |
| 51 | ) |
| 52 | |
| 53 | log.Infof("netquery: executing custom SQL query: %q", query) |
| 54 | |
| 55 | var result []map[string]interface{} |
| 56 | if err := runner.db.Execute(context.Background(), query, orm.WithResult(&result)); err != nil { |
| 57 | return nil, fmt.Errorf("failed to perform query %q: %w", query, err) |
| 58 | } |
| 59 | |
| 60 | // we need to wrap the result slice into a map as portbase/database attempts |
| 61 | // to inject a _meta field. |
| 62 | blob, err := json.Marshal(map[string]interface{}{ |
| 63 | "result": result, |
| 64 | }) |
| 65 | if err != nil { |
| 66 | return nil, fmt.Errorf("failed to marshal result: %w", err) |
| 67 | } |
| 68 | |
| 69 | // construct a new record wrapper that uses the already prepared JSON blob. |
| 70 | key := fmt.Sprintf("%s:%s", runner.reg.DatabaseName(), keyOrPrefix) |
| 71 | wrapper, err := record.NewWrapper(key, new(record.Meta), dsd.JSON, blob) |
| 72 | if err != nil { |
| 73 | return nil, fmt.Errorf("failed to create record wrapper: %w", err) |
| 74 | } |
| 75 | |
| 76 | return []record.Record{wrapper}, nil |
| 77 | } |
nothing calls this directly
no test coverage detected