[Groonga-commit] pgroonga/pgroonga at e36c400 [master] Move more Groonga specific code to pgrn_groonga

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jan 24 12:08:29 JST 2016


Kouhei Sutou	2016-01-24 12:08:29 +0900 (Sun, 24 Jan 2016)

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

  Message:
    Move more Groonga specific code to pgrn_groonga

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

  Modified: src/pgrn_groonga.c (+151 -0)
===================================================================
--- src/pgrn_groonga.c    2016-01-24 11:50:32 +0900 (7bed5bd)
+++ src/pgrn_groonga.c    2016-01-24 12:08:29 +0900 (54f530b)
@@ -3,8 +3,21 @@
 #include "pgrn_global.h"
 #include "pgrn_groonga.h"
 
+bool PGrnIsLZ4Available;
+
 static grn_ctx *ctx = &PGrnContext;
 
+void
+PGrnInitializeGroongaInformation(void)
+{
+	grn_obj grnIsSupported;
+
+	GRN_BOOL_INIT(&grnIsSupported, 0);
+	grn_obj_get_info(ctx, NULL, GRN_INFO_SUPPORT_LZ4, &grnIsSupported);
+	PGrnIsLZ4Available = (GRN_BOOL_VALUE(&grnIsSupported));
+	GRN_OBJ_FIN(ctx, &grnIsSupported);
+}
+
 const char *
 PGrnInspect(grn_obj *object)
 {
@@ -15,3 +28,141 @@ PGrnInspect(grn_obj *object)
 	GRN_TEXT_PUTC(ctx, buffer, '\0');
 	return GRN_TEXT_VALUE(buffer);
 }
+
+int
+PGrnRCToPgErrorCode(grn_rc rc)
+{
+	int errorCode = ERRCODE_SYSTEM_ERROR;
+
+	/* TODO: Fill me. */
+	switch (rc)
+	{
+	case GRN_NO_SUCH_FILE_OR_DIRECTORY:
+		errorCode = ERRCODE_IO_ERROR;
+		break;
+	case GRN_INPUT_OUTPUT_ERROR:
+		errorCode = ERRCODE_IO_ERROR;
+		break;
+	case GRN_INVALID_ARGUMENT:
+		errorCode = ERRCODE_INVALID_PARAMETER_VALUE;
+		break;
+	default:
+		break;
+	}
+
+	return errorCode;
+}
+
+grn_bool
+PGrnCheck(const char *message)
+{
+	if (ctx->rc == GRN_SUCCESS)
+		return GRN_TRUE;
+
+	ereport(ERROR,
+			(errcode(PGrnRCToPgErrorCode(ctx->rc)),
+			 errmsg("pgroonga: %s: %s", message, ctx->errbuf)));
+	return GRN_FALSE;
+}
+
+grn_obj *
+PGrnLookup(const char *name, int errorLevel)
+{
+	grn_obj *object = grn_ctx_get(ctx, name, strlen(name));
+	if (!object)
+		ereport(errorLevel,
+				(errcode(ERRCODE_INVALID_NAME),
+				 errmsg("pgroonga: object isn't found: <%s>", name)));
+	return object;
+}
+
+grn_obj *
+PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel)
+{
+	grn_obj *column;
+
+	column = grn_obj_column(ctx, table, name, strlen(name));
+	if (!column)
+	{
+		char tableName[GRN_TABLE_MAX_KEY_SIZE];
+		int tableNameSize;
+
+		tableNameSize = grn_obj_name(ctx, table, tableName, sizeof(tableName));
+		ereport(errorLevel,
+				(errcode(ERRCODE_INVALID_NAME),
+				 errmsg("pgroonga: column isn't found: <%.*s>:<%s>",
+						tableNameSize, tableName,
+						name)));
+	}
+
+	return column;
+}
+
+grn_obj *
+PGrnLookupSourcesTable(Relation index, int errorLevel)
+{
+	char name[GRN_TABLE_MAX_KEY_SIZE];
+
+	snprintf(name, sizeof(name),
+			 PGrnSourcesTableNameFormat,
+			 index->rd_node.relNode);
+	return PGrnLookup(name, errorLevel);
+}
+
+grn_obj *
+PGrnLookupSourcesCtidColumn(Relation index, int errorLevel)
+{
+	char name[GRN_TABLE_MAX_KEY_SIZE];
+
+	snprintf(name, sizeof(name),
+			 PGrnSourcesTableNameFormat "." PGrnSourcesCtidColumnName,
+			 index->rd_node.relNode);
+	return PGrnLookup(name, errorLevel);
+}
+
+grn_obj *
+PGrnLookupIndexColumn(Relation index, unsigned int nthAttribute, int errorLevel)
+{
+	char name[GRN_TABLE_MAX_KEY_SIZE];
+
+	snprintf(name, sizeof(name),
+			 PGrnLexiconNameFormat ".%s",
+			 index->rd_node.relNode,
+			 nthAttribute,
+			 PGrnIndexColumnName);
+	return PGrnLookup(name, errorLevel);
+}
+
+grn_obj *
+PGrnCreateTable(const char *name,
+				grn_obj_flags flags,
+				grn_obj *type)
+{
+	grn_obj	*table;
+
+	table = grn_table_create(ctx,
+							 name, strlen(name), NULL,
+							 GRN_OBJ_PERSISTENT | flags,
+							 type,
+							 NULL);
+	PGrnCheck("pgroonga: failed to create table");
+
+	return table;
+}
+
+grn_obj *
+PGrnCreateColumn(grn_obj	*table,
+				 const char *name,
+				 grn_obj_flags flags,
+				 grn_obj	*type)
+{
+	grn_obj *column;
+
+    column = grn_column_create(ctx, table,
+							   name, strlen(name), NULL,
+							   GRN_OBJ_PERSISTENT | flags,
+							   type);
+	PGrnCheck("pgroonga: failed to create column");
+
+	return column;
+}

  Modified: src/pgrn_groonga.h (+26 -0)
===================================================================
--- src/pgrn_groonga.h    2016-01-24 11:50:32 +0900 (acce75c)
+++ src/pgrn_groonga.h    2016-01-24 12:08:29 +0900 (d8f3bb0)
@@ -1,5 +1,31 @@
 #pragma once
 
+#include <postgres.h>
+#include <utils/rel.h>
+
 #include <groonga.h>
 
+bool PGrnIsLZ4Available;
+
+void PGrnInitializeGroongaInformation(void);
+
 const char *PGrnInspect(grn_obj *object);
+
+int PGrnRCToPgErrorCode(grn_rc rc);
+grn_bool PGrnCheck(const char *message);
+
+grn_obj *PGrnLookup(const char *name, int errorLevel);
+grn_obj *PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel);
+grn_obj *PGrnLookupSourcesTable(Relation index, int errorLevel);
+grn_obj *PGrnLookupSourcesCtidColumn(Relation index, int errorLevel);
+grn_obj *PGrnLookupIndexColumn(Relation index,
+							   unsigned int nthAttribute,
+							   int errorLevel);
+
+grn_obj *PGrnCreateTable(const char *name,
+						 grn_obj_flags flags,
+						 grn_obj *type);
+grn_obj *PGrnCreateColumn(grn_obj *table,
+						  const char*name,
+						  grn_obj_flags flags,
+						  grn_obj *type);

  Modified: src/pgroonga.c (+1 -267)
===================================================================
--- src/pgroonga.c    2016-01-24 11:50:32 +0900 (1bc1d5c)
+++ src/pgroonga.c    2016-01-24 12:08:29 +0900 (3982612)
@@ -2,6 +2,7 @@
 
 #include "pgrn_compatible.h"
 #include "pgrn_global.h"
+#include "pgrn_groonga.h"
 #include "pgrn_options.h"
 #include "pgrn_value.h"
 #include "pgrn_variables.h"
@@ -62,8 +63,6 @@ PG_MODULE_MAGIC;
 
 static bool PGrnInitialized = false;
 
-static bool PGrnIsLZ4Available;
-
 typedef struct PGrnCreateData
 {
 	Relation index;
@@ -275,17 +274,6 @@ PGrnOnProcExit(int code, Datum arg)
 }
 
 static void
-PGrnInitializeGroongaInformation(void)
-{
-	grn_obj grnIsSupported;
-
-	GRN_BOOL_INIT(&grnIsSupported, 0);
-	grn_obj_get_info(ctx, NULL, GRN_INFO_SUPPORT_LZ4, &grnIsSupported);
-	PGrnIsLZ4Available = (GRN_BOOL_VALUE(&grnIsSupported));
-	GRN_OBJ_FIN(ctx, &grnIsSupported);
-}
-
-static void
 PGrnInitializeSequentialSearchData(void)
 {
 	sequentialSearchData.table = grn_table_create(ctx,
@@ -344,42 +332,6 @@ _PG_init(void)
 	PGrnInitializeSequentialSearchData();
 }
 
-static int
-PGrnRCToPgErrorCode(grn_rc rc)
-{
-	int errorCode = ERRCODE_SYSTEM_ERROR;
-
-	/* TODO: Fill me. */
-	switch (rc)
-	{
-	case GRN_NO_SUCH_FILE_OR_DIRECTORY:
-		errorCode = ERRCODE_IO_ERROR;
-		break;
-	case GRN_INPUT_OUTPUT_ERROR:
-		errorCode = ERRCODE_IO_ERROR;
-		break;
-	case GRN_INVALID_ARGUMENT:
-		errorCode = ERRCODE_INVALID_PARAMETER_VALUE;
-		break;
-	default:
-		break;
-	}
-
-	return errorCode;
-}
-
-static grn_bool
-PGrnCheck(const char *message)
-{
-	if (ctx->rc == GRN_SUCCESS)
-		return GRN_TRUE;
-
-	ereport(ERROR,
-			(errcode(PGrnRCToPgErrorCode(ctx->rc)),
-			 errmsg("pgroonga: %s: %s", message, ctx->errbuf)));
-	return GRN_FALSE;
-}
-
 static grn_id
 PGrnGetType(Relation index, AttrNumber n, unsigned char *flags)
 {
@@ -799,61 +751,6 @@ PGrnJSONIteratorTokenName(JsonbIteratorToken token)
 }
 #endif
 
-static grn_obj *
-PGrnLookup(const char *name, int errorLevel)
-{
-	grn_obj *object = grn_ctx_get(ctx, name, strlen(name));
-	if (!object)
-		ereport(errorLevel,
-				(errcode(ERRCODE_INVALID_NAME),
-				 errmsg("pgroonga: object isn't found: <%s>", name)));
-	return object;
-}
-
-static grn_obj *
-PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel)
-{
-	grn_obj *column;
-
-	column = grn_obj_column(ctx, table, name, strlen(name));
-	if (!column)
-	{
-		char tableName[GRN_TABLE_MAX_KEY_SIZE];
-		int tableNameSize;
-
-		tableNameSize = grn_obj_name(ctx, table, tableName, sizeof(tableName));
-		ereport(errorLevel,
-				(errcode(ERRCODE_INVALID_NAME),
-				 errmsg("pgroonga: column isn't found: <%.*s>:<%s>",
-						tableNameSize, tableName,
-						name)));
-	}
-
-	return column;
-}
-
-static grn_obj *
-PGrnLookupSourcesTable(Relation index, int errorLevel)
-{
-	char name[GRN_TABLE_MAX_KEY_SIZE];
-
-	snprintf(name, sizeof(name),
-			 PGrnSourcesTableNameFormat,
-			 index->rd_node.relNode);
-	return PGrnLookup(name, errorLevel);
-}
-
-static grn_obj *
-PGrnLookupSourcesCtidColumn(Relation index, int errorLevel)
-{
-	char name[GRN_TABLE_MAX_KEY_SIZE];
-
-	snprintf(name, sizeof(name),
-			 PGrnSourcesTableNameFormat "." PGrnSourcesCtidColumnName,
-			 index->rd_node.relNode);
-	return PGrnLookup(name, errorLevel);
-}
-
 #ifdef JSONBOID
 static grn_obj *
 PGrnLookupJSONPathsTable(Relation index,
@@ -882,53 +779,6 @@ PGrnLookupJSONValuesTable(Relation index,
 }
 #endif
 
-static grn_obj *
-PGrnLookupIndexColumn(Relation index, unsigned int nthAttribute, int errorLevel)
-{
-	char name[GRN_TABLE_MAX_KEY_SIZE];
-
-	snprintf(name, sizeof(name),
-			 PGrnLexiconNameFormat ".%s",
-			 index->rd_node.relNode,
-			 nthAttribute,
-			 PGrnIndexColumnName);
-	return PGrnLookup(name, errorLevel);
-}
-
-static grn_obj *
-PGrnCreateTable(const char *name,
-				grn_obj_flags flags,
-				grn_obj *type)
-{
-	grn_obj	*table;
-
-	table = grn_table_create(ctx,
-							 name, strlen(name), NULL,
-							 GRN_OBJ_PERSISTENT | flags,
-							 type,
-							 NULL);
-	PGrnCheck("pgroonga: failed to create table");
-
-	return table;
-}
-
-static grn_obj *
-PGrnCreateColumn(grn_obj	*table,
-				 const char *name,
-				 grn_obj_flags flags,
-				 grn_obj	*type)
-{
-	grn_obj *column;
-
-    column = grn_column_create(ctx, table,
-							   name, strlen(name), NULL,
-							   GRN_OBJ_PERSISTENT | flags,
-							   type);
-	PGrnCheck("pgroonga: failed to create column");
-
-	return column;
-}
-
 static bool
 PGrnIsForFullTextSearchIndex(Relation index, int nthAttribute)
 {
@@ -972,29 +822,6 @@ PGrnIsForRegexpSearchIndex(Relation index, int nthAttribute)
 	return OidIsValid(regexpStrategyOID);
 }
 
-static void
-PGrnCreateSourcesCtidColumn(PGrnCreateData *data)
-{
-	data->sourcesCtidColumn = PGrnCreateColumn(data->sourcesTable,
-											   PGrnSourcesCtidColumnName,
-											   GRN_OBJ_COLUMN_SCALAR,
-											   grn_ctx_at(ctx, GRN_DB_UINT64));
-}
-
-static void
-PGrnCreateSourcesTable(PGrnCreateData *data)
-{
-	char sourcesTableName[GRN_TABLE_MAX_KEY_SIZE];
-
-	snprintf(sourcesTableName, sizeof(sourcesTableName),
-			 PGrnSourcesTableNameFormat, data->relNode);
-	data->sourcesTable = PGrnCreateTable(sourcesTableName,
-										 GRN_OBJ_TABLE_NO_KEY,
-										 NULL);
-
-	PGrnCreateSourcesCtidColumn(data);
-}
-
 #ifdef JSONBOID
 static void
 PGrnCreateDataColumnsForJSON(PGrnCreateData *data)
@@ -1159,99 +986,6 @@ PGrnCreateIndexColumnsForJSON(PGrnCreateData *data)
 }
 #endif
 
-static void
-PGrnCreateDataColumn(PGrnCreateData *data)
-{
-	grn_obj_flags flags = 0;
-
-	if (data->attributeFlags & GRN_OBJ_VECTOR)
-	{
-		flags |= GRN_OBJ_COLUMN_VECTOR;
-	}
-	else
-	{
-		flags |= GRN_OBJ_COLUMN_SCALAR;
-
-		if (PGrnIsLZ4Available)
-		{
-			switch (data->attributeTypeID)
-			{
-			case GRN_DB_SHORT_TEXT:
-			case GRN_DB_TEXT:
-			case GRN_DB_LONG_TEXT:
-				flags |= GRN_OBJ_COMPRESS_LZ4;
-				break;
-			}
-		}
-	}
-
-	PGrnCreateColumn(data->sourcesTable,
-					 data->desc->attrs[data->i]->attname.data,
-					 flags,
-					 grn_ctx_at(ctx, data->attributeTypeID));
-}
-
-static void
-PGrnCreateIndexColumn(PGrnCreateData *data)
-{
-	grn_id typeID = GRN_ID_NIL;
-	char lexiconName[GRN_TABLE_MAX_KEY_SIZE];
-	grn_obj *lexicon;
-
-	switch (data->attributeTypeID)
-	{
-	case GRN_DB_TEXT:
-	case GRN_DB_LONG_TEXT:
-		typeID = GRN_DB_SHORT_TEXT;
-		break;
-	default:
-		typeID = data->attributeTypeID;
-		break;
-	}
-
-	snprintf(lexiconName, sizeof(lexiconName),
-			 PGrnLexiconNameFormat, data->relNode, data->i);
-	lexicon = PGrnCreateTable(lexiconName,
-							  GRN_OBJ_TABLE_PAT_KEY,
-							  grn_ctx_at(ctx, typeID));
-	GRN_PTR_PUT(ctx, data->lexicons, lexicon);
-
-	if (data->forFullTextSearch || data->forRegexpSearch)
-	{
-		const char *tokenizerName;
-		const char *normalizerName = PGRN_DEFAULT_NORMALIZER;
-
-		if (data->forRegexpSearch) {
-			tokenizerName = "TokenRegexp";
-		} else {
-			tokenizerName = PGRN_DEFAULT_TOKENIZER;
-		}
-
-		PGrnApplyOptionValues(data->index, &tokenizerName, &normalizerName);
-
-		if (!PGrnIsNoneValue(tokenizerName))
-		{
-			grn_obj_set_info(ctx, lexicon, GRN_INFO_DEFAULT_TOKENIZER,
-							 PGrnLookup(tokenizerName, ERROR));
-		}
-		if (!PGrnIsNoneValue(normalizerName))
-		{
-			grn_obj_set_info(ctx, lexicon, GRN_INFO_NORMALIZER,
-							 PGrnLookup(normalizerName, ERROR));
-		}
-	}
-
-	{
-		grn_obj_flags flags = GRN_OBJ_COLUMN_INDEX;
-		if (data->forFullTextSearch || data->forRegexpSearch)
-			flags |= GRN_OBJ_WITH_POSITION;
-		PGrnCreateColumn(lexicon,
-						 PGrnIndexColumnName,
-						 flags,
-						 data->sourcesTable);
-	}
-}
-
 /**
  * PGrnCreate
  */
-------------- next part --------------
HTML����������������������������...
Télécharger 



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