faststep 0.0.8.1 → 0.1.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/faststep/bson.c +193 -101
- data/ext/faststep/bson.h +715 -33
- data/ext/faststep/connection.c +6 -6
- data/ext/faststep/connection.h +1 -1
- data/ext/faststep/cursor.c +1 -1
- data/ext/faststep/encoding.c +136 -0
- data/ext/faststep/encoding.h +54 -0
- data/ext/faststep/gridfs.c +7 -8
- data/ext/faststep/gridfs.h +8 -2
- data/ext/faststep/md5.h +2 -0
- data/ext/faststep/mongo.c +545 -209
- data/ext/faststep/mongo.h +373 -36
- data/ext/faststep/platform_hacks.h +3 -2
- data/lib/faststep/version.rb +1 -1
- metadata +10 -6
data/ext/faststep/bson.h
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
/**
|
2
|
+
* @file bson.h
|
3
|
+
* @brief BSON Declarations
|
4
|
+
*/
|
2
5
|
|
3
|
-
/* Copyright 2009, 2010 10gen Inc.
|
6
|
+
/* Copyright 2009, 2010, 2011 10gen Inc.
|
4
7
|
*
|
5
8
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
9
|
* you may not use this file except in compliance with the License.
|
@@ -21,6 +24,20 @@
|
|
21
24
|
#include "platform_hacks.h"
|
22
25
|
#include <time.h>
|
23
26
|
|
27
|
+
/* Generic error and warning flags. */
|
28
|
+
#define BSON_OK 0
|
29
|
+
#define BSON_ERROR -1
|
30
|
+
#define BSON_WARNING -2
|
31
|
+
|
32
|
+
/* BSON validity flags. */
|
33
|
+
#define BSON_VALID 0x0
|
34
|
+
#define BSON_NOT_UTF8 0x2 /**< Either a key or a string is not valid UTF-8. */
|
35
|
+
#define BSON_FIELD_HAS_DOT 0x4 /**< Warning: key contains '.' character. */
|
36
|
+
#define BSON_FIELD_INIT_DOLLAR 0x8 /**< Warning: key starts with '$' character. */
|
37
|
+
|
38
|
+
/* BSON error codes. */
|
39
|
+
#define BSON_OBJECT_FINISHED 1 /**< Trying to modify a finished BSON object. */
|
40
|
+
|
24
41
|
MONGO_EXTERN_C_START
|
25
42
|
|
26
43
|
typedef enum {
|
@@ -50,6 +67,8 @@ typedef int bson_bool_t;
|
|
50
67
|
typedef struct {
|
51
68
|
char * data;
|
52
69
|
bson_bool_t owned;
|
70
|
+
int err; /**< Bitfield representing errors or warnings on this bson object. */
|
71
|
+
char* errstr; /**< A string representation of the most recent error or warning. */
|
53
72
|
} bson;
|
54
73
|
|
55
74
|
typedef struct {
|
@@ -64,6 +83,8 @@ typedef struct {
|
|
64
83
|
bson_bool_t finished;
|
65
84
|
int stack[32];
|
66
85
|
int stackPos;
|
86
|
+
int err; /**< Bitfield representing errors or warnings on this buffer */
|
87
|
+
char* errstr; /**< A string representation of the most recent error or warning. */
|
67
88
|
} bson_buffer;
|
68
89
|
|
69
90
|
#pragma pack(1)
|
@@ -83,121 +104,738 @@ typedef struct {
|
|
83
104
|
/* ----------------------------
|
84
105
|
READING
|
85
106
|
------------------------------ */
|
86
|
-
|
107
|
+
/**
|
108
|
+
* Returns a pointer to a static empty BSON object.
|
109
|
+
*
|
110
|
+
* @param obj the BSON object to initialize.
|
111
|
+
*
|
112
|
+
* @return the empty initialized BSON object.
|
113
|
+
*/
|
87
114
|
bson * bson_empty(bson * obj); /* returns pointer to static empty bson object */
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Copy BSON data from one object to another.
|
118
|
+
*
|
119
|
+
* @param out the copy destination BSON object.
|
120
|
+
* @param in the copy source BSON object.
|
121
|
+
*/
|
88
122
|
void bson_copy(bson* out, const bson* in); /* puts data in new buffer. NOOP if out==NULL */
|
89
|
-
|
90
|
-
|
123
|
+
|
124
|
+
/**
|
125
|
+
* Make a BSON object from a BSON buffer.
|
126
|
+
*
|
127
|
+
* @param b the destination BSON object.
|
128
|
+
* @param buf the source BSON buffer object.
|
129
|
+
*
|
130
|
+
* @return BSON_OK or BSON_ERROR.
|
131
|
+
*/
|
132
|
+
int bson_from_buffer(bson * b, bson_buffer * buf);
|
133
|
+
|
134
|
+
/**
|
135
|
+
* Initialize a BSON object.
|
136
|
+
*
|
137
|
+
* @param b the BSON object to initialize.
|
138
|
+
* @param data the raw BSON data.
|
139
|
+
* @param mine whether or not the data's allocation should be freed by bson_destroy
|
140
|
+
*
|
141
|
+
* @return BSON_OK or BSON_ERROR.
|
142
|
+
*/
|
143
|
+
int bson_init( bson * b , char * data , bson_bool_t mine );
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Size of a BSON object.
|
147
|
+
*
|
148
|
+
* @param b the BSON object.
|
149
|
+
*
|
150
|
+
* @return the size.
|
151
|
+
*/
|
91
152
|
int bson_size(const bson * b );
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Destroy a BSON object.
|
156
|
+
*
|
157
|
+
* @param b the object to destroy.
|
158
|
+
*/
|
92
159
|
void bson_destroy( bson * b );
|
93
160
|
|
161
|
+
/**
|
162
|
+
* Print a string representation of a BSON object.
|
163
|
+
*
|
164
|
+
* @param b the BSON object to print.
|
165
|
+
*/
|
94
166
|
void bson_print( bson * b );
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Print a string representation of a BSON object.
|
170
|
+
*
|
171
|
+
* @param bson the raw data to print.
|
172
|
+
* @param depth the depth to recurse the object.x
|
173
|
+
*/
|
95
174
|
void bson_print_raw( const char * bson , int depth );
|
96
175
|
|
97
176
|
/* advances iterator to named field */
|
98
177
|
/* returns bson_eoo (which is false) if field not found */
|
178
|
+
/**
|
179
|
+
* Advance a bson_iterator to the named field.
|
180
|
+
*
|
181
|
+
* @param it the bson_iterator to use.
|
182
|
+
* @param obj the BSON object to use.
|
183
|
+
* @param name the name of the field to find.
|
184
|
+
*
|
185
|
+
* @return the type of the found object, bson_eoo if it is not found.
|
186
|
+
*/
|
99
187
|
bson_type bson_find(bson_iterator* it, const bson* obj, const char* name);
|
100
188
|
|
189
|
+
/**
|
190
|
+
* Initialize a bson_iterator.
|
191
|
+
*
|
192
|
+
* @param i the bson_iterator to initialize.
|
193
|
+
* @param bson the BSON object to associate with the iterator.
|
194
|
+
*/
|
101
195
|
void bson_iterator_init( bson_iterator * i , const char * bson );
|
102
196
|
|
103
197
|
/* more returns true for eoo. best to loop with bson_iterator_next(&it) */
|
198
|
+
/**
|
199
|
+
* Check to see if the bson_iterator has more data.
|
200
|
+
*
|
201
|
+
* @param i the iterator.
|
202
|
+
*
|
203
|
+
* @return returns true if there is more data.
|
204
|
+
*/
|
104
205
|
bson_bool_t bson_iterator_more( const bson_iterator * i );
|
206
|
+
|
207
|
+
/**
|
208
|
+
* Point the iterator at the next BSON object.
|
209
|
+
*
|
210
|
+
* @param i the bson_iterator.
|
211
|
+
*
|
212
|
+
* @return the type of the next BSON object.
|
213
|
+
*/
|
105
214
|
bson_type bson_iterator_next( bson_iterator * i );
|
106
215
|
|
216
|
+
/**
|
217
|
+
* Get the type of the BSON object currently pointed to by the iterator.
|
218
|
+
*
|
219
|
+
* @param i the bson_iterator
|
220
|
+
*
|
221
|
+
* @return the type of the current BSON object.
|
222
|
+
*/
|
107
223
|
bson_type bson_iterator_type( const bson_iterator * i );
|
224
|
+
|
225
|
+
/**
|
226
|
+
* Get the key of the BSON object currently pointed to by the iterator.
|
227
|
+
*
|
228
|
+
* @param i the bson_iterator
|
229
|
+
*
|
230
|
+
* @return the key of the current BSON object.
|
231
|
+
*/
|
108
232
|
const char * bson_iterator_key( const bson_iterator * i );
|
233
|
+
|
234
|
+
/**
|
235
|
+
* Get the value of the BSON object currently pointed to by the iterator.
|
236
|
+
*
|
237
|
+
* @param i the bson_iterator
|
238
|
+
*
|
239
|
+
* @return the value of the current BSON object.
|
240
|
+
*/
|
109
241
|
const char * bson_iterator_value( const bson_iterator * i );
|
110
242
|
|
111
243
|
/* these convert to the right type (return 0 if non-numeric) */
|
244
|
+
/**
|
245
|
+
* Get the double value of the BSON object currently pointed to by the
|
246
|
+
* iterator.
|
247
|
+
*
|
248
|
+
* @param i the bson_iterator
|
249
|
+
*
|
250
|
+
* @return the value of the current BSON object.
|
251
|
+
*/
|
112
252
|
double bson_iterator_double( const bson_iterator * i );
|
253
|
+
|
254
|
+
/**
|
255
|
+
* Get the int value of the BSON object currently pointed to by the iterator.
|
256
|
+
*
|
257
|
+
* @param i the bson_iterator
|
258
|
+
*
|
259
|
+
* @return the value of the current BSON object.
|
260
|
+
*/
|
113
261
|
int bson_iterator_int( const bson_iterator * i );
|
262
|
+
|
263
|
+
/**
|
264
|
+
* Get the long value of the BSON object currently pointed to by the iterator.
|
265
|
+
*
|
266
|
+
* @param i the bson_iterator
|
267
|
+
*
|
268
|
+
* @return the value of the current BSON object.
|
269
|
+
*/
|
114
270
|
int64_t bson_iterator_long( const bson_iterator * i );
|
115
271
|
|
116
272
|
/* return the bson timestamp as a whole or in parts */
|
273
|
+
/**
|
274
|
+
* Get the timestamp value of the BSON object currently pointed to by
|
275
|
+
* the iterator.
|
276
|
+
*
|
277
|
+
* @param i the bson_iterator
|
278
|
+
*
|
279
|
+
* @return the value of the current BSON object.
|
280
|
+
*/
|
117
281
|
bson_timestamp_t bson_iterator_timestamp( const bson_iterator * i );
|
118
282
|
|
283
|
+
/**
|
284
|
+
* Get the boolean value of the BSON object currently pointed to by
|
285
|
+
* the iterator.
|
286
|
+
*
|
287
|
+
* @param i the bson_iterator
|
288
|
+
*
|
289
|
+
* @return the value of the current BSON object.
|
290
|
+
*/
|
119
291
|
/* false: boolean false, 0 in any type, or null */
|
120
292
|
/* true: anything else (even empty strings and objects) */
|
121
293
|
bson_bool_t bson_iterator_bool( const bson_iterator * i );
|
122
294
|
|
295
|
+
/**
|
296
|
+
* Get the double value of the BSON object currently pointed to by the
|
297
|
+
* iterator. Assumes the correct type is used.
|
298
|
+
*
|
299
|
+
* @param i the bson_iterator
|
300
|
+
*
|
301
|
+
* @return the value of the current BSON object.
|
302
|
+
*/
|
123
303
|
/* these assume you are using the right type */
|
124
304
|
double bson_iterator_double_raw( const bson_iterator * i );
|
305
|
+
|
306
|
+
/**
|
307
|
+
* Get the int value of the BSON object currently pointed to by the
|
308
|
+
* iterator. Assumes the correct type is used.
|
309
|
+
*
|
310
|
+
* @param i the bson_iterator
|
311
|
+
*
|
312
|
+
* @return the value of the current BSON object.
|
313
|
+
*/
|
125
314
|
int bson_iterator_int_raw( const bson_iterator * i );
|
315
|
+
|
316
|
+
/**
|
317
|
+
* Get the long value of the BSON object currently pointed to by the
|
318
|
+
* iterator. Assumes the correct type is used.
|
319
|
+
*
|
320
|
+
* @param i the bson_iterator
|
321
|
+
*
|
322
|
+
* @return the value of the current BSON object.
|
323
|
+
*/
|
126
324
|
int64_t bson_iterator_long_raw( const bson_iterator * i );
|
325
|
+
|
326
|
+
/**
|
327
|
+
* Get the bson_bool_t value of the BSON object currently pointed to by the
|
328
|
+
* iterator. Assumes the correct type is used.
|
329
|
+
*
|
330
|
+
* @param i the bson_iterator
|
331
|
+
*
|
332
|
+
* @return the value of the current BSON object.
|
333
|
+
*/
|
127
334
|
bson_bool_t bson_iterator_bool_raw( const bson_iterator * i );
|
335
|
+
|
336
|
+
/**
|
337
|
+
* Get the bson_oid_t value of the BSON object currently pointed to by the
|
338
|
+
* iterator.
|
339
|
+
*
|
340
|
+
* @param i the bson_iterator
|
341
|
+
*
|
342
|
+
* @return the value of the current BSON object.
|
343
|
+
*/
|
128
344
|
bson_oid_t* bson_iterator_oid( const bson_iterator * i );
|
129
345
|
|
346
|
+
/**
|
347
|
+
* Get the string value of the BSON object currently pointed to by the
|
348
|
+
* iterator.
|
349
|
+
*
|
350
|
+
* @param i the bson_iterator
|
351
|
+
*
|
352
|
+
* @return the value of the current BSON object.
|
353
|
+
*/
|
130
354
|
/* these can also be used with bson_code and bson_symbol*/
|
131
355
|
const char * bson_iterator_string( const bson_iterator * i );
|
356
|
+
|
357
|
+
/**
|
358
|
+
* Get the string length of the BSON object currently pointed to by the
|
359
|
+
* iterator.
|
360
|
+
*
|
361
|
+
* @param i the bson_iterator
|
362
|
+
*
|
363
|
+
* @return the length of the current BSON object.
|
364
|
+
*/
|
132
365
|
int bson_iterator_string_len( const bson_iterator * i );
|
133
366
|
|
367
|
+
/**
|
368
|
+
* Get the code value of the BSON object currently pointed to by the
|
369
|
+
* iterator. Works with bson_code, bson_codewscope, and bson_string
|
370
|
+
* returns NULL for everything else.
|
371
|
+
*
|
372
|
+
* @param i the bson_iterator
|
373
|
+
*
|
374
|
+
* @return the code value of the current BSON object.
|
375
|
+
*/
|
134
376
|
/* works with bson_code, bson_codewscope, and bson_string */
|
135
377
|
/* returns NULL for everything else */
|
136
378
|
const char * bson_iterator_code(const bson_iterator * i);
|
137
379
|
|
380
|
+
/**
|
381
|
+
* Calls bson_empty on scope if not a bson_codewscope
|
382
|
+
*
|
383
|
+
* @param i the bson_iterator.
|
384
|
+
* @param scope the bson scope.
|
385
|
+
*/
|
138
386
|
/* calls bson_empty on scope if not a bson_codewscope */
|
139
387
|
void bson_iterator_code_scope(const bson_iterator * i, bson * scope);
|
140
388
|
|
389
|
+
/**
|
390
|
+
* Get the date value of the BSON object currently pointed to by the
|
391
|
+
* iterator.
|
392
|
+
*
|
393
|
+
* @param i the bson_iterator
|
394
|
+
*
|
395
|
+
* @return the date value of the current BSON object.
|
396
|
+
*/
|
141
397
|
/* both of these only work with bson_date */
|
142
398
|
bson_date_t bson_iterator_date(const bson_iterator * i);
|
399
|
+
|
400
|
+
/**
|
401
|
+
* Get the time value of the BSON object currently pointed to by the
|
402
|
+
* iterator.
|
403
|
+
*
|
404
|
+
* @param i the bson_iterator
|
405
|
+
*
|
406
|
+
* @return the time value of the current BSON object.
|
407
|
+
*/
|
143
408
|
time_t bson_iterator_time_t(const bson_iterator * i);
|
144
409
|
|
410
|
+
/**
|
411
|
+
* Get the length of the BSON binary object currently pointed to by the
|
412
|
+
* iterator.
|
413
|
+
*
|
414
|
+
* @param i the bson_iterator
|
415
|
+
*
|
416
|
+
* @return the length of the current BSON binary object.
|
417
|
+
*/
|
145
418
|
int bson_iterator_bin_len( const bson_iterator * i );
|
419
|
+
|
420
|
+
/**
|
421
|
+
* Get the type of the BSON binary object currently pointed to by the
|
422
|
+
* iterator.
|
423
|
+
*
|
424
|
+
* @param i the bson_iterator
|
425
|
+
*
|
426
|
+
* @return the type of the current BSON binary object.
|
427
|
+
*/
|
146
428
|
char bson_iterator_bin_type( const bson_iterator * i );
|
429
|
+
|
430
|
+
/**
|
431
|
+
* Get the value of the BSON binary object currently pointed to by the
|
432
|
+
* iterator.
|
433
|
+
*
|
434
|
+
* @param i the bson_iterator
|
435
|
+
*
|
436
|
+
* @return the value of the current BSON binary object.
|
437
|
+
*/
|
147
438
|
const char * bson_iterator_bin_data( const bson_iterator * i );
|
148
439
|
|
440
|
+
/**
|
441
|
+
* Get the value of the BSON regex object currently pointed to by the
|
442
|
+
* iterator.
|
443
|
+
*
|
444
|
+
* @param i the bson_iterator
|
445
|
+
*
|
446
|
+
* @return the value of the current BSON regex object.
|
447
|
+
*/
|
149
448
|
const char * bson_iterator_regex( const bson_iterator * i );
|
449
|
+
|
450
|
+
/**
|
451
|
+
* Get the options of the BSON regex object currently pointed to by the
|
452
|
+
* iterator.
|
453
|
+
*
|
454
|
+
* @param i the bson_iterator.
|
455
|
+
*
|
456
|
+
* @return the options of the current BSON regex object.
|
457
|
+
*/
|
150
458
|
const char * bson_iterator_regex_opts( const bson_iterator * i );
|
151
459
|
|
152
460
|
/* these work with bson_object and bson_array */
|
461
|
+
/**
|
462
|
+
* Get the BSON subobject currently pointed to by the
|
463
|
+
* iterator.
|
464
|
+
*
|
465
|
+
* @param i the bson_iterator.
|
466
|
+
* @param sub the BSON subobject destination.
|
467
|
+
*/
|
153
468
|
void bson_iterator_subobject(const bson_iterator * i, bson * sub);
|
469
|
+
|
470
|
+
/**
|
471
|
+
* Get a bson_iterator that on the BSON subobject.
|
472
|
+
*
|
473
|
+
* @param i the bson_iterator.
|
474
|
+
* @param sub the iterator to point at the BSON subobject.
|
475
|
+
*/
|
154
476
|
void bson_iterator_subiterator(const bson_iterator * i, bson_iterator * sub);
|
155
477
|
|
156
478
|
/* str must be at least 24 hex chars + null byte */
|
479
|
+
/**
|
480
|
+
* Create a bson_oid_t from a string.
|
481
|
+
*
|
482
|
+
* @param oid the bson_oid_t destination.
|
483
|
+
* @param str a null terminated string comprised of at least 24 hex chars.
|
484
|
+
*/
|
157
485
|
void bson_oid_from_string(bson_oid_t* oid, const char* str);
|
486
|
+
|
487
|
+
/**
|
488
|
+
* Create a string representation of the bson_oid_t.
|
489
|
+
*
|
490
|
+
* @param oid the bson_oid_t source.
|
491
|
+
* @param str the string representation destination.
|
492
|
+
*/
|
158
493
|
void bson_oid_to_string(const bson_oid_t* oid, char* str);
|
494
|
+
|
495
|
+
/**
|
496
|
+
* Create a bson_oid object.
|
497
|
+
*
|
498
|
+
* @param oid the destination for the newly created bson_oid_t.
|
499
|
+
*/
|
159
500
|
void bson_oid_gen(bson_oid_t* oid);
|
160
501
|
|
502
|
+
/**
|
503
|
+
* Get the time a bson_oid_t was created.
|
504
|
+
*
|
505
|
+
* @param oid the bson_oid_t.
|
506
|
+
*/
|
161
507
|
time_t bson_oid_generated_time(bson_oid_t* oid); /* Gives the time the OID was created */
|
162
508
|
|
163
509
|
/* ----------------------------
|
164
510
|
BUILDING
|
165
511
|
------------------------------ */
|
512
|
+
/**
|
513
|
+
* Initialize a bson_buffer.
|
514
|
+
*
|
515
|
+
* @param b the bson_buffer object to initialize.
|
516
|
+
*
|
517
|
+
* @return 0. Exits if cannot allocate memory.
|
518
|
+
*/
|
519
|
+
int bson_buffer_init( bson_buffer * b );
|
166
520
|
|
167
|
-
|
168
|
-
|
521
|
+
/**
|
522
|
+
* Grow a bson_buffer object.
|
523
|
+
*
|
524
|
+
* @param b the bson_buffer to grow.
|
525
|
+
* @param bytesNeeded the additional number of bytes needed.
|
526
|
+
*
|
527
|
+
* @return BSON_OK or BSON_ERROR with the bson_buffer error object set.
|
528
|
+
* Exits if allocation fails.
|
529
|
+
*/
|
530
|
+
int bson_ensure_space( bson_buffer * b, const int bytesNeeded );
|
169
531
|
|
170
532
|
/**
|
171
|
-
*
|
533
|
+
* Finalize a bson_buffer object.
|
534
|
+
*
|
535
|
+
* @param b the bson_buffer object to finalize.
|
536
|
+
*
|
537
|
+
* @return the standard error code. To deallocate memory,
|
538
|
+
* call bson_buffer_destroy on the bson_buffer object.
|
539
|
+
*/
|
540
|
+
int bson_buffer_finish( bson_buffer * b );
|
541
|
+
|
542
|
+
/**
|
543
|
+
* Destroy a bson_buffer object.
|
544
|
+
*
|
545
|
+
* @param b the bson_buffer to destroy.
|
546
|
+
*
|
172
547
|
*/
|
173
|
-
char * bson_buffer_finish( bson_buffer * b );
|
174
548
|
void bson_buffer_destroy( bson_buffer * b );
|
175
549
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
550
|
+
/**
|
551
|
+
* Append a previously created bson_oid_t to a bson_buffer.
|
552
|
+
*
|
553
|
+
* @param b the bson_buffer to append to.
|
554
|
+
* @param name the key for the bson_oid_t.
|
555
|
+
* @param oid the bson_oid_t to append.
|
556
|
+
*
|
557
|
+
* @return BSON_OK or BSON_ERROR.
|
558
|
+
*/
|
559
|
+
int bson_append_oid( bson_buffer * b, const char * name, const bson_oid_t* oid );
|
560
|
+
|
561
|
+
/**
|
562
|
+
* Append a bson_oid_t to a bson_buffer.
|
563
|
+
*
|
564
|
+
* @param b the bson_buffer to append to.
|
565
|
+
* @param name the key for the bson_oid_t.
|
566
|
+
*
|
567
|
+
* @return BSON_OK or BSON_ERROR.
|
568
|
+
*/
|
569
|
+
int bson_append_new_oid( bson_buffer * b, const char * name );
|
570
|
+
|
571
|
+
/**
|
572
|
+
* Append an int to a bson_buffer.
|
573
|
+
*
|
574
|
+
* @param b the bson_buffer to append to.
|
575
|
+
* @param name the key for the int.
|
576
|
+
* @param i the int to append.
|
577
|
+
*
|
578
|
+
* @return BSON_OK or BSON_ERROR.
|
579
|
+
*/
|
580
|
+
int bson_append_int( bson_buffer * b, const char * name, const int i );
|
581
|
+
|
582
|
+
/**
|
583
|
+
* Append an long to a bson_buffer.
|
584
|
+
*
|
585
|
+
* @param b the bson_buffer to append to.
|
586
|
+
* @param name the key for the long.
|
587
|
+
* @param i the long to append.
|
588
|
+
*
|
589
|
+
* @return BSON_OK or BSON_ERROR.
|
590
|
+
*/
|
591
|
+
int bson_append_long( bson_buffer * b, const char * name, const int64_t i );
|
592
|
+
|
593
|
+
/**
|
594
|
+
* Append an double to a bson_buffer.
|
595
|
+
*
|
596
|
+
* @param b the bson_buffer to append to.
|
597
|
+
* @param name the key for the double.
|
598
|
+
* @param d the double to append.
|
599
|
+
*
|
600
|
+
* @return BSON_OK or BSON_ERROR.
|
601
|
+
*/
|
602
|
+
int bson_append_double( bson_buffer * b, const char * name, const double d );
|
603
|
+
|
604
|
+
/**
|
605
|
+
* Append a string to a bson_buffer.
|
606
|
+
*
|
607
|
+
* @param b the bson_buffer to append to.
|
608
|
+
* @param name the key for the string.
|
609
|
+
* @param str the string to append.
|
610
|
+
*
|
611
|
+
* @return BSON_OK or BSON_ERROR.
|
612
|
+
*/
|
613
|
+
int bson_append_string( bson_buffer * b, const char * name, const char * str );
|
614
|
+
|
615
|
+
/**
|
616
|
+
* Append len bytes of a string to a bson_buffer.
|
617
|
+
*
|
618
|
+
* @param b the bson_buffer to append to.
|
619
|
+
* @param name the key for the string.
|
620
|
+
* @param str the string to append.
|
621
|
+
* @param len the number of bytes from str to append.
|
622
|
+
*
|
623
|
+
* @return BSON_OK or BSON_ERROR.
|
624
|
+
*/
|
625
|
+
int bson_append_string_n( bson_buffer * b, const char * name, const char * str, int len);
|
626
|
+
|
627
|
+
/**
|
628
|
+
* Append a symbol to a bson_buffer.
|
629
|
+
*
|
630
|
+
* @param b the bson_buffer to append to.
|
631
|
+
* @param name the key for the symbol.
|
632
|
+
* @param str the symbol to append.
|
633
|
+
*
|
634
|
+
* @return BSON_OK or BSON_ERROR.
|
635
|
+
*/
|
636
|
+
int bson_append_symbol( bson_buffer * b, const char * name, const char * str );
|
637
|
+
|
638
|
+
/**
|
639
|
+
* Append len bytes of a symbol to a bson_buffer.
|
640
|
+
*
|
641
|
+
* @param b the bson_buffer to append to.
|
642
|
+
* @param name the key for the symbol.
|
643
|
+
* @param str the symbol to append.
|
644
|
+
* @param len the number of bytes from str to append.
|
645
|
+
*
|
646
|
+
* @return BSON_OK or BSON_ERROR.
|
647
|
+
*/
|
648
|
+
int bson_append_symbol_n( bson_buffer * b, const char * name, const char * str, int len );
|
649
|
+
|
650
|
+
/**
|
651
|
+
* Append code to a bson_buffer.
|
652
|
+
*
|
653
|
+
* @param b the bson_buffer to append to.
|
654
|
+
* @param name the key for the code.
|
655
|
+
* @param str the code to append.
|
656
|
+
* @param len the number of bytes from str to append.
|
657
|
+
*
|
658
|
+
* @return BSON_OK or BSON_ERROR.
|
659
|
+
*/
|
660
|
+
int bson_append_code( bson_buffer * b, const char * name, const char * str );
|
661
|
+
|
662
|
+
/**
|
663
|
+
* Append len bytes of code to a bson_buffer.
|
664
|
+
*
|
665
|
+
* @param b the bson_buffer to append to.
|
666
|
+
* @param name the key for the code.
|
667
|
+
* @param str the code to append.
|
668
|
+
* @param len the number of bytes from str to append.
|
669
|
+
*
|
670
|
+
* @return BSON_OK or BSON_ERROR.
|
671
|
+
*/
|
672
|
+
int bson_append_code_n( bson_buffer * b, const char * name, const char * str, int len );
|
673
|
+
|
674
|
+
/**
|
675
|
+
* Append code to a bson_buffer with scope.
|
676
|
+
*
|
677
|
+
* @param b the bson_buffer to append to.
|
678
|
+
* @param name the key for the code.
|
679
|
+
* @param str the string to append.
|
680
|
+
* @param scope a BSON object containing the scope.
|
681
|
+
*
|
682
|
+
* @return BSON_OK or BSON_ERROR.
|
683
|
+
*/
|
684
|
+
int bson_append_code_w_scope( bson_buffer * b, const char * name, const char * code, const bson * scope);
|
685
|
+
|
686
|
+
/**
|
687
|
+
* Append len bytes of code to a bson_buffer with scope.
|
688
|
+
*
|
689
|
+
* @param b the bson_buffer to append to.
|
690
|
+
* @param name the key for the code.
|
691
|
+
* @param str the string to append.
|
692
|
+
* @param len the number of bytes from str to append.
|
693
|
+
* @param scope a BSON object containing the scope.
|
694
|
+
*
|
695
|
+
* @return BSON_OK or BSON_ERROR.
|
696
|
+
*/
|
697
|
+
int bson_append_code_w_scope_n( bson_buffer * b, const char * name, const char * code, int size, const bson * scope);
|
698
|
+
|
699
|
+
/**
|
700
|
+
* Append binary data to a bson_buffer.
|
701
|
+
*
|
702
|
+
* @param b the bson_buffer to append to.
|
703
|
+
* @param name the key for the data.
|
704
|
+
* @param type the binary data type.
|
705
|
+
* @param str the binary data.
|
706
|
+
* @param len the length of the data.
|
707
|
+
*
|
708
|
+
* @return BSON_OK or BSON_ERROR.
|
709
|
+
*/
|
710
|
+
int bson_append_binary( bson_buffer * b, const char * name, char type, const char * str, int len );
|
711
|
+
|
712
|
+
/**
|
713
|
+
* Append a bson_bool_t to a bson_buffer.
|
714
|
+
*
|
715
|
+
* @param b the bson_buffer to append to.
|
716
|
+
* @param name the key for the boolean value.
|
717
|
+
* @param v the bson_bool_t to append.
|
718
|
+
*
|
719
|
+
* @return BSON_OK or BSON_ERROR.
|
720
|
+
*/
|
721
|
+
int bson_append_bool( bson_buffer * b, const char * name, const bson_bool_t v );
|
722
|
+
|
723
|
+
/**
|
724
|
+
* Append a null value to a bson_buffer.
|
725
|
+
*
|
726
|
+
* @param b the bson_buffer to append to.
|
727
|
+
* @param name the key for the null value.
|
728
|
+
*
|
729
|
+
* @return BSON_OK or BSON_ERROR.
|
730
|
+
*/
|
731
|
+
int bson_append_null( bson_buffer * b, const char * name );
|
732
|
+
|
733
|
+
/**
|
734
|
+
* Append an undefined value to a bson_buffer.
|
735
|
+
*
|
736
|
+
* @param b the bson_buffer to append to.
|
737
|
+
* @param name the key for the undefined value.
|
738
|
+
*
|
739
|
+
* @return BSON_OK or BSON_ERROR.
|
740
|
+
*/
|
741
|
+
int bson_append_undefined( bson_buffer * b, const char * name );
|
742
|
+
|
743
|
+
/**
|
744
|
+
* Append a regex value to a bson_buffer.
|
745
|
+
*
|
746
|
+
* @param b the bson_buffer to append to.
|
747
|
+
* @param name the key for the regex value.
|
748
|
+
* @param pattern the regex pattern to append.
|
749
|
+
* @param the regex options.
|
750
|
+
*
|
751
|
+
* @return BSON_OK or BSON_ERROR.
|
752
|
+
*/
|
753
|
+
int bson_append_regex( bson_buffer * b, const char * name, const char * pattern, const char * opts );
|
754
|
+
|
755
|
+
/**
|
756
|
+
* Append bson data to a bson_buffer.
|
757
|
+
*
|
758
|
+
* @param b the bson_buffer to append to.
|
759
|
+
* @param name the key for the bson data.
|
760
|
+
* @param bson the bson object to append.
|
761
|
+
*
|
762
|
+
* @return BSON_OK or BSON_ERROR.
|
763
|
+
*/
|
764
|
+
int bson_append_bson( bson_buffer * b, const char * name, const bson* bson);
|
765
|
+
|
766
|
+
/**
|
767
|
+
* Append a BSON element to a bson_buffer from the current point of an iterator.
|
768
|
+
*
|
769
|
+
* @param b the bson_buffer to append to.
|
770
|
+
* @param name_or_null the key for the BSON element, or NULL.
|
771
|
+
* @param elem the bson_iterator.
|
772
|
+
*
|
773
|
+
* @return BSON_OK or BSON_ERROR.
|
774
|
+
*/
|
775
|
+
int bson_append_element( bson_buffer * b, const char * name_or_null, const bson_iterator* elem);
|
776
|
+
|
777
|
+
/**
|
778
|
+
* Append a bson_timestamp_t value to a bson_buffer.
|
779
|
+
*
|
780
|
+
* @param b the bson_buffer to append to.
|
781
|
+
* @param name the key for the timestampe value.
|
782
|
+
* @param ts the bson_timestamp_t value to append.
|
783
|
+
*
|
784
|
+
* @return BSON_OK or BSON_ERROR.
|
785
|
+
*/
|
786
|
+
int bson_append_timestamp( bson_buffer * b, const char * name, bson_timestamp_t * ts );
|
193
787
|
|
194
788
|
/* these both append a bson_date */
|
195
|
-
|
196
|
-
|
789
|
+
/**
|
790
|
+
* Append a bson_date_t value to a bson_buffer.
|
791
|
+
*
|
792
|
+
* @param b the bson_buffer to append to.
|
793
|
+
* @param name the key for the date value.
|
794
|
+
* @param millis the bson_date_t to append.
|
795
|
+
*
|
796
|
+
* @return BSON_OK or BSON_ERROR.
|
797
|
+
*/
|
798
|
+
int bson_append_date(bson_buffer * b, const char * name, bson_date_t millis);
|
197
799
|
|
198
|
-
|
199
|
-
|
200
|
-
|
800
|
+
/**
|
801
|
+
* Append a time_t value to a bson_buffer.
|
802
|
+
*
|
803
|
+
* @param b the bson_buffer to append to.
|
804
|
+
* @param name the key for the date value.
|
805
|
+
* @param secs the time_t to append.
|
806
|
+
*
|
807
|
+
* @return BSON_OK or BSON_ERROR.
|
808
|
+
*/
|
809
|
+
int bson_append_time_t(bson_buffer * b, const char * name, time_t secs);
|
810
|
+
|
811
|
+
/**
|
812
|
+
* Start appending a new object to a bson_buffer.
|
813
|
+
*
|
814
|
+
* @param b the bson_buffer to append to.
|
815
|
+
* @param name the name of the new object.
|
816
|
+
*
|
817
|
+
* @return BSON_OK or BSON_ERROR.
|
818
|
+
*/
|
819
|
+
int bson_append_start_object( bson_buffer * b, const char * name );
|
820
|
+
|
821
|
+
/**
|
822
|
+
* Start appending a new array to a bson_buffer.
|
823
|
+
*
|
824
|
+
* @param b the bson_buffer to append to.
|
825
|
+
* @param name the name of the new array.
|
826
|
+
*
|
827
|
+
* @return BSON_OK or BSON_ERROR.
|
828
|
+
*/
|
829
|
+
int bson_append_start_array( bson_buffer * b, const char * name );
|
830
|
+
|
831
|
+
/**
|
832
|
+
* Finish appending a new object or array to a bson_buffer.
|
833
|
+
*
|
834
|
+
* @param b the bson_buffer to append to.
|
835
|
+
*
|
836
|
+
* @return BSON_OK or BSON_ERROR.
|
837
|
+
*/
|
838
|
+
int bson_append_finish_object( bson_buffer * b );
|
201
839
|
|
202
840
|
void bson_numstr(char* str, int i);
|
203
841
|
void bson_incnumstr(char* str);
|
@@ -206,8 +844,26 @@ void bson_incnumstr(char* str);
|
|
206
844
|
/* ------------------------------
|
207
845
|
ERROR HANDLING - also used in mongo code
|
208
846
|
------------------------------ */
|
209
|
-
|
847
|
+
/**
|
848
|
+
* Allocates memory and checks return value, exiting fatally if malloc() fails.
|
849
|
+
*
|
850
|
+
* @param size bytes to allocate.
|
851
|
+
*
|
852
|
+
* @return a pointer to the allocated memory.
|
853
|
+
*
|
854
|
+
* @sa malloc(3)
|
855
|
+
*/
|
210
856
|
void * bson_malloc(int size); /* checks return value */
|
857
|
+
|
858
|
+
/**
|
859
|
+
* Changes the size of allocated memory and checks return value, exiting fatally if realloc() fails.
|
860
|
+
*
|
861
|
+
* @param size bytes to allocate.
|
862
|
+
*
|
863
|
+
* @return a pointer to the allocated memory.
|
864
|
+
*
|
865
|
+
* @sa malloc(3)
|
866
|
+
*/
|
211
867
|
void * bson_realloc(void * ptr, int size); /* checks return value */
|
212
868
|
|
213
869
|
/* bson_err_handlers shouldn't return!!! */
|
@@ -215,11 +871,37 @@ typedef void(*bson_err_handler)(const char* errmsg);
|
|
215
871
|
|
216
872
|
/* returns old handler or NULL */
|
217
873
|
/* default handler prints error then exits with failure*/
|
874
|
+
/**
|
875
|
+
* Set a function for error handling.
|
876
|
+
*
|
877
|
+
* @param func a bson_err_handler function.
|
878
|
+
*
|
879
|
+
* @return the old error handling function, or NULL.
|
880
|
+
*/
|
218
881
|
bson_err_handler set_bson_err_handler(bson_err_handler func);
|
219
882
|
|
220
|
-
/* does nothing
|
883
|
+
/* does nothing if ok != 0 */
|
884
|
+
/**
|
885
|
+
* Exit fatally.
|
886
|
+
*
|
887
|
+
* @param ok exits if ok is equal to 0.
|
888
|
+
*/
|
221
889
|
void bson_fatal( int ok );
|
890
|
+
|
891
|
+
/**
|
892
|
+
* Exit fatally with an error message.
|
893
|
+
*
|
894
|
+
* @param ok exits if ok is equal to 0.
|
895
|
+
* @param msg prints to stderr before exiting.
|
896
|
+
*/
|
222
897
|
void bson_fatal_msg( int ok, const char* msg );
|
223
898
|
|
899
|
+
/**
|
900
|
+
* Invoke the error handler but do not exit.
|
901
|
+
*
|
902
|
+
* @param b the buffer object.
|
903
|
+
*/
|
904
|
+
void bson_builder_error( bson_buffer* b );
|
905
|
+
|
224
906
|
MONGO_EXTERN_C_END
|
225
907
|
#endif
|