Beispiel #1
0
    FieldParser::FieldState FieldParser::extract(BSONObj doc,
                              const BSONField<BSONObj>& field,
                              BSONObj* out,
                              string* errMsg)
    {
        BSONElement elem = doc[field.name()];
        if (elem.eoo()) {
            if (field.hasDefault()) {
                *out = field.getDefault();
                return FIELD_DEFAULT;
            }
            else {
                return FIELD_NONE;
            }
        }

        if (elem.type() == Object) {
            *out = elem.embeddedObject().getOwned();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "object", errMsg);
        return FIELD_INVALID;
    }
Beispiel #2
0
    FieldParser::FieldState FieldParser::extract(BSONObj doc,
                              const BSONField<bool>& field,
                              bool* out,
                              string* errMsg)
    {
        BSONElement elem = doc[field.name()];
        if (elem.eoo()) {
            if (field.hasDefault()) {
                *out = field.getDefault();
                return FIELD_DEFAULT;
            }
            else {
                return FIELD_NONE;
            }
        }

        if (elem.type() == Bool) {
            *out = elem.boolean();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "boolean", errMsg);
        return FIELD_INVALID;
    }
Beispiel #3
0
    FieldParser::FieldState FieldParser::extractNumber(BSONObj doc,
                                    const BSONField<long long>& field,
                                    long long* out,
                                    string* errMsg)
    {
        BSONElement elem = doc[field.name()];
        if (elem.eoo()) {
            if (field.hasDefault()) {
                *out = field.getDefault();
                return FIELD_DEFAULT;
            }
            else {
                return FIELD_NONE;
            }
        }

        if (elem.isNumber()) {
            *out = elem.numberLong();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "number", errMsg);
        return FIELD_INVALID;
    }
Beispiel #4
0
    FieldParser::FieldState FieldParser::extract(BSONObj doc,
                              const BSONField<int>& field,
                              int* out,
                              string* errMsg)
    {
        BSONElement elem = doc[field.name()];
        if (elem.eoo()) {
            if (field.hasDefault()) {
                *out = field.getDefault();
                return FIELD_DEFAULT;
            }
            else {
                return FIELD_NONE;
            }
        }

        if (elem.type() == NumberInt) {
            *out = elem.numberInt();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "integer", errMsg);
        return FIELD_INVALID;
    }
Beispiel #5
0
    FieldParser::FieldState FieldParser::extract(BSONObj doc,
                              const BSONField<Date_t>& field,
                              Date_t* out,
                              string* errMsg)
    {
        BSONElement elem = doc[field.name()];
        if (elem.eoo()) {
            if (field.hasDefault()) {
                *out = field.getDefault();
                return FIELD_DEFAULT;
            }
            else {
                return FIELD_NONE;
            }
        }

        if (elem.type() == Date) {
            *out = elem.date();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "date or timestamp", errMsg);
        return FIELD_INVALID;
    }
Beispiel #6
0
 FieldParser::FieldState FieldParser::extract( BSONObj doc,
                                               const BSONField<BSONObj>& field,
                                               BSONObj* out,
                                               string* errMsg ) {
     return extract( doc[field.name()], field, out, errMsg );
 }
Beispiel #7
0
 FieldParser::FieldState FieldParser::extractNumber( BSONObj doc,
                                                     const BSONField<double>& field,
                                                     double* out,
                                                     string* errMsg ) {
     return extractNumber( doc[field.name()], field, out, errMsg );
 }