Beispiel #1
0
    FieldParser::FieldState FieldParser::extract(BSONObj doc,
                              const BSONField<OID>& field,
                              OID* 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() == jstOID) {
            *out = elem.__oid();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "OID", errMsg);
        return FIELD_INVALID;
    }
Beispiel #2
0
    FieldParser::FieldState FieldParser::extractNumber(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.isNumber()) {
            *out = elem.numberInt();
            return FIELD_SET;
        }

        _genFieldErrMsg(doc, field, "number", errMsg);
        return FIELD_INVALID;
    }
Beispiel #3
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;
    }