bson_ext 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,93 +0,0 @@
1
- /* platform_hacks.h */
2
- /* Copyright 2009, 2010 10gen Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
-
18
- /* all platform-specific ifdefs should go here */
19
-
20
- #ifndef _PLATFORM_HACKS_H_
21
- #define _PLATFORM_HACKS_H_
22
-
23
- #ifdef __GNUC__
24
- #define MONGO_INLINE static __inline__
25
- #else
26
- #define MONGO_INLINE static
27
- #endif
28
-
29
- #ifdef __cplusplus
30
- #define MONGO_EXTERN_C_START extern "C" {
31
- #define MONGO_EXTERN_C_END }
32
- #else
33
- #define MONGO_EXTERN_C_START
34
- #define MONGO_EXTERN_C_END
35
- #endif
36
-
37
-
38
- #if defined(MONGO_HAVE_STDINT) || __STDC_VERSION__ >= 199901L
39
- #include <stdint.h>
40
- #elif defined(MONGO_HAVE_UNISTD)
41
- #include <unistd.h>
42
- #elif defined(MONGO_USE__INT64)
43
- typedef __int64 int64_t;
44
- typedef unsigned __int64 uint64_t;
45
- #elif defined(MONGO_USE_LONG_LONG_INT)
46
- typedef long long int int64_t;
47
- typedef unsigned long long int uint64_t;
48
- #else
49
- #error must have a 64bit int type
50
- #endif
51
-
52
- /* big endian is only used for OID generation. little is used everywhere else */
53
- #ifdef MONGO_BIG_ENDIAN
54
- #define bson_little_endian64(out, in) ( bson_swap_endian64(out, in) )
55
- #define bson_little_endian32(out, in) ( bson_swap_endian32(out, in) )
56
- #define bson_big_endian64(out, in) ( memcpy(out, in, 8) )
57
- #define bson_big_endian32(out, in) ( memcpy(out, in, 4) )
58
- #else
59
- #define bson_little_endian64(out, in) ( memcpy(out, in, 8) )
60
- #define bson_little_endian32(out, in) ( memcpy(out, in, 4) )
61
- #define bson_big_endian64(out, in) ( bson_swap_endian64(out, in) )
62
- #define bson_big_endian32(out, in) ( bson_swap_endian32(out, in) )
63
- #endif
64
-
65
- MONGO_EXTERN_C_START
66
-
67
- MONGO_INLINE void bson_swap_endian64(void* outp, const void* inp){
68
- const char *in = (const char*)inp;
69
- char *out = (char*)outp;
70
-
71
- out[0] = in[7];
72
- out[1] = in[6];
73
- out[2] = in[5];
74
- out[3] = in[4];
75
- out[4] = in[3];
76
- out[5] = in[2];
77
- out[6] = in[1];
78
- out[7] = in[0];
79
-
80
- }
81
- MONGO_INLINE void bson_swap_endian32(void* outp, const void* inp){
82
- const char *in = (const char*)inp;
83
- char *out = (char*)outp;
84
-
85
- out[0] = in[3];
86
- out[1] = in[2];
87
- out[2] = in[1];
88
- out[3] = in[0];
89
- }
90
-
91
- MONGO_EXTERN_C_END
92
-
93
- #endif
@@ -1,223 +0,0 @@
1
- #include "test.h"
2
- #include "bson.h"
3
- #include <stdio.h>
4
- #include <string.h>
5
- #include <stdlib.h>
6
-
7
- int main(){
8
- bson_buffer bb;
9
- bson b;
10
- bson_iterator it, it2, it3;
11
- bson_oid_t oid;
12
- bson_timestamp_t ts;
13
- bson_timestamp_t ts_result;
14
-
15
- ts.i = 1;
16
- ts.t = 2;
17
-
18
- bson_buffer_init(&bb);
19
- bson_append_double(&bb, "d", 3.14);
20
- bson_append_string(&bb, "s", "hello");
21
- bson_append_string_n(&bb, "s_n", "goodbye cruel world", 7);
22
-
23
- {
24
- bson_buffer *obj = bson_append_start_object(&bb, "o");
25
- bson_buffer *arr = bson_append_start_array(obj, "a");
26
- bson_append_binary(arr, "0", 8, "w\0rld", 5);
27
- bson_append_finish_object(arr);
28
- bson_append_finish_object(obj);
29
- }
30
-
31
- bson_append_undefined(&bb, "u");
32
-
33
- bson_oid_from_string(&oid, "010203040506070809101112");
34
- ASSERT(!memcmp(oid.bytes, "\x001\x002\x003\x004\x005\x006\x007\x008\x009\x010\x011\x012", 12));
35
- bson_append_oid(&bb, "oid", &oid);
36
-
37
- bson_append_bool(&bb, "b", 1);
38
- bson_append_date(&bb, "date", 0x0102030405060708);
39
- bson_append_null(&bb, "n");
40
- bson_append_regex(&bb, "r", "^asdf", "imx");
41
- /* no dbref test (deprecated) */
42
- bson_append_code(&bb, "c", "function(){}");
43
- bson_append_code_n(&bb, "c_n", "function(){}garbage", 12);
44
- bson_append_symbol(&bb, "symbol", "SYMBOL");
45
- bson_append_symbol_n(&bb, "symbol_n", "SYMBOL and garbage", 6);
46
-
47
- {
48
- bson_buffer scope_buf;
49
- bson scope;
50
- bson_buffer_init(&scope_buf);
51
- bson_append_int(&scope_buf, "i", 123);
52
- bson_from_buffer(&scope, &scope_buf);
53
-
54
- bson_append_code_w_scope(&bb, "cws", "function(){return i}", &scope);
55
- bson_destroy(&scope);
56
- }
57
-
58
- bson_append_timestamp(&bb, "timestamp", &ts);
59
- bson_append_long(&bb, "l", 0x1122334455667788);
60
-
61
- bson_from_buffer(&b, &bb);
62
-
63
- bson_print(&b);
64
-
65
- bson_iterator_init(&it, b.data);
66
-
67
- ASSERT(bson_iterator_more(&it));
68
- ASSERT(bson_iterator_next(&it) == bson_double);
69
- ASSERT(bson_iterator_type(&it) == bson_double);
70
- ASSERT(!strcmp(bson_iterator_key(&it), "d"));
71
- ASSERT(bson_iterator_double(&it) == 3.14);
72
-
73
- ASSERT(bson_iterator_more(&it));
74
- ASSERT(bson_iterator_next(&it) == bson_string);
75
- ASSERT(bson_iterator_type(&it) == bson_string);
76
- ASSERT(!strcmp(bson_iterator_key(&it), "s"));
77
- ASSERT(!strcmp(bson_iterator_string(&it), "hello"));
78
-
79
- ASSERT(bson_iterator_more(&it));
80
- ASSERT(bson_iterator_next(&it) == bson_string);
81
- ASSERT(bson_iterator_type(&it) == bson_string);
82
- ASSERT(!strcmp(bson_iterator_key(&it), "s_n"));
83
- ASSERT(!strcmp(bson_iterator_string(&it), "goodbye"));
84
-
85
- ASSERT(bson_iterator_more(&it));
86
- ASSERT(bson_iterator_next(&it) == bson_object);
87
- ASSERT(bson_iterator_type(&it) == bson_object);
88
- ASSERT(!strcmp(bson_iterator_key(&it), "o"));
89
- bson_iterator_subiterator(&it, &it2);
90
-
91
- ASSERT(bson_iterator_more(&it2));
92
- ASSERT(bson_iterator_next(&it2) == bson_array);
93
- ASSERT(bson_iterator_type(&it2) == bson_array);
94
- ASSERT(!strcmp(bson_iterator_key(&it2), "a"));
95
- bson_iterator_subiterator(&it2, &it3);
96
-
97
- ASSERT(bson_iterator_more(&it3));
98
- ASSERT(bson_iterator_next(&it3) == bson_bindata);
99
- ASSERT(bson_iterator_type(&it3) == bson_bindata);
100
- ASSERT(!strcmp(bson_iterator_key(&it3), "0"));
101
- ASSERT(bson_iterator_bin_type(&it3) == 8);
102
- ASSERT(bson_iterator_bin_len(&it3) == 5);
103
- ASSERT(!memcmp(bson_iterator_bin_data(&it3), "w\0rld", 5));
104
-
105
- ASSERT(bson_iterator_more(&it3));
106
- ASSERT(bson_iterator_next(&it3) == bson_eoo);
107
- ASSERT(bson_iterator_type(&it3) == bson_eoo);
108
- ASSERT(!bson_iterator_more(&it3));
109
-
110
- ASSERT(bson_iterator_more(&it2));
111
- ASSERT(bson_iterator_next(&it2) == bson_eoo);
112
- ASSERT(bson_iterator_type(&it2) == bson_eoo);
113
- ASSERT(!bson_iterator_more(&it2));
114
-
115
- ASSERT(bson_iterator_more(&it));
116
- ASSERT(bson_iterator_next(&it) == bson_undefined);
117
- ASSERT(bson_iterator_type(&it) == bson_undefined);
118
- ASSERT(!strcmp(bson_iterator_key(&it), "u"));
119
-
120
- ASSERT(bson_iterator_more(&it));
121
- ASSERT(bson_iterator_next(&it) == bson_oid);
122
- ASSERT(bson_iterator_type(&it) == bson_oid);
123
- ASSERT(!strcmp(bson_iterator_key(&it), "oid"));
124
- ASSERT(!memcmp(bson_iterator_oid(&it)->bytes, "\x001\x002\x003\x004\x005\x006\x007\x008\x009\x010\x011\x012", 12));
125
- ASSERT(bson_iterator_oid(&it)->ints[0] == oid.ints[0]);
126
- ASSERT(bson_iterator_oid(&it)->ints[1] == oid.ints[1]);
127
- ASSERT(bson_iterator_oid(&it)->ints[2] == oid.ints[2]);
128
-
129
- ASSERT(bson_iterator_more(&it));
130
- ASSERT(bson_iterator_next(&it) == bson_bool);
131
- ASSERT(bson_iterator_type(&it) == bson_bool);
132
- ASSERT(!strcmp(bson_iterator_key(&it), "b"));
133
- ASSERT(bson_iterator_bool(&it) == 1);
134
-
135
- ASSERT(bson_iterator_more(&it));
136
- ASSERT(bson_iterator_next(&it) == bson_date);
137
- ASSERT(bson_iterator_type(&it) == bson_date);
138
- ASSERT(!strcmp(bson_iterator_key(&it), "date"));
139
- ASSERT(bson_iterator_date(&it) == 0x0102030405060708);
140
-
141
- ASSERT(bson_iterator_more(&it));
142
- ASSERT(bson_iterator_next(&it) == bson_null);
143
- ASSERT(bson_iterator_type(&it) == bson_null);
144
- ASSERT(!strcmp(bson_iterator_key(&it), "n"));
145
-
146
- ASSERT(bson_iterator_more(&it));
147
- ASSERT(bson_iterator_next(&it) == bson_regex);
148
- ASSERT(bson_iterator_type(&it) == bson_regex);
149
- ASSERT(!strcmp(bson_iterator_key(&it), "r"));
150
- ASSERT(!strcmp(bson_iterator_regex(&it), "^asdf"));
151
- ASSERT(!strcmp(bson_iterator_regex_opts(&it), "imx"));
152
-
153
- ASSERT(bson_iterator_more(&it));
154
- ASSERT(bson_iterator_next(&it) == bson_code);
155
- ASSERT(bson_iterator_type(&it) == bson_code);
156
- ASSERT(!strcmp(bson_iterator_key(&it), "c"));
157
- ASSERT(!strcmp(bson_iterator_string(&it), "function(){}"));
158
- ASSERT(!strcmp(bson_iterator_code(&it), "function(){}"));
159
-
160
- ASSERT(bson_iterator_more(&it));
161
- ASSERT(bson_iterator_next(&it) == bson_code);
162
- ASSERT(bson_iterator_type(&it) == bson_code);
163
- ASSERT(!strcmp(bson_iterator_key(&it), "c_n"));
164
- ASSERT(!strcmp(bson_iterator_string(&it), "function(){}"));
165
- ASSERT(!strcmp(bson_iterator_code(&it), "function(){}"));
166
-
167
- ASSERT(bson_iterator_more(&it));
168
- ASSERT(bson_iterator_next(&it) == bson_symbol);
169
- ASSERT(bson_iterator_type(&it) == bson_symbol);
170
- ASSERT(!strcmp(bson_iterator_key(&it), "symbol"));
171
- ASSERT(!strcmp(bson_iterator_string(&it), "SYMBOL"));
172
-
173
- ASSERT(bson_iterator_more(&it));
174
- ASSERT(bson_iterator_next(&it) == bson_symbol);
175
- ASSERT(bson_iterator_type(&it) == bson_symbol);
176
- ASSERT(!strcmp(bson_iterator_key(&it), "symbol_n"));
177
- ASSERT(!strcmp(bson_iterator_string(&it), "SYMBOL"));
178
-
179
- ASSERT(bson_iterator_more(&it));
180
- ASSERT(bson_iterator_next(&it) == bson_codewscope);
181
- ASSERT(bson_iterator_type(&it) == bson_codewscope);
182
- ASSERT(!strcmp(bson_iterator_key(&it), "cws"));
183
- ASSERT(!strcmp(bson_iterator_code(&it), "function(){return i}"));
184
-
185
- {
186
- bson scope;
187
- bson_iterator_code_scope(&it, &scope);
188
- bson_iterator_init(&it2, scope.data);
189
-
190
- ASSERT(bson_iterator_more(&it2));
191
- ASSERT(bson_iterator_next(&it2) == bson_int);
192
- ASSERT(bson_iterator_type(&it2) == bson_int);
193
- ASSERT(!strcmp(bson_iterator_key(&it2), "i"));
194
- ASSERT(bson_iterator_int(&it2) == 123);
195
-
196
- ASSERT(bson_iterator_more(&it2));
197
- ASSERT(bson_iterator_next(&it2) == bson_eoo);
198
- ASSERT(bson_iterator_type(&it2) == bson_eoo);
199
- ASSERT(!bson_iterator_more(&it2));
200
- }
201
-
202
- ASSERT(bson_iterator_more(&it));
203
- ASSERT(bson_iterator_next(&it) == bson_timestamp);
204
- ASSERT(bson_iterator_type(&it) == bson_timestamp);
205
- ASSERT(!strcmp(bson_iterator_key(&it), "timestamp"));
206
- ts_result = bson_iterator_timestamp(&it);
207
- ASSERT( ts_result.i == 1 );
208
- ASSERT( ts_result.t == 2);
209
-
210
- ASSERT(bson_iterator_more(&it));
211
- ASSERT(bson_iterator_next(&it) == bson_long);
212
- ASSERT(bson_iterator_type(&it) == bson_long);
213
- ASSERT(!strcmp(bson_iterator_key(&it), "l"));
214
- ASSERT(bson_iterator_long(&it) == 0x1122334455667788);
215
-
216
- ASSERT(bson_iterator_more(&it));
217
- ASSERT(bson_iterator_next(&it) == bson_eoo);
218
- ASSERT(bson_iterator_type(&it) == bson_eoo);
219
- ASSERT(!bson_iterator_more(&it));
220
-
221
- return 0;
222
- }
223
-
@@ -1,28 +0,0 @@
1
- #include "test.h"
2
- #include "mongo.h"
3
- #include <stdio.h>
4
- #include <string.h>
5
- #include <stdlib.h>
6
-
7
- static mongo_connection conn[1];
8
- static const char* db = "test";
9
-
10
- int main(){
11
-
12
- INIT_SOCKETS_FOR_WINDOWS;
13
-
14
- if (mongo_connect( conn , TEST_SERVER, 27017 )){
15
- printf("failed to connect\n");
16
- exit(1);
17
- }
18
-
19
- mongo_cmd_drop_db(conn, db);
20
-
21
- ASSERT(mongo_cmd_authenticate(conn, db, "user", "password") == 0);
22
- mongo_cmd_add_user(conn, db, "user", "password");
23
- ASSERT(mongo_cmd_authenticate(conn, db, "user", "password") == 1);
24
-
25
- mongo_cmd_drop_db(conn, db);
26
- mongo_destroy(conn);
27
- return 0;
28
- }
@@ -1,434 +0,0 @@
1
- /* test.c */
2
-
3
- #include "test.h"
4
- #include "mongo.h"
5
- #include <stdio.h>
6
- #include <string.h>
7
- #include <stdlib.h>
8
-
9
- #ifndef _WIN32
10
- #include <sys/time.h>
11
- #endif
12
-
13
- /* supports preprocessor concatenation */
14
- #define DB "benchmarks"
15
-
16
- /* finds without indexes */
17
- #define DO_SLOW_TESTS 1
18
-
19
- #ifndef TEST_SERVER
20
- #define TEST_SERVER "127.0.0.1"
21
- #endif
22
-
23
- #define PER_TRIAL 5000
24
- #define BATCH_SIZE 100
25
-
26
- static mongo_connection conn[1];
27
-
28
- static void make_small(bson * out, int i){
29
- bson_buffer bb;
30
- bson_buffer_init(&bb);
31
- bson_append_new_oid(&bb, "_id");
32
- bson_append_int(&bb, "x", i);
33
- bson_from_buffer(out, &bb);
34
- }
35
-
36
- static void make_medium(bson * out, int i){
37
- bson_buffer bb;
38
- bson_buffer_init(&bb);
39
- bson_append_new_oid(&bb, "_id");
40
- bson_append_int(&bb, "x", i);
41
- bson_append_int(&bb, "integer", 5);
42
- bson_append_double(&bb, "number", 5.05);
43
- bson_append_bool(&bb, "boolean", 0);
44
-
45
- bson_append_start_array(&bb, "array");
46
- bson_append_string(&bb, "0", "test");
47
- bson_append_string(&bb, "1", "benchmark");
48
- bson_append_finish_object(&bb);
49
-
50
- bson_from_buffer(out, &bb);
51
- }
52
-
53
- static const char *words[14] =
54
- {"10gen","web","open","source","application","paas",
55
- "platform-as-a-service","technology","helps",
56
- "developers","focus","building","mongodb","mongo"};
57
-
58
- static void make_large(bson * out, int i){
59
- int num;
60
- char numstr[4];
61
- bson_buffer bb;
62
- bson_buffer_init(&bb);
63
-
64
- bson_append_new_oid(&bb, "_id");
65
- bson_append_int(&bb, "x", i);
66
- bson_append_string(&bb, "base_url", "http://www.example.com/test-me");
67
- bson_append_int(&bb, "total_word_count", 6743);
68
- bson_append_int(&bb, "access_time", 999); /*TODO use date*/
69
-
70
- bson_append_start_object(&bb, "meta_tags");
71
- bson_append_string(&bb, "description", "i am a long description string");
72
- bson_append_string(&bb, "author", "Holly Man");
73
- bson_append_string(&bb, "dynamically_created_meta_tag", "who know\n what");
74
- bson_append_finish_object(&bb);
75
-
76
- bson_append_start_object(&bb, "page_structure");
77
- bson_append_int(&bb, "counted_tags", 3450);
78
- bson_append_int(&bb, "no_of_js_attached", 10);
79
- bson_append_int(&bb, "no_of_images", 6);
80
- bson_append_finish_object(&bb);
81
-
82
-
83
- bson_append_start_array(&bb, "harvested_words");
84
- for (num=0; num < 14*20; num++){
85
- bson_numstr(numstr, num);
86
- bson_append_string(&bb, numstr, words[num%14]);
87
- }
88
- bson_append_finish_object(&bb);
89
-
90
- bson_from_buffer(out, &bb);
91
- }
92
-
93
- static void serialize_small_test(){
94
- int i;
95
- bson b;
96
- for (i=0; i<PER_TRIAL; i++){
97
- make_small(&b, i);
98
- bson_destroy(&b);
99
- }
100
- }
101
- static void serialize_medium_test(){
102
- int i;
103
- bson b;
104
- for (i=0; i<PER_TRIAL; i++){
105
- make_medium(&b, i);
106
- bson_destroy(&b);
107
- }
108
- }
109
- static void serialize_large_test(){
110
- int i;
111
- bson b;
112
- for (i=0; i<PER_TRIAL; i++){
113
- make_large(&b, i);
114
- bson_destroy(&b);
115
- }
116
- }
117
- static void single_insert_small_test(){
118
- int i;
119
- bson b;
120
- for (i=0; i<PER_TRIAL; i++){
121
- make_small(&b, i);
122
- mongo_insert(conn, DB ".single.small", &b);
123
- bson_destroy(&b);
124
- }
125
- }
126
-
127
- static void single_insert_medium_test(){
128
- int i;
129
- bson b;
130
- for (i=0; i<PER_TRIAL; i++){
131
- make_medium(&b, i);
132
- mongo_insert(conn, DB ".single.medium", &b);
133
- bson_destroy(&b);
134
- }
135
- }
136
-
137
- static void single_insert_large_test(){
138
- int i;
139
- bson b;
140
- for (i=0; i<PER_TRIAL; i++){
141
- make_large(&b, i);
142
- mongo_insert(conn, DB ".single.large", &b);
143
- bson_destroy(&b);
144
- }
145
- }
146
-
147
- static void index_insert_small_test(){
148
- int i;
149
- bson b;
150
- ASSERT(mongo_create_simple_index(conn, DB ".index.small", "x", 0, NULL));
151
- for (i=0; i<PER_TRIAL; i++){
152
- make_small(&b, i);
153
- mongo_insert(conn, DB ".index.small", &b);
154
- bson_destroy(&b);
155
- }
156
- }
157
-
158
- static void index_insert_medium_test(){
159
- int i;
160
- bson b;
161
- ASSERT(mongo_create_simple_index(conn, DB ".index.medium", "x", 0, NULL));
162
- for (i=0; i<PER_TRIAL; i++){
163
- make_medium(&b, i);
164
- mongo_insert(conn, DB ".index.medium", &b);
165
- bson_destroy(&b);
166
- }
167
- }
168
-
169
- static void index_insert_large_test(){
170
- int i;
171
- bson b;
172
- ASSERT(mongo_create_simple_index(conn, DB ".index.large", "x", 0, NULL));
173
- for (i=0; i<PER_TRIAL; i++){
174
- make_large(&b, i);
175
- mongo_insert(conn, DB ".index.large", &b);
176
- bson_destroy(&b);
177
- }
178
- }
179
-
180
- static void batch_insert_small_test(){
181
- int i, j;
182
- bson b[BATCH_SIZE];
183
- bson *bp[BATCH_SIZE];
184
- for (j=0; j < BATCH_SIZE; j++)
185
- bp[j] = &b[j];
186
-
187
- for (i=0; i < (PER_TRIAL / BATCH_SIZE); i++){
188
- for (j=0; j < BATCH_SIZE; j++)
189
- make_small(&b[j], i);
190
-
191
- mongo_insert_batch(conn, DB ".batch.small", bp, BATCH_SIZE);
192
-
193
- for (j=0; j < BATCH_SIZE; j++)
194
- bson_destroy(&b[j]);
195
- }
196
- }
197
-
198
- static void batch_insert_medium_test(){
199
- int i, j;
200
- bson b[BATCH_SIZE];
201
- bson *bp[BATCH_SIZE];
202
- for (j=0; j < BATCH_SIZE; j++)
203
- bp[j] = &b[j];
204
-
205
- for (i=0; i < (PER_TRIAL / BATCH_SIZE); i++){
206
- for (j=0; j < BATCH_SIZE; j++)
207
- make_medium(&b[j], i);
208
-
209
- mongo_insert_batch(conn, DB ".batch.medium", bp, BATCH_SIZE);
210
-
211
- for (j=0; j < BATCH_SIZE; j++)
212
- bson_destroy(&b[j]);
213
- }
214
- }
215
-
216
- static void batch_insert_large_test(){
217
- int i, j;
218
- bson b[BATCH_SIZE];
219
- bson *bp[BATCH_SIZE];
220
- for (j=0; j < BATCH_SIZE; j++)
221
- bp[j] = &b[j];
222
-
223
- for (i=0; i < (PER_TRIAL / BATCH_SIZE); i++){
224
- for (j=0; j < BATCH_SIZE; j++)
225
- make_large(&b[j], i);
226
-
227
- mongo_insert_batch(conn, DB ".batch.large", bp, BATCH_SIZE);
228
-
229
- for (j=0; j < BATCH_SIZE; j++)
230
- bson_destroy(&b[j]);
231
- }
232
- }
233
-
234
- static void make_query(bson* b){
235
- bson_buffer bb;
236
- bson_buffer_init(&bb);
237
- bson_append_int(&bb, "x", PER_TRIAL/2);
238
- bson_from_buffer(b, &bb);
239
- }
240
-
241
- static void find_one(const char* ns){
242
- bson b;
243
- int i;
244
- for (i=0; i < PER_TRIAL; i++){
245
- make_query(&b);
246
- ASSERT(mongo_find_one(conn, ns, &b, NULL, NULL));
247
- bson_destroy(&b);
248
- }
249
- }
250
-
251
- static void find_one_noindex_small_test() {find_one(DB ".single.small");}
252
- static void find_one_noindex_medium_test() {find_one(DB ".single.medium");}
253
- static void find_one_noindex_large_test() {find_one(DB ".single.large");}
254
-
255
- static void find_one_index_small_test() {find_one(DB ".index.small");}
256
- static void find_one_index_medium_test() {find_one(DB ".index.medium");}
257
- static void find_one_index_large_test() {find_one(DB ".index.large");}
258
-
259
- static void find(const char* ns){
260
- bson b;
261
- int i;
262
- for (i=0; i < PER_TRIAL; i++){
263
- mongo_cursor * cursor;
264
- make_query(&b);
265
- cursor = mongo_find(conn, ns, &b, NULL, 0,0,0);
266
- ASSERT(cursor);
267
-
268
- while(mongo_cursor_next(cursor))
269
- {}
270
-
271
- mongo_cursor_destroy(cursor);
272
- bson_destroy(&b);
273
- }
274
- }
275
-
276
- static void find_noindex_small_test() {find(DB ".single.small");}
277
- static void find_noindex_medium_test() {find(DB ".single.medium");}
278
- static void find_noindex_large_test() {find(DB ".single.large");}
279
-
280
- static void find_index_small_test() {find(DB ".index.small");}
281
- static void find_index_medium_test() {find(DB ".index.medium");}
282
- static void find_index_large_test() {find(DB ".index.large");}
283
-
284
-
285
- static void find_range(const char* ns){
286
- int i;
287
- bson b;
288
-
289
- for (i=0; i < PER_TRIAL; i++){
290
- int j=0;
291
- mongo_cursor * cursor;
292
- bson_buffer bb;
293
-
294
- bson_buffer_init(&bb);
295
- bson_append_start_object(&bb, "x");
296
- bson_append_int(&bb, "$gt", PER_TRIAL/2);
297
- bson_append_int(&bb, "$lt", PER_TRIAL/2 + BATCH_SIZE);
298
- bson_append_finish_object(&bb);
299
- bson_from_buffer(&b, &bb);
300
-
301
- cursor = mongo_find(conn, ns, &b, NULL, 0,0,0);
302
- ASSERT(cursor);
303
-
304
- while(mongo_cursor_next(cursor)) {
305
- j++;
306
- }
307
- ASSERT(j == BATCH_SIZE-1);
308
-
309
- mongo_cursor_destroy(cursor);
310
- bson_destroy(&b);
311
- }
312
- }
313
-
314
- static void find_range_small_test() {find_range(DB ".index.small");}
315
- static void find_range_medium_test() {find_range(DB ".index.medium");}
316
- static void find_range_large_test() {find_range(DB ".index.large");}
317
-
318
- typedef void(*nullary)();
319
- static void time_it(nullary func, const char* name, bson_bool_t gle){
320
- double timer;
321
- double ops;
322
-
323
- #ifdef _WIN32
324
- int64_t start, end;
325
-
326
- start = GetTickCount64();
327
- func();
328
- if (gle) ASSERT(!mongo_cmd_get_last_error(conn, DB, NULL));
329
- end = GetTickCount64();
330
-
331
- timer = end - start;
332
- #else
333
- struct timeval start, end;
334
-
335
- gettimeofday(&start, NULL);
336
- func();
337
- if (gle) ASSERT(!mongo_cmd_get_last_error(conn, DB, NULL));
338
- gettimeofday(&end, NULL);
339
-
340
- timer = end.tv_sec - start.tv_sec;
341
- timer *= 1000000;
342
- timer += end.tv_usec - start.tv_usec;
343
- #endif
344
-
345
- ops = PER_TRIAL / timer;
346
- ops *= 1000000;
347
-
348
- printf("%-45s\t%15f\n", name, ops);
349
- }
350
-
351
- #define TIME(func, gle) (time_it(func, #func, gle))
352
-
353
- static void clean(){
354
- bson b;
355
- if (!mongo_cmd_drop_db(conn, DB)){
356
- printf("failed to drop db\n");
357
- exit(1);
358
- }
359
-
360
- /* create the db */
361
- mongo_insert(conn, DB ".creation", bson_empty(&b));
362
- ASSERT(!mongo_cmd_get_last_error(conn, DB, NULL));
363
- }
364
-
365
- int main(){
366
- mongo_connection_options opts;
367
-
368
- INIT_SOCKETS_FOR_WINDOWS;
369
-
370
- strncpy(opts.host, TEST_SERVER, 255);
371
- opts.host[254] = '\0';
372
- opts.port = 27017;
373
-
374
- if (mongo_connect(conn, &opts )){
375
- printf("failed to connect\n");
376
- exit(1);
377
- }
378
-
379
- clean();
380
-
381
- printf("-----\n");
382
- TIME(serialize_small_test, 0);
383
- TIME(serialize_medium_test, 0);
384
- TIME(serialize_large_test, 0);
385
-
386
- printf("-----\n");
387
- TIME(single_insert_small_test, 1);
388
- TIME(single_insert_medium_test, 1);
389
- TIME(single_insert_large_test, 1);
390
-
391
- printf("-----\n");
392
- TIME(index_insert_small_test, 1);
393
- TIME(index_insert_medium_test, 1);
394
- TIME(index_insert_large_test, 1);
395
-
396
- printf("-----\n");
397
- TIME(batch_insert_small_test, 1);
398
- TIME(batch_insert_medium_test, 1);
399
- TIME(batch_insert_large_test, 1);
400
-
401
- #if DO_SLOW_TESTS
402
- printf("-----\n");
403
- TIME(find_one_noindex_small_test, 0);
404
- TIME(find_one_noindex_medium_test, 0);
405
- TIME(find_one_noindex_large_test, 0);
406
- #endif
407
-
408
- printf("-----\n");
409
- TIME(find_one_index_small_test, 0);
410
- TIME(find_one_index_medium_test, 0);
411
- TIME(find_one_index_large_test, 0);
412
-
413
- #if DO_SLOW_TESTS
414
- printf("-----\n");
415
- TIME(find_noindex_small_test, 0);
416
- TIME(find_noindex_medium_test, 0);
417
- TIME(find_noindex_large_test, 0);
418
- #endif
419
-
420
- printf("-----\n");
421
- TIME(find_index_small_test, 0);
422
- TIME(find_index_medium_test, 0);
423
- TIME(find_index_large_test, 0);
424
-
425
- printf("-----\n");
426
- TIME(find_range_small_test, 0);
427
- TIME(find_range_medium_test, 0);
428
- TIME(find_range_large_test, 0);
429
-
430
-
431
- mongo_destroy(conn);
432
-
433
- return 0;
434
- }