parseRequest parses the incoming request
(ctx context.Context, qc *queryContext)
| 1720 | |
| 1721 | // parseRequest parses the incoming request |
| 1722 | func parseRequest(ctx context.Context, qc *queryContext) error { |
| 1723 | start := time.Now() |
| 1724 | defer func() { |
| 1725 | qc.latency.Parsing = time.Since(start) |
| 1726 | }() |
| 1727 | |
| 1728 | var needVars []string |
| 1729 | upsertQuery := qc.req.Query |
| 1730 | if len(qc.req.Mutations) > 0 { |
| 1731 | // parsing mutations |
| 1732 | qc.gmuList = make([]*dql.Mutation, 0, len(qc.req.Mutations)) |
| 1733 | for _, mu := range qc.req.Mutations { |
| 1734 | gmu, err := ParseMutationObject(ctx, mu) |
| 1735 | if err != nil { |
| 1736 | return err |
| 1737 | } |
| 1738 | |
| 1739 | qc.gmuList = append(qc.gmuList, gmu) |
| 1740 | } |
| 1741 | |
| 1742 | if err := addQueryIfUnique(ctx, qc); err != nil { |
| 1743 | return err |
| 1744 | } |
| 1745 | |
| 1746 | qc.uidRes = make(map[string][]string) |
| 1747 | qc.valRes = make(map[string]*types.ShardedMap) |
| 1748 | var err error |
| 1749 | upsertQuery, err = buildUpsertQuery(qc) |
| 1750 | if err != nil { |
| 1751 | return err |
| 1752 | } |
| 1753 | needVars = findMutationVars(qc) |
| 1754 | if upsertQuery == "" { |
| 1755 | if len(needVars) > 0 { |
| 1756 | return errors.Errorf("variables %v not defined", needVars) |
| 1757 | } |
| 1758 | |
| 1759 | return nil |
| 1760 | } |
| 1761 | } |
| 1762 | |
| 1763 | // parsing the updated query |
| 1764 | var err error |
| 1765 | qc.dqlRes, err = dql.ParseWithNeedVars(dql.Request{ |
| 1766 | Str: upsertQuery, |
| 1767 | Variables: qc.req.Vars, |
| 1768 | }, needVars) |
| 1769 | if err != nil { |
| 1770 | return err |
| 1771 | } |
| 1772 | return validateQuery(qc.dqlRes.Query) |
| 1773 | } |
| 1774 | |
| 1775 | // verifyUnique verifies uniqueness of mutation |
| 1776 | func verifyUnique(qc *queryContext, qr query.Request) error { |
no test coverage detected