// static Status CanonicalQuery::canonicalize(LiteParsedQuery* lpq, CanonicalQuery** out, const MatchExpressionParser::WhereCallback& whereCallback) { std::auto_ptr<LiteParsedQuery> autoLpq(lpq); // Make MatchExpression. StatusWithMatchExpression swme = MatchExpressionParser::parse(autoLpq->getFilter(), whereCallback); if (!swme.isOK()) { return swme.getStatus(); } // Make the CQ we'll hopefully return. std::auto_ptr<CanonicalQuery> cq(new CanonicalQuery()); // Takes ownership of lpq and the MatchExpression* in swme. Status initStatus = cq->init(autoLpq.release(), whereCallback, swme.getValue()); if (!initStatus.isOK()) { return initStatus; } *out = cq.release(); return Status::OK(); }
// static StatusWith<std::unique_ptr<CanonicalQuery>> CanonicalQuery::canonicalize( LiteParsedQuery* lpq, const MatchExpressionParser::WhereCallback& whereCallback) { std::unique_ptr<LiteParsedQuery> autoLpq(lpq); // Make MatchExpression. StatusWithMatchExpression statusWithMatcher = MatchExpressionParser::parse(autoLpq->getFilter(), whereCallback); if (!statusWithMatcher.isOK()) { return statusWithMatcher.getStatus(); } std::unique_ptr<MatchExpression> me = std::move(statusWithMatcher.getValue()); // Make the CQ we'll hopefully return. std::unique_ptr<CanonicalQuery> cq(new CanonicalQuery()); Status initStatus = cq->init(autoLpq.release(), whereCallback, me.release()); if (!initStatus.isOK()) { return initStatus; } return std::move(cq); }