]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9302 [mod_mongo] mongo_find_one and mongo_find_n corrected to return -ERR when...
authorChris Rienzo <chris.rienzo@citrix.com>
Mon, 27 Jun 2016 21:23:40 +0000 (17:23 -0400)
committerChris Rienzo <chris.rienzo@citrix.com>
Mon, 27 Jun 2016 21:23:40 +0000 (17:23 -0400)
src/mod/applications/mod_mongo/mod_mongo.c

index a614d1f79a786275556454430059d48ea757e143..aac3221fe7002b81f56bdd2cf4db691d1ce02156 100644 (file)
@@ -251,23 +251,30 @@ SWITCH_STANDARD_API(mod_mongo_find_n_function)
                                        mongoc_cursor_t *cursor = mongoc_collection_find(col, query_options, 0, n, 0, query, fields, NULL);
                                        if (cursor && !mongoc_cursor_error(cursor, &error)) {
                                                /* get results from cursor */
+                                               switch_stream_handle_t result_stream = { 0 };
                                                const bson_t *result;
-                                               stream->write_function(stream, "-OK\n[");
+                                               SWITCH_STANDARD_STREAM(result_stream);
+
                                                if (mongoc_cursor_more(cursor) && mongoc_cursor_next(cursor, &result)) {
                                                        char *json_result;
                                                        json_result = bson_as_json(result, NULL);
-                                                       stream->write_function(stream, "%s", json_result);
+                                                       result_stream.write_function(&result_stream, "%s", json_result);
                                                        bson_free(json_result);
                                                }
                                                while (mongoc_cursor_more(cursor) && mongoc_cursor_next(cursor, &result)) {
                                                        char *json_result;
                                                        json_result = bson_as_json(result, NULL);
-                                                       stream->write_function(stream, ",%s", json_result);
+                                                       result_stream.write_function(&result_stream, ",%s", json_result);
                                                        bson_free(json_result);
                                                }
-                                               stream->write_function(stream, "]\n");
+                                               if (!mongoc_cursor_error(cursor, &error)) {
+                                                       stream->write_function(stream, "-OK\n[%s]", zstr((char *)result_stream.data) ? "" :(char *)result_stream.data);
+                                               } else {
+                                                       stream->write_function(stream, "-ERR\nquery failed: %s", error.message);
+                                               }
+                                               switch_safe_free(result_stream.data);
                                        } else {
-                                               stream->write_function(stream, "-ERR\nquery failed!\n");
+                                               stream->write_function(stream, "-ERR\nquery failed: %s", error.message);
                                        }
                                        if (cursor) {
                                                mongoc_cursor_destroy(cursor);
@@ -342,6 +349,8 @@ SWITCH_STANDARD_API(mod_mongo_find_one_function)
                                                        json_result = bson_as_json(result, NULL);
                                                        stream->write_function(stream, "-OK\n%s\n", json_result);
                                                        bson_free(json_result);
+                                               } else if (mongoc_cursor_error(cursor, &error)) {
+                                                       stream->write_function(stream, "-ERR\nquery failed: %s\n", error.message);
                                                } else {
                                                        /* empty set */
                                                        stream->write_function(stream, "-OK\n{}\n");