[Groonga-commit] pgroonga/pgroonga at 43505c6 [master] Split options related code

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Jan 23 23:15:37 JST 2016


Kouhei Sutou	2016-01-23 23:15:37 +0900 (Sat, 23 Jan 2016)

  New Revision: 43505c670c25a6ec7f2e9563a3c13ceacb0dc4cc
  https://github.com/pgroonga/pgroonga/commit/43505c670c25a6ec7f2e9563a3c13ceacb0dc4cc

  Message:
    Split options related code

  Added files:
    src/pgrn_inspect.c
    src/pgrn_inspect.h
    src/pgrn_options.c
    src/pgrn_options.h
  Modified files:
    CMakeLists.txt
    Makefile
    src/pgrn_global.h
    src/pgroonga.c

  Modified: CMakeLists.txt (+4 -2)
===================================================================
--- CMakeLists.txt    2016-01-23 22:49:42 +0900 (ddb7964)
+++ CMakeLists.txt    2016-01-23 23:15:37 +0900 (a8a1763)
@@ -48,8 +48,10 @@ link_directories(
 
 set(PGRN_SOURCES
   "src/pgroonga.c"
-  "src/pgn_value.c"
-  "src/pgn_variables.c"
+  "src/pgrn_inspect.c"
+  "src/pgrn_options.c"
+  "src/pgrn_value.c"
+  "src/pgrn_variables.c"
   "vendor/xxHash/xxhash.c")
 set_source_files_properties(${PGRN_SOURCES}
   PROPERTIES

  Modified: Makefile (+2 -0)
===================================================================
--- Makefile    2016-01-23 22:49:42 +0900 (672530a)
+++ Makefile    2016-01-23 23:15:37 +0900 (6513136)
@@ -4,6 +4,8 @@ GROONGA_PKG = "groonga >= $(REQUIRED_GROONGA_VERSION)"
 MODULE_big = pgroonga
 SRCS =						\
 	src/pgroonga.c				\
+	src/pgrn_inspect.c			\
+	src/pgrn_options.c			\
 	src/pgrn_value.c			\
 	src/pgrn_variables.c			\
 	vendor/xxHash/xxhash.c

  Modified: src/pgrn_global.h (+5 -0)
===================================================================
--- src/pgrn_global.h    2016-01-23 22:49:42 +0900 (cee89ed)
+++ src/pgrn_global.h    2016-01-23 23:15:37 +0900 (9747722)
@@ -2,4 +2,9 @@
 
 #include <groonga.h>
 
+struct PGrnBuffers {
+	grn_obj inspect;
+};
+
 grn_ctx PGrnContext;
+struct PGrnBuffers PGrnBuffers;

  Added: src/pgrn_inspect.c (+17 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_inspect.c    2016-01-23 23:15:37 +0900 (8f89beb)
@@ -0,0 +1,17 @@
+#include "pgroonga.h"
+
+#include "pgrn_global.h"
+#include "pgrn_inspect.h"
+
+static grn_ctx *ctx = &PGrnContext;
+
+const char *
+PGrnInspect(grn_obj *object)
+{
+	grn_obj *buffer = &(PGrnBuffers.inspect);
+
+	GRN_BULK_REWIND(buffer);
+	grn_inspect(ctx, buffer, object);
+	GRN_TEXT_PUTC(ctx, buffer, '\0');
+	return GRN_TEXT_VALUE(buffer);
+}

  Added: src/pgrn_inspect.h (+5 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_inspect.h    2016-01-23 23:15:37 +0900 (acce75c)
@@ -0,0 +1,5 @@
+#pragma once
+
+#include <groonga.h>
+
+const char *PGrnInspect(grn_obj *object);

  Added: src/pgrn_options.c (+170 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_options.c    2016-01-23 23:15:37 +0900 (0e47db7)
@@ -0,0 +1,170 @@
+#include "pgroonga.h"
+
+#include "pgrn_compatible.h"
+#include "pgrn_global.h"
+#include "pgrn_inspect.h"
+#include "pgrn_options.h"
+#include "pgrn_value.h"
+
+#ifdef PGRN_SUPPORT_OPTIONS
+#	include <access/reloptions.h>
+#endif
+
+#include <groonga.h>
+
+#ifdef PGRN_SUPPORT_OPTIONS
+typedef struct PGrnOptions
+{
+	int32 vl_len_;
+	int tokenizerOffset;
+	int normalizerOffset;
+} PGrnOptions;
+
+static relopt_kind PGrnReloptionKind;
+
+static grn_ctx *ctx = &PGrnContext;
+
+PG_FUNCTION_INFO_V1(pgroonga_options);
+
+static bool
+PGrnIsTokenizer(grn_obj *object)
+{
+	if (object->header.type != GRN_PROC)
+		return false;
+
+	if (grn_proc_get_type(ctx, object) != GRN_PROC_TOKENIZER)
+		return false;
+
+	return true;
+}
+
+static void
+PGrnOptionValidateTokenizer(char *name)
+{
+	grn_obj *tokenizer;
+
+	if (PGrnIsNoneValue(name))
+		return;
+
+	tokenizer = grn_ctx_get(ctx, name, -1);
+	if (!tokenizer)
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("pgroonga: nonexistent tokenizer: <%s>",
+						name)));
+	}
+
+	if (!PGrnIsTokenizer(tokenizer))
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("pgroonga: not tokenizer: <%s>: %s",
+						name, PGrnInspect(tokenizer))));
+	}
+}
+
+static bool
+PGrnIsNormalizer(grn_obj *object)
+{
+	if (object->header.type != GRN_PROC)
+		return false;
+
+  if (grn_proc_get_type(ctx, object) != GRN_PROC_NORMALIZER)
+	  return false;
+
+  return true;
+}
+
+static void
+PGrnOptionValidateNormalizer(char *name)
+{
+	grn_obj *normalizer;
+
+	if (PGrnIsNoneValue(name))
+		return;
+
+	normalizer = grn_ctx_get(ctx, name, -1);
+	if (!normalizer)
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("pgroonga: nonexistent normalizer: <%s>",
+						name)));
+	}
+
+	if (!PGrnIsNormalizer(normalizer))
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("pgroonga: not normalizer: <%s>: %s",
+						name, PGrnInspect(normalizer))));
+	}
+}
+#endif
+
+void
+PGrnInitializeOptions(void)
+{
+#ifdef PGRN_SUPPORT_OPTIONS
+	PGrnReloptionKind = add_reloption_kind();
+
+	add_string_reloption(PGrnReloptionKind,
+						 "tokenizer",
+						 "Tokenizer name to be used for full-text search",
+						 PGRN_DEFAULT_TOKENIZER,
+						 PGrnOptionValidateTokenizer);
+	add_string_reloption(PGrnReloptionKind,
+						 "normalizer",
+						 "Normalizer name to be used for full-text search",
+						 PGRN_DEFAULT_NORMALIZER,
+						 PGrnOptionValidateNormalizer);
+#endif
+}
+
+void
+PGrnApplyOptionValues(Relation index,
+					  const char **tokenizerName,
+					  const char **normalizerName)
+{
+#ifdef PGRN_SUPPORT_OPTIONS
+	PGrnOptions *options;
+
+	options = (PGrnOptions *) (index->rd_options);
+	if (!options)
+		return;
+
+	*tokenizerName  = ((const char *) options) + options->tokenizerOffset;
+	*normalizerName = ((const char *) options) + options->normalizerOffset;
+#endif
+}
+
+#ifdef PGRN_SUPPORT_OPTIONS
+/**
+ * pgroonga.options() -- amoptions
+ */
+Datum
+pgroonga_options(PG_FUNCTION_ARGS)
+{
+	Datum reloptions = PG_GETARG_DATUM(0);
+	bool validate = PG_GETARG_BOOL(1);
+	relopt_value *options;
+	PGrnOptions *grnOptions;
+	int nOptions;
+	const relopt_parse_elt optionsMap[] = {
+		{"tokenizer", RELOPT_TYPE_STRING,
+		 offsetof(PGrnOptions, tokenizerOffset)},
+		{"normalizer", RELOPT_TYPE_STRING,
+		 offsetof(PGrnOptions, normalizerOffset)}
+	};
+
+	options = parseRelOptions(reloptions, validate, PGrnReloptionKind,
+							  &nOptions);
+	grnOptions = allocateReloptStruct(sizeof(PGrnOptions), options, nOptions);
+	fillRelOptions(grnOptions, sizeof(PGrnOptions), options, nOptions,
+				   validate, optionsMap, lengthof(optionsMap));
+	pfree(options);
+
+	PG_RETURN_BYTEA_P(grnOptions);
+}
+#endif

  Added: src/pgrn_options.h (+10 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_options.h    2016-01-23 23:15:37 +0900 (dda7c9b)
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <postgres.h>
+#include <utils/rel.h>
+
+void PGrnInitializeOptions(void);
+
+void PGrnApplyOptionValues(Relation index,
+						   const char **tokenizerName,
+						   const char **normalizerName);

  Modified: src/pgroonga.c (+7 -183)
===================================================================
--- src/pgroonga.c    2016-01-23 22:49:42 +0900 (829c5cd)
+++ src/pgroonga.c    2016-01-23 23:15:37 +0900 (4a40766)
@@ -2,6 +2,7 @@
 
 #include "pgrn_compatible.h"
 #include "pgrn_global.h"
+#include "pgrn_options.h"
 #include "pgrn_value.h"
 #include "pgrn_variables.h"
 
@@ -28,10 +29,6 @@
 #	include <utils/jsonb.h>
 #endif
 
-#ifdef PGRN_SUPPORT_OPTIONS
-#	include <access/reloptions.h>
-#endif
-
 #ifdef PGRN_SUPPORT_SCORE
 #	include <lib/ilist.h>
 #	include <utils/snapmgr.h>
@@ -66,18 +63,6 @@ PG_MODULE_MAGIC;
 static bool PGrnInitialized = false;
 
 static bool PGrnIsLZ4Available;
-#ifdef PGRN_SUPPORT_OPTIONS
-static relopt_kind PGrnReloptionKind;
-#endif
-
-#ifdef PGRN_SUPPORT_OPTIONS
-typedef struct PGrnOptions
-{
-	int32 vl_len_;
-	int tokenizerOffset;
-	int normalizerOffset;
-} PGrnOptions;
-#endif
 
 typedef struct PGrnCreateData
 {
@@ -193,9 +178,10 @@ PG_FUNCTION_INFO_V1(pgroonga_bulkdelete);
 PG_FUNCTION_INFO_V1(pgroonga_vacuumcleanup);
 PG_FUNCTION_INFO_V1(pgroonga_canreturn);
 PG_FUNCTION_INFO_V1(pgroonga_costestimate);
-PG_FUNCTION_INFO_V1(pgroonga_options);
 
 grn_ctx PGrnContext;
+struct PGrnBuffers PGrnBuffers;
+
 static grn_ctx *ctx = NULL;
 static grn_obj buffer;
 static grn_obj pathBuffer;
@@ -206,18 +192,8 @@ static grn_obj scoreBuffer;
 static grn_obj headBuffer;
 static grn_obj bodyBuffer;
 static grn_obj footBuffer;
-static grn_obj inspectBuffer;
 static PGrnSequentialSearchData sequentialSearchData;
 
-static const char *
-PGrnInspect(grn_obj *object)
-{
-	GRN_BULK_REWIND(&inspectBuffer);
-	grn_inspect(ctx, &inspectBuffer, object);
-	GRN_TEXT_PUTC(ctx, &inspectBuffer, '\0');
-	return GRN_TEXT_VALUE(&inspectBuffer);
-}
-
 static grn_encoding
 PGrnGetEncoding(void)
 {
@@ -297,7 +273,7 @@ PGrnOnProcExit(int code, Datum arg)
 
 		PGrnFinalizeSequentialSearchData();
 
-		GRN_OBJ_FIN(ctx, &inspectBuffer);
+		GRN_OBJ_FIN(ctx, &(PGrnBuffers.inspect));
 		GRN_OBJ_FIN(ctx, &footBuffer);
 		GRN_OBJ_FIN(ctx, &bodyBuffer);
 		GRN_OBJ_FIN(ctx, &headBuffer);
@@ -329,105 +305,6 @@ PGrnInitializeGroongaInformation(void)
 	GRN_OBJ_FIN(ctx, &grnIsSupported);
 }
 
-#ifdef PGRN_SUPPORT_OPTIONS
-static bool
-PGrnIsTokenizer(grn_obj *object)
-{
-	if (object->header.type != GRN_PROC)
-		return false;
-
-	if (grn_proc_get_type(ctx, object) != GRN_PROC_TOKENIZER)
-		return false;
-
-	return true;
-}
-
-static void
-PGrnOptionValidateTokenizer(char *name)
-{
-	grn_obj *tokenizer;
-
-	if (PGrnIsNoneValue(name))
-		return;
-
-	tokenizer = grn_ctx_get(ctx, name, -1);
-	if (!tokenizer)
-	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("pgroonga: nonexistent tokenizer: <%s>",
-						name)));
-	}
-
-	if (!PGrnIsTokenizer(tokenizer))
-	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("pgroonga: not tokenizer: <%s>: %s",
-						name, PGrnInspect(tokenizer))));
-	}
-}
-#endif
-
-#ifdef PGRN_SUPPORT_OPTIONS
-static bool
-PGrnIsNormalizer(grn_obj *object)
-{
-	if (object->header.type != GRN_PROC)
-		return false;
-
-  if (grn_proc_get_type(ctx, object) != GRN_PROC_NORMALIZER)
-	  return false;
-
-  return true;
-}
-
-static void
-PGrnOptionValidateNormalizer(char *name)
-{
-	grn_obj *normalizer;
-
-	if (PGrnIsNoneValue(name))
-		return;
-
-	normalizer = grn_ctx_get(ctx, name, -1);
-	if (!normalizer)
-	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("pgroonga: nonexistent normalizer: <%s>",
-						name)));
-	}
-
-	if (!PGrnIsNormalizer(normalizer))
-	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("pgroonga: not normalizer: <%s>: %s",
-						name, PGrnInspect(normalizer))));
-	}
-}
-#endif
-
-#ifdef PGRN_SUPPORT_OPTIONS
-static void
-PGrnInitializeOptions(void)
-{
-	PGrnReloptionKind = add_reloption_kind();
-
-	add_string_reloption(PGrnReloptionKind,
-						 "tokenizer",
-						 "Tokenizer name to be used for full-text search",
-						 PGRN_DEFAULT_TOKENIZER,
-						 PGrnOptionValidateTokenizer);
-	add_string_reloption(PGrnReloptionKind,
-						 "normalizer",
-						 "Normalizer name to be used for full-text search",
-						 PGRN_DEFAULT_NORMALIZER,
-						 PGrnOptionValidateNormalizer);
-}
-#endif
-
 static void
 PGrnInitializeSequentialSearchData(void)
 {
@@ -485,15 +362,13 @@ _PG_init(void)
 	GRN_TEXT_INIT(&headBuffer, 0);
 	GRN_TEXT_INIT(&bodyBuffer, 0);
 	GRN_TEXT_INIT(&footBuffer, 0);
-	GRN_TEXT_INIT(&inspectBuffer, 0);
+	GRN_TEXT_INIT(&(PGrnBuffers.inspect), 0);
 
 	PGrnEnsureDatabase();
 
 	PGrnInitializeGroongaInformation();
 
-#ifdef PGRN_SUPPORT_OPTIONS
 	PGrnInitializeOptions();
-#endif
 
 	PGrnInitializeSequentialSearchData();
 }
@@ -1224,20 +1099,6 @@ PGrnCreateDataColumnsForJSON(PGrnCreateData *data)
 					 jsonTypesTable);
 }
 
-#ifdef PGRN_SUPPORT_OPTIONS
-static void
-PGrnApplyOptionValues(PGrnOptions *options,
-					  const char **tokenizerName,
-					  const char **normalizerName)
-{
-	if (!options)
-		return;
-
-	*tokenizerName  = ((const char *) options) + options->tokenizerOffset;
-	*normalizerName = ((const char *) options) + options->normalizerOffset;
-}
-#endif
-
 static void
 PGrnCreateFullTextSearchIndexColumnForJSON(PGrnCreateData *data)
 {
@@ -1246,11 +1107,7 @@ PGrnCreateFullTextSearchIndexColumnForJSON(PGrnCreateData *data)
 	char lexiconName[GRN_TABLE_MAX_KEY_SIZE];
 	grn_obj *lexicon;
 
-#ifdef PGRN_SUPPORT_OPTIONS
-	PGrnApplyOptionValues((PGrnOptions *) (data->index->rd_options),
-						  &tokenizerName,
-						  &normalizerName);
-#endif
+	PGrnApplyOptionValues(data->index, &tokenizerName, &normalizerName);
 
 	if (PGrnIsNoneValue(tokenizerName))
 		return;
@@ -1399,11 +1256,7 @@ PGrnCreateIndexColumn(PGrnCreateData *data)
 			tokenizerName = PGRN_DEFAULT_TOKENIZER;
 		}
 
-#ifdef PGRN_SUPPORT_OPTIONS
-		PGrnApplyOptionValues((PGrnOptions *) (data->index->rd_options),
-							  &tokenizerName,
-							  &normalizerName);
-#endif
+		PGrnApplyOptionValues(data->index, &tokenizerName, &normalizerName);
 
 		if (!PGrnIsNoneValue(tokenizerName))
 		{
@@ -4825,32 +4678,3 @@ pgroonga_costestimate(PG_FUNCTION_ARGS)
 #endif
 }
 
-#ifdef PGRN_SUPPORT_OPTIONS
-/**
- * pgroonga.options() -- amoptions
- */
-Datum
-pgroonga_options(PG_FUNCTION_ARGS)
-{
-	Datum reloptions = PG_GETARG_DATUM(0);
-	bool validate = PG_GETARG_BOOL(1);
-	relopt_value *options;
-	PGrnOptions *grnOptions;
-	int nOptions;
-	const relopt_parse_elt optionsMap[] = {
-		{"tokenizer", RELOPT_TYPE_STRING,
-		 offsetof(PGrnOptions, tokenizerOffset)},
-		{"normalizer", RELOPT_TYPE_STRING,
-		 offsetof(PGrnOptions, normalizerOffset)}
-	};
-
-	options = parseRelOptions(reloptions, validate, PGrnReloptionKind,
-							  &nOptions);
-	grnOptions = allocateReloptStruct(sizeof(PGrnOptions), options, nOptions);
-	fillRelOptions(grnOptions, sizeof(PGrnOptions), options, nOptions,
-				   validate, optionsMap, lengthof(optionsMap));
-	pfree(options);
-
-	PG_RETURN_BYTEA_P(grnOptions);
-}
-#endif
-------------- next part --------------
HTML����������������������������...
Download 



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