Kouhei Sutou
null+****@clear*****
Wed Nov 2 00:08:30 JST 2016
Kouhei Sutou 2016-11-02 00:08:30 +0900 (Wed, 02 Nov 2016) New Revision: 2d9b626c73555ba5178205a7cde24652608b829e https://github.com/pgroonga/pgroonga/commit/2d9b626c73555ba5178205a7cde24652608b829e Message: Support table space Modified files: src/pgrn_groonga.c Modified: src/pgrn_groonga.c (+64 -4) =================================================================== --- src/pgrn_groonga.c 2016-11-01 23:29:27 +0900 (8091afd) +++ src/pgrn_groonga.c 2016-11-02 00:08:30 +0900 (080ad7a) @@ -5,6 +5,8 @@ #include "pgrn_groonga.h" #include "pgrn_wal.h" +#include <miscadmin.h> + bool PGrnIsLZ4Available; static grn_ctx *ctx = &PGrnContext; @@ -200,15 +202,38 @@ PGrnCreateTableWithSize(Relation index, grn_obj *tokenizer, grn_obj *normalizer) { + const char *path = NULL; + char pathBuffer[MAXPGPATH]; grn_obj *table; if (name) { flags |= GRN_OBJ_PERSISTENT; + if (index && index->rd_node.spcNode != MyDatabaseTableSpace) + { + char *databasePath; + char filePath[MAXPGPATH]; + + databasePath = + GetDatabasePath(MyDatabaseId, index->rd_node.spcNode); + snprintf(filePath, sizeof(filePath), + "%s.%.*s", + PGrnDatabaseBasename, + (int)nameSize, + name); + join_path_components(pathBuffer, + databasePath, + filePath); + pfree(databasePath); + + path = pathBuffer; + } } table = grn_table_create(ctx, - name, nameSize, NULL, + name, + nameSize, + path, flags, type, NULL); @@ -252,11 +277,46 @@ PGrnCreateColumnWithSize(Relation index, grn_column_flags flags, grn_obj *type) { + const char *path = NULL; + char pathBuffer[MAXPGPATH]; grn_obj *column; - flags |= GRN_OBJ_PERSISTENT; - column = grn_column_create(ctx, table, - name, nameSize, NULL, + if (name) + { + flags |= GRN_OBJ_PERSISTENT; + if (index && index->rd_node.spcNode != MyDatabaseTableSpace) + { + char *databasePath; + char tableName[GRN_TABLE_MAX_KEY_SIZE]; + int tableNameSize; + char filePath[MAXPGPATH]; + + databasePath = + GetDatabasePath(MyDatabaseId, index->rd_node.spcNode); + tableNameSize = grn_obj_name(ctx, + table, + tableName, + GRN_TABLE_MAX_KEY_SIZE); + snprintf(filePath, sizeof(filePath), + "%s.%.*s.%.*s", + PGrnDatabaseBasename, + tableNameSize, + tableName, + (int)nameSize, + name); + join_path_components(pathBuffer, + databasePath, + filePath); + pfree(databasePath); + + path = pathBuffer; + } + } + column = grn_column_create(ctx, + table, + name, + nameSize, + path, flags, type); PGrnCheck("pgroonga: failed to create column"); -------------- next part -------------- HTML����������������������������...Descargar