[Groonga-commit] pgroonga/pgroonga at 2d9b626 [master] Support table space

Back to archive index

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 



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