/usr/include/mongo/s/field_parser.h is in mongodb-dev 1:2.4.9-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | /**
* Copyright (C) 2012 10gen Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <string>
#include "mongo/bson/bson_field.h"
#include "mongo/bson/util/misc.h" // for Date_t
#include "mongo/db/jsobj.h"
namespace mongo {
class FieldParser {
public:
/**
* Returns true and fills in 'out' with the contents of the field described by 'field'
* or with the value in 'def', depending on whether the field is present and has the
* correct type in 'doc' or not, respectively. Otherwise, if the field exists but has
* the wrong type, returns false.
*
* NOTE ON BSON OWNERSHIP:
*
* The caller must assume that this class will point to data inside 'doc' without
* copying it. In practice this means that 'doc' MUST EXIST for as long as 'out'
* stays in scope.
*/
enum FieldState {
// The field is present but has the wrong type
FIELD_INVALID = 0,
// The field is present and has the correct type
FIELD_SET,
// The field is absent in the BSON object but set from default
FIELD_DEFAULT,
// The field is absent and no default was specified
FIELD_NONE
};
static FieldState extract(BSONObj doc,
const BSONField<bool>& field,
bool* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<BSONArray>& field,
BSONArray* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<BSONObj>& field,
BSONObj* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<Date_t>& field,
Date_t* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<string>& field,
string* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<OID>& field,
OID* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<int>& field,
int* out,
string* errMsg = NULL);
static FieldState extract(BSONObj doc,
const BSONField<long long>& field,
long long* out,
string* errMsg = NULL);
/**
* The following extractNumber methods do implicit conversion between any numeric type and
* the BSONField type. This can be useful when an exact numeric type is not needed, for
* example if the field is sometimes modified from the shell which can change the type.
*/
static FieldState extractNumber(BSONObj doc,
const BSONField<int>& field,
int* out,
string* errMsg = NULL);
static FieldState extractNumber(BSONObj doc,
const BSONField<long long>& field,
long long* out,
string* errMsg = NULL);
/**
* The following extract methods are templatized to handle extraction of vectors and
* maps of sub-objects. Keys in the map should be StringData compatible.
*
* It's possible to nest extraction of vectors and maps to any depth, i.e:
*
* vector<map<string,vector<string> > > val;
* FieldParser::extract(doc, field, val, &val);
*/
template<typename T>
static FieldState extract(BSONObj doc,
const BSONField<vector<T> >& field,
vector<T>* out,
string* errMsg = NULL);
template<typename K, typename T>
static FieldState extract(BSONObj doc,
const BSONField<map<K, T> >& field,
map<K, T>* out,
string* errMsg = NULL);
};
} // namespace mongo
// Inline functions for templating
#include "field_parser-inl.h"
|