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