[Groonga-commit] pgroonga/pgroonga at ec9a522 [master] Extract PGrnConvertFromData()

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jan 24 21:17:16 JST 2016


Kouhei Sutou	2016-01-24 21:17:16 +0900 (Sun, 24 Jan 2016)

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

  Message:
    Extract PGrnConvertFromData()

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

  Modified: CMakeLists.txt (+1 -0)
===================================================================
--- CMakeLists.txt    2016-01-24 20:54:20 +0900 (fe08447)
+++ CMakeLists.txt    2016-01-24 21:17:16 +0900 (db27252)
@@ -48,6 +48,7 @@ link_directories(
 
 set(PGRN_SOURCES
   "src/pgroonga.c"
+  "src/pgrn_convert.c"
   "src/pgrn_create.c"
   "src/pgrn_global.c"
   "src/pgrn_groonga.c"

  Modified: Makefile (+1 -0)
===================================================================
--- Makefile    2016-01-24 20:54:20 +0900 (c1c8e45)
+++ Makefile    2016-01-24 21:17:16 +0900 (3f36e86)
@@ -4,6 +4,7 @@ GROONGA_PKG = "groonga >= $(REQUIRED_GROONGA_VERSION)"
 MODULE_big = pgroonga
 SRCS =						\
 	src/pgroonga.c				\
+	src/pgrn_convert.c			\
 	src/pgrn_create.c			\
 	src/pgrn_global.c			\
 	src/pgrn_groonga.c			\

  Added: src/pgrn_convert.c (+129 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_convert.c    2016-01-24 21:17:16 +0900 (e683e9e)
@@ -0,0 +1,129 @@
+#include "pgrn_convert.h"
+#include "pgrn_global.h"
+
+#include <catalog/pg_type.h>
+#include <utils/array.h>
+#include <utils/builtins.h>
+#include <utils/timestamp.h>
+
+static grn_ctx *ctx = &PGrnContext;
+
+static void
+PGrnConvertFromDataArrayType(Datum datum, Oid typeID, grn_obj *buffer)
+{
+	ArrayType *value = DatumGetArrayTypeP(datum);
+	int i, n;
+
+	n = ARR_DIMS(value)[0];
+	for (i = 1; i <= n; i++)
+	{
+		int weight = 0;
+		Datum elementDatum;
+		VarChar *element;
+		bool isNULL;
+
+		elementDatum = array_ref(value, 1, &i, -1, -1, false, 'i', &isNULL);
+		if (isNULL)
+			continue;
+
+		switch (typeID)
+		{
+		case VARCHARARRAYOID:
+			element = DatumGetVarCharPP(elementDatum);
+			grn_vector_add_element(ctx, buffer,
+								   VARDATA_ANY(element),
+								   VARSIZE_ANY_EXHDR(element),
+								   weight,
+								   buffer->header.domain);
+			break;
+		case TEXTARRAYOID:
+			element = DatumGetTextPP(elementDatum);
+			grn_vector_add_element(ctx, buffer,
+								   VARDATA_ANY(element),
+								   VARSIZE_ANY_EXHDR(element),
+								   weight,
+								   buffer->header.domain);
+			break;
+		}
+	}
+}
+
+void
+PGrnConvertFromData(Datum datum, Oid typeID, grn_obj *buffer)
+{
+	switch (typeID)
+	{
+	case BOOLOID:
+		GRN_BOOL_SET(ctx, buffer, DatumGetBool(datum));
+		break;
+	case INT2OID:
+		GRN_INT16_SET(ctx, buffer, DatumGetInt16(datum));
+		break;
+	case INT4OID:
+		GRN_INT32_SET(ctx, buffer, DatumGetInt32(datum));
+		break;
+	case INT8OID:
+		GRN_INT64_SET(ctx, buffer, DatumGetInt64(datum));
+		break;
+	case FLOAT4OID:
+		GRN_FLOAT_SET(ctx, buffer, DatumGetFloat4(datum));
+		break;
+	case FLOAT8OID:
+		GRN_FLOAT_SET(ctx, buffer, DatumGetFloat8(datum));
+		break;
+	case TIMESTAMPOID:
+	case TIMESTAMPTZOID:
+	{
+		Timestamp value = DatumGetTimestamp(datum);
+		pg_time_t unixTime;
+		int32 usec;
+
+		unixTime = timestamptz_to_time_t(value);
+#ifdef HAVE_INT64_TIMESTAMP
+		usec = value % USECS_PER_SEC;
+#else
+		{
+			double rawUsec;
+			modf(value, &rawUsec);
+			usec = rawUsec * USECS_PER_SEC;
+			if (usec < 0.0)
+			{
+				usec = -usec;
+			}
+		}
+#endif
+		GRN_TIME_SET(ctx, buffer, GRN_TIME_PACK(unixTime, usec));
+		break;
+	}
+	case TEXTOID:
+	case XMLOID:
+	{
+		text *value = DatumGetTextPP(datum);
+		GRN_TEXT_SET(ctx, buffer,
+					 VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
+		break;
+	}
+	case VARCHAROID:
+	{
+		VarChar *value = DatumGetVarCharPP(datum);
+		GRN_TEXT_SET(ctx, buffer,
+					 VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
+		break;
+	}
+#ifdef NOT_USED
+	case POINTOID:
+		/* GRN_DB_TOKYO_GEO_POINT or GRN_DB_WGS84_GEO_POINT; */
+		break;
+#endif
+	case VARCHARARRAYOID:
+	case TEXTARRAYOID:
+		PGrnConvertFromDataArrayType(datum, typeID, buffer);
+		break;
+	default:
+		ereport(ERROR,
+				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				 errmsg("pgroonga: unsupported datum type: %u",
+						typeID)));
+		break;
+	}
+}

  Added: src/pgrn_convert.h (+9 -0) 100644
===================================================================
--- /dev/null
+++ src/pgrn_convert.h    2016-01-24 21:17:16 +0900 (76fa00d)
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <postgres.h>
+
+#include <groonga.h>
+
+#define VARCHARARRAYOID 1015
+
+void PGrnConvertFromData(Datum datum, Oid typeID, grn_obj *buffer);

  Modified: src/pgroonga.c (+2 -122)
===================================================================
--- src/pgroonga.c    2016-01-24 20:54:20 +0900 (196a3fc)
+++ src/pgroonga.c    2016-01-24 21:17:16 +0900 (f8dc7c1)
@@ -1,6 +1,8 @@
 #include "pgroonga.h"
 
 #include "pgrn_compatible.h"
+
+#include "pgrn_convert.h"
 #include "pgrn_create.h"
 #include "pgrn_global.h"
 #include "pgrn_groonga.h"
@@ -58,8 +60,6 @@ typedef struct stat pgrn_stat_buffer;
 #endif
 
 
-#define VARCHARARRAYOID 1015
-
 PG_MODULE_MAGIC;
 
 static bool PGrnInitialized = false;
@@ -402,126 +402,6 @@ PGrnGetType(Relation index, AttrNumber n, unsigned char *flags)
 	return typeID;
 }
 
-static void
-PGrnConvertFromDataArrayType(Datum datum, Oid typeID, grn_obj *buffer)
-{
-	ArrayType *value = DatumGetArrayTypeP(datum);
-	int i, n;
-
-	n = ARR_DIMS(value)[0];
-	for (i = 1; i <= n; i++)
-	{
-		int weight = 0;
-		Datum elementDatum;
-		VarChar *element;
-		bool isNULL;
-
-		elementDatum = array_ref(value, 1, &i, -1, -1, false, 'i', &isNULL);
-		if (isNULL)
-			continue;
-
-		switch (typeID)
-		{
-		case VARCHARARRAYOID:
-			element = DatumGetVarCharPP(elementDatum);
-			grn_vector_add_element(ctx, buffer,
-								   VARDATA_ANY(element),
-								   VARSIZE_ANY_EXHDR(element),
-								   weight,
-								   buffer->header.domain);
-			break;
-		case TEXTARRAYOID:
-			element = DatumGetTextPP(elementDatum);
-			grn_vector_add_element(ctx, buffer,
-								   VARDATA_ANY(element),
-								   VARSIZE_ANY_EXHDR(element),
-								   weight,
-								   buffer->header.domain);
-			break;
-		}
-	}
-}
-
-static void
-PGrnConvertFromData(Datum datum, Oid typeID, grn_obj *buffer)
-{
-	switch (typeID)
-	{
-	case BOOLOID:
-		GRN_BOOL_SET(ctx, buffer, DatumGetBool(datum));
-		break;
-	case INT2OID:
-		GRN_INT16_SET(ctx, buffer, DatumGetInt16(datum));
-		break;
-	case INT4OID:
-		GRN_INT32_SET(ctx, buffer, DatumGetInt32(datum));
-		break;
-	case INT8OID:
-		GRN_INT64_SET(ctx, buffer, DatumGetInt64(datum));
-		break;
-	case FLOAT4OID:
-		GRN_FLOAT_SET(ctx, buffer, DatumGetFloat4(datum));
-		break;
-	case FLOAT8OID:
-		GRN_FLOAT_SET(ctx, buffer, DatumGetFloat8(datum));
-		break;
-	case TIMESTAMPOID:
-	case TIMESTAMPTZOID:
-	{
-		Timestamp value = DatumGetTimestamp(datum);
-		pg_time_t unixTime;
-		int32 usec;
-
-		unixTime = timestamptz_to_time_t(value);
-#ifdef HAVE_INT64_TIMESTAMP
-		usec = value % USECS_PER_SEC;
-#else
-		{
-			double rawUsec;
-			modf(value, &rawUsec);
-			usec = rawUsec * USECS_PER_SEC;
-			if (usec < 0.0)
-			{
-				usec = -usec;
-			}
-		}
-#endif
-		GRN_TIME_SET(ctx, buffer, GRN_TIME_PACK(unixTime, usec));
-		break;
-	}
-	case TEXTOID:
-	case XMLOID:
-	{
-		text *value = DatumGetTextPP(datum);
-		GRN_TEXT_SET(ctx, buffer,
-					 VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
-		break;
-	}
-	case VARCHAROID:
-	{
-		VarChar *value = DatumGetVarCharPP(datum);
-		GRN_TEXT_SET(ctx, buffer,
-					 VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
-		break;
-	}
-#ifdef NOT_USED
-	case POINTOID:
-		/* GRN_DB_TOKYO_GEO_POINT or GRN_DB_WGS84_GEO_POINT; */
-		break;
-#endif
-	case VARCHARARRAYOID:
-	case TEXTARRAYOID:
-		PGrnConvertFromDataArrayType(datum, typeID, buffer);
-		break;
-	default:
-		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-				 errmsg("pgroonga: unsupported datum type: %u",
-						typeID)));
-		break;
-	}
-}
-
 #ifdef PGRN_SUPPORT_INDEX_ONLY_SCAN
 static Datum
 PGrnConvertToDatumArrayType(grn_obj *vector, Oid typeID)
-------------- next part --------------
HTML����������������������������...
Download 



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