[Groonga-commit] groonga/groonga at b92e6d2 [master] mrb: add Database[]

Back to archive index

Kouhei Sutou null+****@clear*****
Fri Aug 26 16:52:50 JST 2016


Kouhei Sutou	2016-08-26 16:52:50 +0900 (Fri, 26 Aug 2016)

  New Revision: b92e6d2b5c716eb2fe0b74d4cf8cd000be2c608f
  https://github.com/groonga/groonga/commit/b92e6d2b5c716eb2fe0b74d4cf8cd000be2c608f

  Message:
    mrb: add Database[]

  Modified files:
    lib/mrb/mrb_database.c

  Modified: lib/mrb/mrb_database.c (+31 -0)
===================================================================
--- lib/mrb/mrb_database.c    2016-08-26 16:52:17 +0900 (95e0d04)
+++ lib/mrb/mrb_database.c    2016-08-26 16:52:50 +0900 (4de2f64)
@@ -25,6 +25,7 @@
 
 #include "mrb_ctx.h"
 #include "mrb_database.h"
+#include "mrb_converter.h"
 
 static struct mrb_data_type mrb_grn_database_type = {
   "Groonga::Database",
@@ -123,6 +124,34 @@ mrb_grn_database_is_dirty(mrb_state *mrb, mrb_value self)
   return mrb_bool_value(is_dirty);
 }
 
+static mrb_value
+mrb_grn_database_array_reference(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+  grn_obj *database;
+  grn_id key_domain_id = GRN_DB_SHORT_TEXT;
+  mrb_value mrb_key;
+  grn_id record_id;
+  grn_mrb_value_to_raw_data_buffer buffer;
+  void *key;
+  unsigned int key_size;
+
+  mrb_get_args(mrb, "o", &mrb_key);
+
+  database = DATA_PTR(self);
+  grn_mrb_value_to_raw_data_buffer_init(mrb, &buffer);
+  grn_mrb_value_to_raw_data(mrb, "key", mrb_key, key_domain_id,
+                            &buffer, &key, &key_size);
+  record_id = grn_table_get(ctx, database, key, key_size);
+  grn_mrb_value_to_raw_data_buffer_fin(mrb, &buffer);
+
+  if (record_id == GRN_ID_NIL) {
+    return mrb_nil_value();
+  } else {
+    return mrb_fixnum_value(record_id);
+  }
+}
+
 void
 grn_mrb_database_init(grn_ctx *ctx)
 {
@@ -152,5 +181,7 @@ grn_mrb_database_init(grn_ctx *ctx)
                     mrb_grn_database_get_last_modified, MRB_ARGS_NONE());
   mrb_define_method(mrb, klass, "dirty?",
                     mrb_grn_database_is_dirty, MRB_ARGS_NONE());
+  mrb_define_method(mrb, klass, "[]",
+                    mrb_grn_database_array_reference, MRB_ARGS_REQ(1));
 }
 #endif
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index