[Groonga-commit] groonga/groonga [master] [msgpack] make geo point expression compatible

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 28日 (水) 15:14:34 JST


Yoji SHIDARA	2011-12-28 15:14:34 +0900 (Wed, 28 Dec 2011)

  New Revision: 4492c6c7277d3a0ff4c0100fc869d625039ca0ff

  Log:
    [msgpack] make geo point expression compatible
    
    use "%dx%d" formatted string instead of an array of latittude and
    longitude pair.
    
    refs #1215

  Modified files:
    lib/output.c

  Modified: lib/output.c (+14 -4)
===================================================================
--- lib/output.c    2011-12-28 15:00:14 +0900 (922cbe7)
+++ lib/output.c    2011-12-28 15:14:34 +0900 (d11cfdd)
@@ -467,10 +467,20 @@ grn_output_geo_point(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type
     break;
   case GRN_CONTENT_MSGPACK :
 #ifdef HAVE_MESSAGE_PACK
-    // TODO %dx%d notation for compatibility
-    msgpack_pack_array(&ctx->impl->msgpacker, 2);
-    msgpack_pack_int(&ctx->impl->msgpacker, value->latitude);
-    msgpack_pack_int(&ctx->impl->msgpacker, value->longitude);
+    if (value) {
+      grn_obj buf;
+      GRN_TEXT_INIT(&buf, 0);
+      grn_text_itoa(ctx, &buf, value->latitude);
+      GRN_TEXT_PUTC(ctx, &buf, 'x');
+      grn_text_itoa(ctx, &buf, value->longitude);
+      msgpack_pack_raw(&ctx->impl->msgpacker, GRN_TEXT_LEN(&buf));
+      msgpack_pack_raw_body(&ctx->impl->msgpacker,
+                            GRN_TEXT_VALUE(&buf),
+                            GRN_TEXT_LEN(&buf));
+      grn_obj_close(ctx, &buf);
+    } else {
+      msgpack_pack_nil(&ctx->impl->msgpacker);
+    }
 #endif
     break;
   case GRN_CONTENT_NONE:




Groonga-commit メーリングリストの案内
Back to archive index