[Groonga-commit] groonga/groonga [master] add GRN_CTX_PER_DB flag. fixes #1053

Back to archive index

null+****@clear***** null+****@clear*****
2011年 8月 28日 (日) 18:11:59 JST


Kouhei Sutou	2011-08-28 09:11:59 +0000 (Sun, 28 Aug 2011)

  New Revision: 845595ef8b587826e3a982a9288cf3652f1a77da

  Log:
    add GRN_CTX_PER_DB flag. fixes #1053
    
    If GRN_CTX_PER_DB=yes environment variable is set,
    GRN_CTX_PER_DB flags is set automatically.

  Modified files:
    include/groonga.h
    lib/ctx.c

  Modified: include/groonga.h (+1 -0)
===================================================================
--- include/groonga.h    2011-08-21 04:15:28 +0000 (b82525e)
+++ include/groonga.h    2011-08-28 09:11:59 +0000 (724de04)
@@ -206,6 +206,7 @@ struct _grn_ctx {
 
 #define GRN_CTX_USE_QL                 (0x03)
 #define GRN_CTX_BATCH_MODE             (0x04)
+#define GRN_CTX_PER_DB                 (0x08)
 
 GRN_API grn_rc grn_ctx_init(grn_ctx *ctx, int flags);
 

  Modified: lib/ctx.c (+8 -0)
===================================================================
--- lib/ctx.c    2011-08-21 04:15:28 +0000 (e26f7a9)
+++ lib/ctx.c    2011-08-28 09:11:59 +0000 (70d012a)
@@ -532,6 +532,9 @@ grn_ctx_init(grn_ctx *ctx, int flags)
   // if (ctx->stat != GRN_CTX_FIN) { return GRN_INVALID_ARGUMENT; }
   ERRCLR(ctx);
   ctx->flags = flags;
+  if (getenv("GRN_CTX_PER_DB") && strcmp(getenv("GRN_CTX_PER_DB"), "yes") == 0) {
+    ctx->flags |= GRN_CTX_PER_DB;
+  }
   ctx->stat = GRN_QL_WAIT_EXPR;
   ctx->encoding = grn_gctx.encoding;
   ctx->seqno = 0;
@@ -637,6 +640,11 @@ grn_ctx_fin(grn_ctx *ctx)
       });
     }
     grn_hash_close(ctx, ctx->impl->expr_vars);
+    if (ctx->impl->db && ctx->flags & GRN_CTX_PER_DB) {
+      grn_obj *db = ctx->impl->db;
+      ctx->impl->db = NULL;
+      grn_obj_close(ctx, db);
+    }
     {
       int i;
       grn_io_mapinfo *mi;




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