[Groonga-commit] pgroonga/pgroonga at 474ce5c [master] Extract create related code

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jan 24 12:09:44 JST 2016


Kouhei Sutou	2016-01-24 12:09:44 +0900 (Sun, 24 Jan 2016)

  New Revision: 474ce5c8a4b0dee2c67451f8fe8c1b567583178e
  https://github.com/pgroonga/pgroonga/commit/474ce5c8a4b0dee2c67451f8fe8c1b567583178e

  Message:
    Extract create related code

  Added files:
    src/pgrn_create.c
    src/pgrn_create.h
  Modified files:
    CMakeLists.txt
    Makefile
    src/pgroonga.c

  Modified: CMakeLists.txt (+1 -0)
===================================================================
--- CMakeLists.txt    2016-01-24 12:08:29 +0900 (dd8c851)
+++ CMakeLists.txt    2016-01-24 12:09:44 +0900 (fe08447)
@@ -48,6 +48,7 @@ link_directories(
 
 set(PGRN_SOURCES
   "src/pgroonga.c"
+  "src/pgrn_create.c"
   "src/pgrn_global.c"
   "src/pgrn_groonga.c"
   "src/pgrn_options.c"

  Modified: Makefile (+1 -0)
===================================================================
--- Makefile    2016-01-24 12:08:29 +0900 (cbecdaa)
+++ Makefile    2016-01-24 12:09:44 +0900 (c1c8e45)
@@ -4,6 +4,7 @@ GROONGA_PKG = "groonga >= $(REQUIRED_GROONGA_VERSION)"
 MODULE_big = pgroonga
 SRCS =						\
 	src/pgroonga.c				\
+	src/pgrn_create.c			\
 	src/pgrn_global.c			\
 	src/pgrn_groonga.c			\
 	src/pgrn_options.c			\

  Added: src/pgrn_create.c (+125 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_create.c    2016-01-24 12:09:44 +0900 (b84a796)
@@ -0,0 +1,125 @@
+#include "pgroonga.h"
+
+#include "pgrn_create.h"
+#include "pgrn_global.h"
+#include "pgrn_groonga.h"
+#include "pgrn_options.h"
+#include "pgrn_value.h"
+
+static grn_ctx *ctx = &PGrnContext;
+
+void
+PGrnCreateSourcesCtidColumn(PGrnCreateData *data)
+{
+	data->sourcesCtidColumn = PGrnCreateColumn(data->sourcesTable,
+											   PGrnSourcesCtidColumnName,
+											   GRN_OBJ_COLUMN_SCALAR,
+											   grn_ctx_at(ctx, GRN_DB_UINT64));
+}
+
+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);
+}
+
+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));
+}
+
+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);
+	}
+}

  Added: src/pgrn_create.h (+29 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_create.h    2016-01-24 12:09:44 +0900 (e6ecfb9)
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <postgres.h>
+#include <utils/rel.h>
+
+#include <groonga.h>
+
+typedef struct PGrnCreateData
+{
+	Relation index;
+	grn_obj *sourcesTable;
+	grn_obj *sourcesCtidColumn;
+	grn_obj *jsonPathsTable;
+	grn_obj *jsonValuesTable;
+	grn_obj *supplementaryTables;
+	grn_obj *lexicons;
+	unsigned int i;
+	TupleDesc desc;
+	Oid relNode;
+	bool forFullTextSearch;
+	bool forRegexpSearch;
+	grn_id attributeTypeID;
+	unsigned char attributeFlags;
+} PGrnCreateData;
+
+void PGrnCreateSourcesCtidColumn(PGrnCreateData *data);
+void PGrnCreateSourcesTable(PGrnCreateData *data);
+void PGrnCreateDataColumn(PGrnCreateData *data);
+void PGrnCreateIndexColumn(PGrnCreateData *data);

  Modified: src/pgroonga.c (+1 -18)
===================================================================
--- src/pgroonga.c    2016-01-24 12:08:29 +0900 (3982612)
+++ src/pgroonga.c    2016-01-24 12:09:44 +0900 (9f5e315)
@@ -1,6 +1,7 @@
 #include "pgroonga.h"
 
 #include "pgrn_compatible.h"
+#include "pgrn_create.h"
 #include "pgrn_global.h"
 #include "pgrn_groonga.h"
 #include "pgrn_options.h"
@@ -63,24 +64,6 @@ PG_MODULE_MAGIC;
 
 static bool PGrnInitialized = false;
 
-typedef struct PGrnCreateData
-{
-	Relation index;
-	grn_obj *sourcesTable;
-	grn_obj *sourcesCtidColumn;
-	grn_obj *jsonPathsTable;
-	grn_obj *jsonValuesTable;
-	grn_obj *supplementaryTables;
-	grn_obj *lexicons;
-	unsigned int i;
-	TupleDesc desc;
-	Oid relNode;
-	bool forFullTextSearch;
-	bool forRegexpSearch;
-	grn_id attributeTypeID;
-	unsigned char attributeFlags;
-} PGrnCreateData;
-
 typedef struct PGrnBuildStateData
 {
 	grn_obj	*sourcesTable;
-------------- next part --------------
HTML����������������������������...
Télécharger 



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