[Groonga-commit] pgroonga/pgroonga at d07d81d [master] Group buffers

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Jan 23 23:45:32 JST 2016


Kouhei Sutou	2016-01-23 23:45:32 +0900 (Sat, 23 Jan 2016)

  New Revision: d07d81d4a823e8ed32fd83dca1b04c245aa50a5e
  https://github.com/pgroonga/pgroonga/commit/d07d81d4a823e8ed32fd83dca1b04c245aa50a5e

  Message:
    Group buffers

  Modified files:
    src/pgrn_global.c
    src/pgrn_global.h
    src/pgroonga.c

  Modified: src/pgrn_global.c (+18 -0)
===================================================================
--- src/pgrn_global.c    2016-01-23 23:23:55 +0900 (403f77a)
+++ src/pgrn_global.c    2016-01-23 23:45:32 +0900 (3b816ba)
@@ -8,12 +8,30 @@ static grn_ctx *ctx = &PGrnContext;
 void
 PGrnInitializeBuffers(void)
 {
+	GRN_VOID_INIT(&(PGrnBuffers.general));
+	GRN_TEXT_INIT(&(PGrnBuffers.path), 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.keyword), 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.pattern), 0);
+	GRN_UINT64_INIT(&(PGrnBuffers.ctid), 0);
+	GRN_FLOAT_INIT(&(PGrnBuffers.score), 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.head), 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.body), 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.foot), 0);
 	GRN_TEXT_INIT(&(PGrnBuffers.inspect), 0);
 }
 
 void
 PGrnFinalizeBuffers(void)
 {
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.general));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.path));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.keyword));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.pattern));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.ctid));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.score));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.head));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.body));
+	GRN_OBJ_FIN(ctx, &(PGrnBuffers.foot));
 	GRN_OBJ_FIN(ctx, &(PGrnBuffers.inspect));
 }
 

  Modified: src/pgrn_global.h (+9 -0)
===================================================================
--- src/pgrn_global.h    2016-01-23 23:23:55 +0900 (8b05766)
+++ src/pgrn_global.h    2016-01-23 23:45:32 +0900 (eca4b92)
@@ -3,6 +3,15 @@
 #include <groonga.h>
 
 struct PGrnBuffers {
+	grn_obj general;
+	grn_obj path;
+	grn_obj keyword;
+	grn_obj pattern;
+	grn_obj ctid;
+	grn_obj score;
+	grn_obj head;
+	grn_obj body;
+	grn_obj foot;
 	grn_obj inspect;
 };
 

  Modified: src/pgroonga.c (+130 -154)
===================================================================
--- src/pgroonga.c    2016-01-23 23:23:55 +0900 (2de89dc)
+++ src/pgroonga.c    2016-01-23 23:45:32 +0900 (1bc1d5c)
@@ -180,15 +180,7 @@ PG_FUNCTION_INFO_V1(pgroonga_canreturn);
 PG_FUNCTION_INFO_V1(pgroonga_costestimate);
 
 static grn_ctx *ctx = NULL;
-static grn_obj buffer;
-static grn_obj pathBuffer;
-static grn_obj keywordBuffer;
-static grn_obj patternBuffer;
-static grn_obj ctidBuffer;
-static grn_obj scoreBuffer;
-static grn_obj headBuffer;
-static grn_obj bodyBuffer;
-static grn_obj footBuffer;
+static struct PGrnBuffers *buffers = &PGrnBuffers;
 static PGrnSequentialSearchData sequentialSearchData;
 
 static grn_encoding
@@ -271,15 +263,6 @@ PGrnOnProcExit(int code, Datum arg)
 		PGrnFinalizeSequentialSearchData();
 
 		PGrnFinalizeBuffers();
-		GRN_OBJ_FIN(ctx, &footBuffer);
-		GRN_OBJ_FIN(ctx, &bodyBuffer);
-		GRN_OBJ_FIN(ctx, &headBuffer);
-		GRN_OBJ_FIN(ctx, &ctidBuffer);
-		GRN_OBJ_FIN(ctx, &scoreBuffer);
-		GRN_OBJ_FIN(ctx, &patternBuffer);
-		GRN_OBJ_FIN(ctx, &keywordBuffer);
-		GRN_OBJ_FIN(ctx, &pathBuffer);
-		GRN_OBJ_FIN(ctx, &buffer);
 
 		db = grn_ctx_db(ctx);
 		if (db)
@@ -350,16 +333,6 @@ _PG_init(void)
 
 	ctx = &PGrnContext;
 
-	GRN_VOID_INIT(&buffer);
-	GRN_TEXT_INIT(&pathBuffer, 0);
-	GRN_TEXT_INIT(&keywordBuffer, 0);
-	GRN_TEXT_INIT(&patternBuffer, 0);
-	GRN_FLOAT_INIT(&scoreBuffer, 0);
-	GRN_UINT64_INIT(&ctidBuffer, 0);
-	GRN_TEXT_INIT(&headBuffer, 0);
-	GRN_TEXT_INIT(&bodyBuffer, 0);
-	GRN_TEXT_INIT(&footBuffer, 0);
-
 	PGrnInitializeBuffers();
 
 	PGrnEnsureDatabase();
@@ -1550,17 +1523,17 @@ PGrnCollectScoreScanOpaque(Relation table, HeapTuple tuple, PGrnScanOpaque so)
 	if (!OidIsValid(so->primaryKey.type))
 		return 0.0;
 
-	grn_obj_reinit(ctx, &buffer, so->primaryKey.domain, so->primaryKey.flags);
+	grn_obj_reinit(ctx, &(buffers->general), so->primaryKey.domain, so->primaryKey.flags);
 
 	desc = RelationGetDescr(table);
 	primaryKeyValue = heap_getattr(tuple, so->primaryKey.number, desc, &isNULL);
-	PGrnConvertFromData(primaryKeyValue, so->primaryKey.type, &buffer);
+	PGrnConvertFromData(primaryKeyValue, so->primaryKey.type, &(buffers->general));
 
 	tableCursor = grn_table_cursor_open(ctx, so->primaryKey.lexicon,
-										GRN_BULK_HEAD(&buffer),
-										GRN_BULK_VSIZE(&buffer),
-										GRN_BULK_HEAD(&buffer),
-										GRN_BULK_VSIZE(&buffer),
+										GRN_BULK_HEAD(&(buffers->general)),
+										GRN_BULK_VSIZE(&(buffers->general)),
+										GRN_BULK_HEAD(&(buffers->general)),
+										GRN_BULK_VSIZE(&(buffers->general)),
 										0, -1, GRN_CURSOR_ASCENDING);
 	if (!tableCursor)
 		return 0.0;
@@ -1585,22 +1558,22 @@ PGrnCollectScoreScanOpaque(Relation table, HeapTuple tuple, PGrnScanOpaque so)
 		if (id == GRN_ID_NIL)
 			continue;
 
-		GRN_BULK_REWIND(&ctidBuffer);
-		grn_obj_get_value(ctx, so->ctidAccessor, id, &ctidBuffer);
-		ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
+		GRN_BULK_REWIND(&(buffers->ctid));
+		grn_obj_get_value(ctx, so->ctidAccessor, id, &(buffers->ctid));
+		ctid = UInt64ToCtid(GRN_UINT64_VALUE(&(buffers->ctid)));
 
 		if (!PGrnIsAliveCtid(table, &ctid))
 			continue;
 
-		GRN_BULK_REWIND(&scoreBuffer);
-		grn_obj_get_value(ctx, so->scoreAccessor, id, &scoreBuffer);
-		if (scoreBuffer.header.domain == GRN_DB_FLOAT)
+		GRN_BULK_REWIND(&(buffers->score));
+		grn_obj_get_value(ctx, so->scoreAccessor, id, &(buffers->score));
+		if (buffers->score.header.domain == GRN_DB_FLOAT)
 		{
-			score += GRN_FLOAT_VALUE(&scoreBuffer);
+			score += GRN_FLOAT_VALUE(&(buffers->score));
 		}
 		else
 		{
-			score += GRN_INT32_VALUE(&scoreBuffer);
+			score += GRN_INT32_VALUE(&(buffers->score));
 		}
 	}
 
@@ -1729,33 +1702,36 @@ pgroonga_command(PG_FUNCTION_ARGS)
 				 VARSIZE_ANY_EXHDR(groongaCommand), 0);
 	rc = ctx->rc;
 
-	GRN_BULK_REWIND(&bodyBuffer);
+	GRN_BULK_REWIND(&(buffers->body));
 	do {
 		char *chunk;
 		unsigned int chunkSize;
 		grn_ctx_recv(ctx, &chunk, &chunkSize, &flags);
-		GRN_TEXT_PUT(ctx, &bodyBuffer, chunk, chunkSize);
+		GRN_TEXT_PUT(ctx, &(buffers->body), chunk, chunkSize);
 	} while ((flags & GRN_CTX_MORE));
 
-	GRN_BULK_REWIND(&headBuffer);
-	GRN_BULK_REWIND(&footBuffer);
+	GRN_BULK_REWIND(&(buffers->head));
+	GRN_BULK_REWIND(&(buffers->foot));
 	grn_output_envelope(ctx,
 						rc,
-						&headBuffer,
-						&bodyBuffer,
-						&footBuffer,
+						&(buffers->head),
+						&(buffers->body),
+						&(buffers->foot),
 						NULL,
 						0);
 
-	grn_obj_reinit(ctx, &buffer, GRN_DB_TEXT, 0);
-	GRN_TEXT_PUT(ctx, &buffer,
-				 GRN_TEXT_VALUE(&headBuffer), GRN_TEXT_LEN(&headBuffer));
-	GRN_TEXT_PUT(ctx, &buffer,
-				 GRN_TEXT_VALUE(&bodyBuffer), GRN_TEXT_LEN(&bodyBuffer));
-	GRN_TEXT_PUT(ctx, &buffer,
-				 GRN_TEXT_VALUE(&footBuffer), GRN_TEXT_LEN(&footBuffer));
-	result = cstring_to_text_with_len(GRN_TEXT_VALUE(&buffer),
-									  GRN_TEXT_LEN(&buffer));
+	grn_obj_reinit(ctx, &(buffers->general), GRN_DB_TEXT, 0);
+	GRN_TEXT_PUT(ctx, &(buffers->general),
+				 GRN_TEXT_VALUE(&(buffers->head)),
+				 GRN_TEXT_LEN(&(buffers->head)));
+	GRN_TEXT_PUT(ctx, &(buffers->general),
+				 GRN_TEXT_VALUE(&(buffers->body)),
+				 GRN_TEXT_LEN(&(buffers->body)));
+	GRN_TEXT_PUT(ctx, &(buffers->general),
+				 GRN_TEXT_VALUE(&(buffers->foot)),
+				 GRN_TEXT_LEN(&(buffers->foot)));
+	result = cstring_to_text_with_len(GRN_TEXT_VALUE(&(buffers->general)),
+									  GRN_TEXT_LEN(&(buffers->general)));
 	PG_RETURN_TEXT_P(result);
 }
 
@@ -1939,8 +1915,8 @@ pgroonga_match_term_text_array(PG_FUNCTION_ARGS)
 	grn_obj elementBuffer;
 	int i, n;
 
-	grn_obj_reinit(ctx, &buffer, GRN_DB_TEXT, 0);
-	GRN_TEXT_SET(ctx, &buffer, VARDATA_ANY(term), VARSIZE_ANY_EXHDR(term));
+	grn_obj_reinit(ctx, &(buffers->general), GRN_DB_TEXT, 0);
+	GRN_TEXT_SET(ctx, &(buffers->general), VARDATA_ANY(term), VARSIZE_ANY_EXHDR(term));
 
 	GRN_TEXT_INIT(&elementBuffer, GRN_OBJ_DO_SHALLOW_COPY);
 
@@ -1960,8 +1936,8 @@ pgroonga_match_term_text_array(PG_FUNCTION_ARGS)
 					 VARDATA_ANY(element), VARSIZE_ANY_EXHDR(element));
 		if (pgroonga_match_term_raw(GRN_TEXT_VALUE(&elementBuffer),
 									GRN_TEXT_LEN(&elementBuffer),
-									GRN_TEXT_VALUE(&buffer),
-									GRN_TEXT_LEN(&buffer)))
+									GRN_TEXT_VALUE(&(buffers->general)),
+									GRN_TEXT_LEN(&(buffers->general))))
 		{
 			matched = true;
 			break;
@@ -2001,8 +1977,8 @@ pgroonga_match_term_varchar_array(PG_FUNCTION_ARGS)
 	grn_obj elementBuffer;
 	int i, n;
 
-	grn_obj_reinit(ctx, &buffer, GRN_DB_TEXT, 0);
-	GRN_TEXT_SET(ctx, &buffer, VARDATA_ANY(term), VARSIZE_ANY_EXHDR(term));
+	grn_obj_reinit(ctx, &(buffers->general), GRN_DB_TEXT, 0);
+	GRN_TEXT_SET(ctx, &(buffers->general), VARDATA_ANY(term), VARSIZE_ANY_EXHDR(term));
 
 	GRN_TEXT_INIT(&elementBuffer, GRN_OBJ_DO_SHALLOW_COPY);
 
@@ -2020,7 +1996,7 @@ pgroonga_match_term_varchar_array(PG_FUNCTION_ARGS)
 		element = DatumGetVarCharPP(elementDatum);
 		GRN_TEXT_SET(ctx, &elementBuffer,
 					 VARDATA_ANY(element), VARSIZE_ANY_EXHDR(element));
-		if (grn_operator_exec_equal(ctx, &buffer, &elementBuffer))
+		if (grn_operator_exec_equal(ctx, &(buffers->general), &elementBuffer))
 		{
 			matched = true;
 			break;
@@ -2075,12 +2051,12 @@ pgroonga_match_query_raw(const char *target, unsigned int targetSize,
 						message)));
 	}
 
-	grn_obj_reinit(ctx, &buffer, GRN_DB_TEXT, 0);
-	GRN_TEXT_SET(ctx, &buffer, target, targetSize);
+	grn_obj_reinit(ctx, &(buffers->general), GRN_DB_TEXT, 0);
+	GRN_TEXT_SET(ctx, &(buffers->general), target, targetSize);
 	grn_obj_set_value(ctx,
 					  sequentialSearchData.textColumn,
 					  sequentialSearchData.recordID,
-					  &buffer,
+					  &(buffers->general),
 					  GRN_OBJ_SET);
 	GRN_RECORD_SET(ctx, variable, sequentialSearchData.recordID);
 
@@ -2621,8 +2597,8 @@ PGrnInsert(Relation index,
 	unsigned int i;
 
 	id = grn_table_add(ctx, sourcesTable, NULL, 0, NULL);
-	GRN_UINT64_SET(ctx, &ctidBuffer, CtidToUInt64(ht_ctid));
-	grn_obj_set_value(ctx, sourcesCtidColumn, id, &ctidBuffer, GRN_OBJ_SET);
+	GRN_UINT64_SET(ctx, &(buffers->ctid), CtidToUInt64(ht_ctid));
+	grn_obj_set_value(ctx, sourcesCtidColumn, id, &(buffers->ctid), GRN_OBJ_SET);
 
 	for (i = 0; i < desc->natts; i++)
 	{
@@ -2641,16 +2617,16 @@ PGrnInsert(Relation index,
 #ifdef JSONBOID
 		if (attribute->atttypid == JSONBOID)
 		{
-			PGrnInsertForJSON(index, values, i, &buffer);
+			PGrnInsertForJSON(index, values, i, &(buffers->general));
 		}
 		else
 #endif
 		{
 			domain = PGrnGetType(index, i, &flags);
-			grn_obj_reinit(ctx, &buffer, domain, flags);
-			PGrnConvertFromData(values[i], attribute->atttypid, &buffer);
+			grn_obj_reinit(ctx, &(buffers->general), domain, flags);
+			PGrnConvertFromData(values[i], attribute->atttypid, &(buffers->general));
 		}
-		grn_obj_set_value(ctx, dataColumn, id, &buffer, GRN_OBJ_SET);
+		grn_obj_set_value(ctx, dataColumn, id, &(buffers->general), GRN_OBJ_SET);
 		grn_obj_unlink(ctx, dataColumn);
 		if (!PGrnCheck("pgroonga: failed to set column value")) {
 			continue;
@@ -2938,7 +2914,7 @@ PGrnSearchBuildConditionLikeMatch(PGrnSearchData *data,
 		return;
 	}
 
-	GRN_BULK_REWIND(&keywordBuffer);
+	GRN_BULK_REWIND(&(buffers->keyword));
 	for (i = 0; i < querySize; i++)
 	{
 		switch (queryRaw[i])
@@ -2946,11 +2922,11 @@ PGrnSearchBuildConditionLikeMatch(PGrnSearchData *data,
 		case '\\':
 			if (i == querySize)
 			{
-				GRN_TEXT_PUTC(ctx, &keywordBuffer, '\\');
+				GRN_TEXT_PUTC(ctx, &(buffers->keyword), '\\');
 			}
 			else
 			{
-				GRN_TEXT_PUTC(ctx, &keywordBuffer, queryRaw[i + 1]);
+				GRN_TEXT_PUTC(ctx, &(buffers->keyword), queryRaw[i + 1]);
 				i++;
 			}
 			break;
@@ -2958,18 +2934,18 @@ PGrnSearchBuildConditionLikeMatch(PGrnSearchData *data,
 		case '_':
 			PGrnSearchBuildConditionLikeMatchFlush(expression,
 												   targetColumn,
-												   &keywordBuffer,
+												   &(buffers->keyword),
 												   &nKeywords);
 			break;
 		default:
-			GRN_TEXT_PUTC(ctx, &keywordBuffer, queryRaw[i]);
+			GRN_TEXT_PUTC(ctx, &(buffers->keyword), queryRaw[i]);
 			break;
 		}
 	}
 
 	PGrnSearchBuildConditionLikeMatchFlush(expression,
 										   targetColumn,
-										   &keywordBuffer,
+										   &(buffers->keyword),
 										   &nKeywords);
 	if (nKeywords == 0)
 	{
@@ -2999,9 +2975,9 @@ PGrnSearchBuildConditionLikeRegexp(PGrnSearchData *data,
 	querySize = GRN_TEXT_LEN(query);
 	queryRawEnd = queryRaw + querySize;
 
-	GRN_BULK_REWIND(&patternBuffer);
+	GRN_BULK_REWIND(&(buffers->pattern));
 	if (queryRaw[0] != '%')
-		GRN_TEXT_PUTS(ctx, &patternBuffer, "\\A");
+		GRN_TEXT_PUTS(ctx, &(buffers->pattern), "\\A");
 
 	queryRawCurrent = queryRaw;
 	while ((characterSize = grn_charlen(ctx, queryRawCurrent, queryRawEnd)) > 0)
@@ -3026,12 +3002,12 @@ PGrnSearchBuildConditionLikeRegexp(PGrnSearchData *data,
 				}
 				else
 				{
-					GRN_TEXT_PUTS(ctx, &patternBuffer, ".*");
+					GRN_TEXT_PUTS(ctx, &(buffers->pattern), ".*");
 				}
 				needToAddCharacter = false;
 				break;
 			case '_':
-				GRN_TEXT_PUTC(ctx, &patternBuffer, '.');
+				GRN_TEXT_PUTC(ctx, &(buffers->pattern), '.');
 				needToAddCharacter = false;
 				break;
 			case '\\':
@@ -3064,17 +3040,17 @@ PGrnSearchBuildConditionLikeRegexp(PGrnSearchData *data,
 			case '}':
 			case '^':
 			case '$':
-				GRN_TEXT_PUTC(ctx, &patternBuffer, '\\');
-				GRN_TEXT_PUTC(ctx, &patternBuffer, current[0]);
+				GRN_TEXT_PUTC(ctx, &(buffers->pattern), '\\');
+				GRN_TEXT_PUTC(ctx, &(buffers->pattern), current[0]);
 				break;
 			default:
-				GRN_TEXT_PUTC(ctx, &patternBuffer, current[0]);
+				GRN_TEXT_PUTC(ctx, &(buffers->pattern), current[0]);
 				break;
 			}
 		}
 		else
 		{
-			GRN_TEXT_PUT(ctx, &patternBuffer, current, characterSize);
+			GRN_TEXT_PUT(ctx, &(buffers->pattern), current, characterSize);
 		}
 		escaping = false;
 	}
@@ -3088,13 +3064,13 @@ PGrnSearchBuildConditionLikeRegexp(PGrnSearchData *data,
 	}
 
 	if (!lastIsPercent)
-		GRN_TEXT_PUTS(ctx, &patternBuffer, "\\z");
+		GRN_TEXT_PUTS(ctx, &(buffers->pattern), "\\z");
 
 	grn_expr_append_obj(ctx, expression, targetColumn, GRN_OP_PUSH, 1);
 	grn_expr_append_op(ctx, expression, GRN_OP_GET_VALUE, 1);
 	grn_expr_append_const_str(ctx, expression,
-							  GRN_TEXT_VALUE(&patternBuffer),
-							  GRN_TEXT_LEN(&patternBuffer),
+							  GRN_TEXT_VALUE(&(buffers->pattern)),
+							  GRN_TEXT_LEN(&(buffers->pattern)),
 							  GRN_OP_PUSH, 1);
 	grn_expr_append_op(ctx, expression, GRN_OP_REGEXP, 2);
 }
@@ -3129,20 +3105,20 @@ PGrnSearchBuildConditionJSONContainType(PGrnSearchData *data,
 										const char *typeName,
 										unsigned int *nthCondition)
 {
-	GRN_BULK_REWIND(&buffer);
+	GRN_BULK_REWIND(&(buffers->general));
 
-	GRN_TEXT_PUTS(ctx, &buffer, "type == ");
-	grn_text_esc(ctx, &buffer, typeName, strlen(typeName));
+	GRN_TEXT_PUTS(ctx, &(buffers->general), "type == ");
+	grn_text_esc(ctx, &(buffers->general), typeName, strlen(typeName));
 
-	GRN_BULK_REWIND(&pathBuffer);
-	PGrnJSONGenerateCompletePath(components, &pathBuffer);
-	GRN_TEXT_PUTS(ctx, &buffer, " && path == ");
-	grn_text_esc(ctx, &buffer,
-				 GRN_TEXT_VALUE(&pathBuffer),
-				 GRN_TEXT_LEN(&pathBuffer));
+	GRN_BULK_REWIND(&(buffers->path));
+	PGrnJSONGenerateCompletePath(components, &(buffers->path));
+	GRN_TEXT_PUTS(ctx, &(buffers->general), " && path == ");
+	grn_text_esc(ctx, &(buffers->general),
+				 GRN_TEXT_VALUE(&(buffers->path)),
+				 GRN_TEXT_LEN(&(buffers->path)));
 
 	PGrnSearchBuildConditionJSONQuery(data, subFilter, targetColumn,
-									  &buffer, nthCondition);
+									  &(buffers->general), nthCondition);
 }
 
 static void
@@ -3153,18 +3129,18 @@ PGrnSearchBuildConditionJSONContainValue(PGrnSearchData *data,
 										 JsonbValue *value,
 										 unsigned int *nthCondition)
 {
-	GRN_BULK_REWIND(&buffer);
+	GRN_BULK_REWIND(&(buffers->general));
 
 	switch (value->type)
 	{
 	case jbvNull:
-		GRN_TEXT_PUTS(ctx, &buffer, "type == \"null\"");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), "type == \"null\"");
 		break;
 	case jbvString:
 		if (value->val.string.len == 0)
-			GRN_TEXT_PUTS(ctx, &buffer, "type == \"string\" && ");
-		GRN_TEXT_PUTS(ctx, &buffer, "string == ");
-		grn_text_esc(ctx, &buffer,
+			GRN_TEXT_PUTS(ctx, &(buffers->general), "type == \"string\" && ");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), "string == ");
+		grn_text_esc(ctx, &(buffers->general),
 					 value->val.string.val,
 					 value->val.string.len);
 		break;
@@ -3176,33 +3152,33 @@ PGrnSearchBuildConditionJSONContainValue(PGrnSearchData *data,
 		const char *numericInCString = DatumGetCString(numericInString);
 
 		if (strcmp(numericInCString, "0") == 0)
-			GRN_TEXT_PUTS(ctx, &buffer, "type == \"number\" && ");
-		GRN_TEXT_PUTS(ctx, &buffer, "number == ");
-		GRN_TEXT_PUTS(ctx, &buffer, numericInCString);
+			GRN_TEXT_PUTS(ctx, &(buffers->general), "type == \"number\" && ");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), "number == ");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), numericInCString);
 		break;
 	}
 	case jbvBool:
-		GRN_TEXT_PUTS(ctx, &buffer, "type == \"boolean\" && ");
-		GRN_TEXT_PUTS(ctx, &buffer, "boolean == ");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), "type == \"boolean\" && ");
+		GRN_TEXT_PUTS(ctx, &(buffers->general), "boolean == ");
 		if (value->val.boolean)
-			GRN_TEXT_PUTS(ctx, &buffer, "true");
+			GRN_TEXT_PUTS(ctx, &(buffers->general), "true");
 		else
-			GRN_TEXT_PUTS(ctx, &buffer, "false");
+			GRN_TEXT_PUTS(ctx, &(buffers->general), "false");
 		break;
 	default:
 		return;
 		break;
 	}
 
-	GRN_BULK_REWIND(&pathBuffer);
-	PGrnJSONGenerateCompletePath(components, &pathBuffer);
-	GRN_TEXT_PUTS(ctx, &buffer, " && path == ");
-	grn_text_esc(ctx, &buffer,
-				 GRN_TEXT_VALUE(&pathBuffer),
-				 GRN_TEXT_LEN(&pathBuffer));
+	GRN_BULK_REWIND(&(buffers->path));
+	PGrnJSONGenerateCompletePath(components, &(buffers->path));
+	GRN_TEXT_PUTS(ctx, &(buffers->general), " && path == ");
+	grn_text_esc(ctx, &(buffers->general),
+				 GRN_TEXT_VALUE(&(buffers->path)),
+				 GRN_TEXT_LEN(&(buffers->path)));
 
 	PGrnSearchBuildConditionJSONQuery(data, subFilter, targetColumn,
-									  &buffer, nthCondition);
+									  &(buffers->general), nthCondition);
 }
 
 static void
@@ -3303,16 +3279,16 @@ PGrnSearchBuildConditionJSON(PGrnSearchData *data,
 	grn_obj *subFilter;
 
 	subFilter = PGrnLookup("sub_filter", ERROR);
-	grn_obj_reinit(ctx, &buffer, GRN_DB_TEXT, 0);
+	grn_obj_reinit(ctx, &(buffers->general), GRN_DB_TEXT, 0);
 
 	if (key->sk_strategy == PGrnQueryStrategyNumber)
 	{
 		unsigned int nthCondition = 0;
-		PGrnConvertFromData(key->sk_argument, TEXTOID, &buffer);
+		PGrnConvertFromData(key->sk_argument, TEXTOID, &(buffers->general));
 		PGrnSearchBuildConditionJSONQuery(data,
 										  subFilter,
 										  targetColumn,
-										  &buffer,
+										  &(buffers->general),
 										  &nthCondition);
 	}
 	else
@@ -3361,7 +3337,7 @@ PGrnSearchBuildCondition(IndexScanDesc scan,
 		grn_id domain;
 		unsigned char flags = 0;
 		domain = PGrnGetType(index, key->sk_attno - 1, NULL);
-		grn_obj_reinit(ctx, &buffer, domain, flags);
+		grn_obj_reinit(ctx, &(buffers->general), domain, flags);
 	}
 	{
 		Oid valueTypeID = attribute->atttypid;
@@ -3374,7 +3350,7 @@ PGrnSearchBuildCondition(IndexScanDesc scan,
 			valueTypeID = TEXTOID;
 			break;
 		}
-		PGrnConvertFromData(key->sk_argument, valueTypeID, &buffer);
+		PGrnConvertFromData(key->sk_argument, valueTypeID, &(buffers->general));
 	}
 
 	switch (key->sk_strategy)
@@ -3417,12 +3393,12 @@ PGrnSearchBuildCondition(IndexScanDesc scan,
 	{
 	case PGrnLikeStrategyNumber:
 		if (PGrnIsForRegexpSearchIndex(index, key->sk_attno - 1))
-			PGrnSearchBuildConditionLikeRegexp(data, targetColumn, &buffer);
+			PGrnSearchBuildConditionLikeRegexp(data, targetColumn, &(buffers->general));
 		else
-			PGrnSearchBuildConditionLikeMatch(data, targetColumn, &buffer);
+			PGrnSearchBuildConditionLikeMatch(data, targetColumn, &(buffers->general));
 		break;
 	case PGrnILikeStrategyNumber:
-		PGrnSearchBuildConditionLikeMatch(data, targetColumn, &buffer);
+		PGrnSearchBuildConditionLikeMatch(data, targetColumn, &(buffers->general));
 		break;
 	case PGrnQueryStrategyNumber:
 	{
@@ -3437,7 +3413,7 @@ PGrnSearchBuildCondition(IndexScanDesc scan,
 		grn_expr_append_obj(ctx, matchTarget, targetColumn, GRN_OP_PUSH, 1);
 
 		rc = grn_expr_parse(ctx, data->expression,
-							GRN_TEXT_VALUE(&buffer), GRN_TEXT_LEN(&buffer),
+							GRN_TEXT_VALUE(&(buffers->general)), GRN_TEXT_LEN(&(buffers->general)),
 							matchTarget, GRN_OP_MATCH, GRN_OP_AND,
 							flags);
 		if (rc != GRN_SUCCESS)
@@ -3454,7 +3430,7 @@ PGrnSearchBuildCondition(IndexScanDesc scan,
 							targetColumn, GRN_OP_PUSH, 1);
 		grn_expr_append_op(ctx, data->expression, GRN_OP_GET_VALUE, 1);
 		grn_expr_append_const(ctx, data->expression,
-							  &buffer, GRN_OP_PUSH, 1);
+							  &(buffers->general), GRN_OP_PUSH, 1);
 		grn_expr_append_op(ctx, data->expression, operator, 2);
 		break;
 	}
@@ -3662,12 +3638,12 @@ PGrnFillBorder(IndexScanDesc scan,
 		case PGrnLessEqualStrategyNumber:
 			if (maxBorderValue->header.type != GRN_DB_VOID)
 			{
-				grn_obj_reinit(ctx, &buffer, domain, 0);
+				grn_obj_reinit(ctx, &(buffers->general), domain, 0);
 				PGrnConvertFromData(key->sk_argument,
 									attribute->atttypid,
-									&buffer);
+									&(buffers->general));
 				if (!PGrnIsMeaningfullMaxBorderValue(maxBorderValue,
-													 &buffer,
+													 &(buffers->general),
 													 *flags,
 													 key->sk_strategy))
 				{
@@ -3694,12 +3670,12 @@ PGrnFillBorder(IndexScanDesc scan,
 		case PGrnGreaterStrategyNumber:
 			if (minBorderValue->header.type != GRN_DB_VOID)
 			{
-				grn_obj_reinit(ctx, &buffer, domain, 0);
+				grn_obj_reinit(ctx, &(buffers->general), domain, 0);
 				PGrnConvertFromData(key->sk_argument,
 									attribute->atttypid,
-									&buffer);
+									&(buffers->general));
 				if (!PGrnIsMeaningfullMinBorderValue(minBorderValue,
-													 &buffer,
+													 &(buffers->general),
 													 *flags,
 													 key->sk_strategy))
 				{
@@ -3891,9 +3867,9 @@ PGrnGetTupleFillIndexTuple(PGrnScanOpaque so,
 	recordID = so->currentID;
 	if (so->sorted)
 	{
-		GRN_BULK_REWIND(&buffer);
-		grn_obj_get_value(ctx, so->sorted, recordID, &buffer);
-		recordID = GRN_RECORD_VALUE(&buffer);
+		GRN_BULK_REWIND(&(buffers->general));
+		grn_obj_get_value(ctx, so->sorted, recordID, &(buffers->general));
+		recordID = GRN_RECORD_VALUE(&(buffers->general));
 	}
 	if (so->searched)
 	{
@@ -3909,9 +3885,9 @@ PGrnGetTupleFillIndexTuple(PGrnScanOpaque so,
 
 		name = &(attribute->attname);
 		dataColumn = PGrnLookupColumn(so->sourcesTable, name->data, ERROR);
-		GRN_BULK_REWIND(&buffer);
-		grn_obj_get_value(ctx, dataColumn, recordID, &buffer);
-		values[i] = PGrnConvertToDatum(&buffer, attribute->atttypid);
+		GRN_BULK_REWIND(&(buffers->general));
+		grn_obj_get_value(ctx, dataColumn, recordID, &(buffers->general));
+		values[i] = PGrnConvertToDatum(&(buffers->general), attribute->atttypid);
 		isNulls[i] = false;
 		grn_obj_unlink(ctx, dataColumn);
 	}
@@ -3967,9 +3943,9 @@ pgroonga_gettuple(PG_FUNCTION_ARGS)
 	}
 	else
 	{
-		GRN_BULK_REWIND(&ctidBuffer);
-		grn_obj_get_value(ctx, so->ctidAccessor, so->currentID, &ctidBuffer);
-		scan->xs_ctup.t_self = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
+		GRN_BULK_REWIND(&(buffers->ctid));
+		grn_obj_get_value(ctx, so->ctidAccessor, so->currentID, &(buffers->ctid));
+		scan->xs_ctup.t_self = UInt64ToCtid(GRN_UINT64_VALUE(&(buffers->ctid)));
 
 #ifdef PGRN_SUPPORT_INDEX_ONLY_SCAN
 		if (scan->xs_want_itup)
@@ -4002,9 +3978,9 @@ pgroonga_getbitmap(PG_FUNCTION_ARGS)
 		while ((posting = grn_index_cursor_next(ctx, so->indexCursor, &termID)))
 		{
 			ItemPointerData ctid;
-			GRN_BULK_REWIND(&ctidBuffer);
-			grn_obj_get_value(ctx, so->ctidAccessor, posting->rid, &ctidBuffer);
-			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
+			GRN_BULK_REWIND(&(buffers->ctid));
+			grn_obj_get_value(ctx, so->ctidAccessor, posting->rid, &(buffers->ctid));
+			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&(buffers->ctid)));
 			tbm_add_tuples(tbm, &ctid, 1, scan->xs_recheck);
 			nRecords++;
 		}
@@ -4015,9 +3991,9 @@ pgroonga_getbitmap(PG_FUNCTION_ARGS)
 		while ((id = grn_table_cursor_next(ctx, so->tableCursor)) != GRN_ID_NIL)
 		{
 			ItemPointerData ctid;
-			GRN_BULK_REWIND(&ctidBuffer);
-			grn_obj_get_value(ctx, so->ctidAccessor, id, &ctidBuffer);
-			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
+			GRN_BULK_REWIND(&(buffers->ctid));
+			grn_obj_get_value(ctx, so->ctidAccessor, id, &(buffers->ctid));
+			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&(buffers->ctid)));
 			tbm_add_tuples(tbm, &ctid, 1, scan->xs_recheck);
 			nRecords++;
 		}
@@ -4429,9 +4405,9 @@ pgroonga_bulkdelete(PG_FUNCTION_ARGS)
 
 			CHECK_FOR_INTERRUPTS();
 
-			GRN_BULK_REWIND(&ctidBuffer);
-			grn_obj_get_value(ctx, sourcesCtidColumn, id, &ctidBuffer);
-			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
+			GRN_BULK_REWIND(&(buffers->ctid));
+			grn_obj_get_value(ctx, sourcesCtidColumn, id, &(buffers->ctid));
+			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&(buffers->ctid)));
 			if (callback(&ctid, callback_state))
 			{
 				if (jsonValuesTable)
-------------- next part --------------
HTML����������������������������...
Download 



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