コード例 #1
0
gboolean
mongo_cursor_count_finish (MongoCursor   *cursor,
                           GAsyncResult  *result,
                           guint64       *count,
                           GError       **error)
{
   GSimpleAsyncResult *simple = (GSimpleAsyncResult *)result;
   MongoMessageReply *reply;
   MongoBsonIter iter;
   gboolean ret = FALSE;
   GList *list;

   g_return_val_if_fail(MONGO_IS_CURSOR(cursor), FALSE);
   g_return_val_if_fail(G_IS_SIMPLE_ASYNC_RESULT(simple), FALSE);
   g_return_val_if_fail(count, FALSE);

   if (!(reply = g_simple_async_result_get_op_res_gpointer(simple))) {
      g_simple_async_result_propagate_error(simple, error);
      GOTO(failure);
   }

   if (!(list = mongo_message_reply_get_documents(reply))) {
      GOTO(failure);
   }

   mongo_bson_iter_init(&iter, list->data);
   if (!mongo_bson_iter_find(&iter, "n") ||
       (mongo_bson_iter_get_value_type(&iter) != MONGO_BSON_DOUBLE)) {
      GOTO(failure);
   }

   *count = mongo_bson_iter_get_value_double(&iter);
   ret = TRUE;

failure:

   RETURN(ret);
}
コード例 #2
0
ファイル: mongo-bson.c プロジェクト: codebutler/mongo-glib
/**
 * mongo_bson_to_string:
 * @bson: (in): A #MongoBson.
 *
 * Build a string representing the BSON document.
 *
 * Returns: (transfer full): A string representing the BSON document.
 */
gchar *
mongo_bson_to_string (MongoBson *bson,
                      gboolean   is_array)
{
   MongoBsonIter iter;
   MongoBsonType type;
   GString *str;
   gchar *esc;


   g_return_val_if_fail(bson, NULL);

   str = g_string_new(is_array ? "[" : "{");

   mongo_bson_iter_init(&iter, bson);
   if (mongo_bson_iter_next(&iter)) {
again:
      if (!is_array) {
         esc = g_strescape(mongo_bson_iter_get_key(&iter), NULL);
         g_string_append_printf(str, "\"%s\": ", esc);
         g_free(esc);

      }
      type = mongo_bson_iter_get_value_type(&iter);
      switch (type) {
      case MONGO_BSON_DOUBLE:
         g_string_append_printf(str, "%f",
                                mongo_bson_iter_get_value_double(&iter));
         break;
      case MONGO_BSON_DATE_TIME:
         {
            GTimeVal tv = { 0 };
            gchar *dstr;

            mongo_bson_iter_get_value_timeval(&iter, &tv);
            dstr = g_time_val_to_iso8601(&tv);
            g_string_append_printf(str, "ISODate(\"%s\")", dstr);
            g_free(dstr);
         }
         break;
      case MONGO_BSON_INT32:
         g_string_append_printf(str, "NumberLong(%d)",
                                mongo_bson_iter_get_value_int(&iter));
         break;
      case MONGO_BSON_INT64:
         g_string_append_printf(str, "NumberLong(%"G_GINT64_FORMAT")",
                                mongo_bson_iter_get_value_int64(&iter));
         break;
      case MONGO_BSON_UTF8:
         esc = g_strescape(mongo_bson_iter_get_value_string(&iter, NULL), NULL);
         g_string_append_printf(str, "\"%s\"", esc);
         g_free(esc);
         break;
      case MONGO_BSON_ARRAY:
         {
            MongoBson *child;
            gchar *childstr;

            if ((child = mongo_bson_iter_get_value_array(&iter))) {
               childstr = mongo_bson_to_string(child, TRUE);
               g_string_append(str, childstr);
               mongo_bson_unref(child);
               g_free(childstr);
            }
         }
         break;
      case MONGO_BSON_DOCUMENT:
         {
            MongoBson *child;
            gchar *childstr;

            if ((child = mongo_bson_iter_get_value_bson(&iter))) {
               childstr = mongo_bson_to_string(child, FALSE);
               g_string_append(str, childstr);
               mongo_bson_unref(child);
               g_free(childstr);
            }
         }
         break;
      case MONGO_BSON_BOOLEAN:
         g_string_append_printf(str,
            mongo_bson_iter_get_value_boolean(&iter) ? "true" : "false");
         break;
      case MONGO_BSON_OBJECT_ID:
         {
            MongoObjectId *id;
            gchar *idstr;

            id = mongo_bson_iter_get_value_object_id(&iter);
            idstr = mongo_object_id_to_string(id);
            g_string_append_printf(str, "ObjectId(\"%s\")", idstr);
            mongo_object_id_free(id);
            g_free(idstr);
         }
         break;
      case MONGO_BSON_NULL:
         g_string_append(str, "null");
         break;
      case MONGO_BSON_REGEX:
         /* TODO: */
         g_assert_not_reached();
         break;
      case MONGO_BSON_UNDEFINED:
         g_string_append(str, "undefined");
         break;
      default:
         g_assert_not_reached();
      }

      if (mongo_bson_iter_next(&iter)) {
         g_string_append(str, ", ");
         goto again;
      }
   }

   g_string_append(str, is_array ? "]" : "}");

   return g_string_free(str, FALSE);
}