[Groonga-commit] pgroonga/pgroonga at 5edeff7 [master] Stop to use support function

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Apr 5 16:03:04 JST 2015


Kouhei Sutou	2015-04-05 16:03:04 +0900 (Sun, 05 Apr 2015)

  New Revision: 5edeff7e141e9fa46f034103dff92c1773c31d05
  https://github.com/pgroonga/pgroonga/commit/5edeff7e141e9fa46f034103dff92c1773c31d05

  Message:
    Stop to use support function
    
    Internal API is more portable because support function needs install SQL
    change.

  Removed files:
    pgroonga_types.c
  Modified files:
    Makefile
    pgroonga.c
    pgroonga.h
    pgroonga.sql

  Modified: Makefile (+1 -1)
===================================================================
--- Makefile    2015-04-01 00:13:15 +0900 (fd672ac)
+++ Makefile    2015-04-05 16:03:04 +0900 (b9770c8)
@@ -1,5 +1,5 @@
 MODULE_big = pgroonga
-SRCS = pgroonga.c pgroonga_types.c
+SRCS = pgroonga.c
 OBJS = $(SRCS:.c=.o)
 EXTENSION = pgroonga
 EXTENSION_VERSION =						\

  Modified: pgroonga.c (+152 -22)
===================================================================
--- pgroonga.c    2015-04-01 00:13:15 +0900 (9b1cbe0)
+++ pgroonga.c    2015-04-05 16:03:04 +0900 (cf734d6)
@@ -20,11 +20,13 @@
 #include <utils/builtins.h>
 #include <utils/lsyscache.h>
 #include <utils/selfuncs.h>
+#include <utils/timestamp.h>
 #include <utils/typcache.h>
 
 #include <groonga.h>
 
 #include <stdlib.h>
+#include <math.h>
 
 #define VARCHARARRAYOID 1015
 
@@ -467,25 +469,123 @@ PGrnGetType(Relation index, AttrNumber n, unsigned char *flags)
 }
 
 static void
-PGrnGetValue(Relation index, AttrNumber n, grn_obj *buffer, Datum value)
+PGrnConvertDatumArrayType(Datum datum, Oid typeID, grn_obj *buffer)
 {
-	FmgrInfo *function;
+	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;
 
-	function = index_getprocinfo(index, n + 1, PGrnGetValueProc);
-	FunctionCall3(function,
-				  PointerGetDatum(ctx), PointerGetDatum(buffer),
-				  value);
+		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
-PGrnGetQuery(Relation index, AttrNumber n, grn_obj *buffer, Datum value)
+PGrnConvertDatum(Datum datum, Oid typeID, grn_obj *buffer)
 {
-	FmgrInfo *function;
-
-	function = index_getprocinfo(index, n + 1, PGrnGetQueryProc);
-	FunctionCall3(function,
-				  PointerGetDatum(ctx), PointerGetDatum(buffer),
-				  value);
+	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:
+		PGrnConvertDatumArrayType(datum, typeID, buffer);
+		break;
+	default:
+		ereport(ERROR,
+				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				 errmsg("pgroonga: unsupported datum type: %u",
+						typeID)));
+		break;
+	}
 }
 
 static grn_obj *
@@ -1127,10 +1227,12 @@ PGrnInsert(grn_ctx *ctx,
 	for (i = 0; i < desc->natts; i++)
 	{
 		grn_obj *dataColumn;
-		NameData *name = &(desc->attrs[i]->attname);
+		Form_pg_attribute attribute = desc->attrs[i];
+		NameData *name;
 		grn_id domain;
 		unsigned char flags;
 
+		name = &(attribute->attname);
 		if (isnull[i])
 			continue;
 
@@ -1138,7 +1240,7 @@ PGrnInsert(grn_ctx *ctx,
 									name->data, strlen(name->data));
 		domain = PGrnGetType(index, i, &flags);
 		grn_obj_reinit(ctx, &buffer, domain, flags);
-		PGrnGetValue(index, i, &buffer, values[i]);
+		PGrnConvertDatum(values[i], attribute->atttypid, &buffer);
 		grn_obj_set_value(ctx, dataColumn, id, &buffer, GRN_OBJ_SET);
 		grn_obj_unlink(ctx, dataColumn);
 		if (!PGrnCheck("pgroonga: failed to set column value")) {
@@ -1318,6 +1420,7 @@ PGrnSearchBuildConditions(IndexScanDesc scan,
 	for (i = 0; i < scan->numberOfKeys; i++)
 	{
 		ScanKey key = &(scan->keyData[i]);
+		Form_pg_attribute attribute;
 		grn_bool isValidStrategy = GRN_TRUE;
 		const char *targetColumnName;
 		grn_obj *targetColumn;
@@ -1328,11 +1431,13 @@ PGrnSearchBuildConditions(IndexScanDesc scan,
 		if (key->sk_flags & SK_ISNULL)
 			continue;
 
+		attribute = desc->attrs[key->sk_attno - 1];
+
 		GRN_EXPR_CREATE_FOR_QUERY(ctx, so->sourcesTable,
 								  matchTarget, matchTargetVariable);
 		GRN_PTR_PUT(ctx, &(data->matchTargets), matchTarget);
 
-		targetColumnName = desc->attrs[key->sk_attno - 1]->attname.data;
+		targetColumnName = attribute->attname.data;
 		targetColumn = grn_obj_column(ctx, so->sourcesTable,
 									  targetColumnName,
 									  strlen(targetColumnName));
@@ -1345,7 +1450,19 @@ PGrnSearchBuildConditions(IndexScanDesc scan,
 			domain = PGrnGetType(index, key->sk_attno - 1, NULL);
 			grn_obj_reinit(ctx, &buffer, domain, flags);
 		}
-		PGrnGetQuery(index, key->sk_attno - 1, &buffer, key->sk_argument);
+		{
+			Oid valueTypeID = attribute->atttypid;
+			switch (valueTypeID)
+			{
+			case VARCHARARRAYOID:
+				valueTypeID = VARCHAROID;
+				break;
+			case TEXTARRAYOID:
+				valueTypeID = TEXTOID;
+				break;
+			}
+			PGrnConvertDatum(key->sk_argument, valueTypeID, &buffer);
+		}
 
 		switch (key->sk_strategy)
 		{
@@ -1575,20 +1692,26 @@ PGrnFillBorder(IndexScanDesc scan,
 			   int *flags)
 {
 	Relation index = scan->indexRelation;
+	TupleDesc desc;
 	PGrnScanOpaque so = (PGrnScanOpaque) scan->opaque;
 	grn_obj *minBorderValue;
 	grn_obj *maxBorderValue;
 	int i;
 
+	desc = RelationGetDescr(index);
+
 	minBorderValue = &(so->minBorderValue);
 	maxBorderValue = &(so->maxBorderValue);
 	for (i = 0; i < scan->numberOfKeys; i++)
 	{
 		ScanKey key = &(scan->keyData[i]);
 		AttrNumber attrNumber;
+		Form_pg_attribute attribute;
 		grn_id domain;
 
 		attrNumber = key->sk_attno - 1;
+		attribute = desc->attrs[attrNumber];
+
 		domain = PGrnGetType(index, attrNumber, NULL);
 		switch (key->sk_strategy)
 		{
@@ -1597,7 +1720,9 @@ PGrnFillBorder(IndexScanDesc scan,
 			if (maxBorderValue->header.type != GRN_DB_VOID)
 			{
 				grn_obj_reinit(ctx, &buffer, domain, 0);
-				PGrnGetQuery(index, attrNumber, &buffer, key->sk_argument);
+				PGrnConvertDatum(key->sk_argument,
+								 attribute->atttypid,
+								 &buffer);
 				if (!PGrnIsMeaningfullMaxBorderValue(maxBorderValue,
 													 &buffer,
 													 *flags,
@@ -1607,7 +1732,9 @@ PGrnFillBorder(IndexScanDesc scan,
 				}
 			}
 			grn_obj_reinit(ctx, maxBorderValue, domain, 0);
-			PGrnGetQuery(index, attrNumber, maxBorderValue, key->sk_argument);
+			PGrnConvertDatum(key->sk_argument,
+							 attribute->atttypid,
+							 maxBorderValue);
 			*max = GRN_BULK_HEAD(maxBorderValue);
 			*maxSize = GRN_BULK_VSIZE(maxBorderValue);
 			*flags &= ~(GRN_CURSOR_LT | GRN_CURSOR_LE);
@@ -1625,8 +1752,9 @@ PGrnFillBorder(IndexScanDesc scan,
 			if (minBorderValue->header.type != GRN_DB_VOID)
 			{
 				grn_obj_reinit(ctx, &buffer, domain, 0);
-				PGrnGetQuery(index, attrNumber, &buffer,
-							 key->sk_argument);
+				PGrnConvertDatum(key->sk_argument,
+								 attribute->atttypid,
+								 &buffer);
 				if (!PGrnIsMeaningfullMinBorderValue(minBorderValue,
 													 &buffer,
 													 *flags,
@@ -1636,7 +1764,9 @@ PGrnFillBorder(IndexScanDesc scan,
 				}
 			}
 			grn_obj_reinit(ctx, minBorderValue, domain, 0);
-			PGrnGetQuery(index, attrNumber, minBorderValue, key->sk_argument);
+			PGrnConvertDatum(key->sk_argument,
+							 attribute->atttypid,
+							 minBorderValue);
 			*min = GRN_BULK_HEAD(minBorderValue);
 			*minSize = GRN_BULK_VSIZE(minBorderValue);
 			*flags &= ~(GRN_CURSOR_GT | GRN_CURSOR_GE);

  Modified: pgroonga.h (+0 -19)
===================================================================
--- pgroonga.h    2015-04-01 00:13:15 +0900 (3bd7b3d)
+++ pgroonga.h    2015-04-05 16:03:04 +0900 (819829b)
@@ -31,10 +31,6 @@
 #define PGrnContainStrategyNumber		7	/* operator %% (@ in Groonga) */
 #define PGrnQueryStrategyNumber			8	/* operator @@ (Groonga query) */
 
-/* Groonga support functions */
-#define PGrnGetValueProc				1
-#define PGrnGetQueryProc				2
-
 /* file and table names */
 #define PGrnDatabaseBasename			"pgrn"
 #define PGrnSourcesTableNamePrefix		"Sources"
@@ -44,7 +40,6 @@
 #define PGrnLexiconNameFormat			"Lexicon%u_%u"
 #define PGrnIndexColumnName				"index"
 
-/* in pgroonga.c */
 extern void PGDLLEXPORT _PG_init(void);
 
 extern Datum PGDLLEXPORT pgroonga_score(PG_FUNCTION_ARGS);
@@ -70,18 +65,4 @@ extern Datum PGDLLEXPORT pgroonga_vacuumcleanup(PG_FUNCTION_ARGS);
 extern Datum PGDLLEXPORT pgroonga_costestimate(PG_FUNCTION_ARGS);
 extern Datum PGDLLEXPORT pgroonga_options(PG_FUNCTION_ARGS);
 
-/* in groonga_types.c */
-extern Datum PGDLLEXPORT pgroonga_get_text(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_text_array(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_varchar(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_varchar_array(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_bool(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_int2(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_int4(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_int8(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_float4(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_float8(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_timestamp(PG_FUNCTION_ARGS);
-extern Datum PGDLLEXPORT pgroonga_get_timestamptz(PG_FUNCTION_ARGS);
-
 #endif	/* PPGROONGA_H */

  Modified: pgroonga.sql (+14 -89)
===================================================================
--- pgroonga.sql    2015-04-01 00:13:15 +0900 (3e06b1e)
+++ pgroonga.sql    2015-04-05 16:03:04 +0900 (9a29cf5)
@@ -165,60 +165,11 @@ CREATE FUNCTION pgroonga.options(internal)
 	AS 'MODULE_PATHNAME', 'pgroonga_options'
 	LANGUAGE C;
 
-CREATE FUNCTION pgroonga.get_text(internal, internal, text)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_text'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_text_array(internal, internal, text[])
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_text_array'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_varchar(internal, internal, varchar)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_varchar'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_varchar_array(internal, internal, varchar[])
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_varchar_array'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_bool(internal, internal, bool)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_bool'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_int2(internal, internal, int2)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_int2'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_int4(internal, internal, int4)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_int4'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_int8(internal, internal, int8)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_int8'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_float4(internal, internal, float4)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_float4'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_float8(internal, internal, float8)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_float8'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_timestamp(internal, internal, timestamp)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_timestamp'
-	LANGUAGE C;
-CREATE FUNCTION pgroonga.get_timestamptz(internal, internal, timestamptz)
-	RETURNS void
-	AS 'MODULE_PATHNAME', 'pgroonga_get_timestamptz'
-	LANGUAGE C;
-
 DELETE FROM pg_catalog.pg_am WHERE amname = 'pgroonga';
 INSERT INTO pg_catalog.pg_am VALUES(
 	'pgroonga',	-- amname
 	8,		-- amstrategies
-	3,		-- amsupport
+	0,		-- amsupport
 	true,		-- amcanorder
 	true,		-- amcanorderbyop
 	true,		-- amcanbackward
@@ -252,25 +203,19 @@ CREATE OPERATOR CLASS pgroonga.text_full_text_search_ops DEFAULT FOR TYPE text
 	USING pgroonga AS
 		OPERATOR 6 pg_catalog.~~,
 		OPERATOR 7 %%,
-		OPERATOR 8 @@,
-		FUNCTION 1 pgroonga.get_text(internal, internal, text),
-		FUNCTION 2 pgroonga.get_text(internal, internal, text);
+		OPERATOR 8 @@;
 
 CREATE OPERATOR CLASS pgroonga.text_array_full_text_search_ops
 	DEFAULT
 	FOR TYPE text[]
 	USING pgroonga AS
 		OPERATOR 7 %% (text[], text),
-		OPERATOR 8 @@ (text[], text),
-		FUNCTION 1 pgroonga.get_text_array(internal, internal, text[]),
-		FUNCTION 2 pgroonga.get_text(internal, internal, text);
+		OPERATOR 8 @@ (text[], text);
 
 CREATE OPERATOR CLASS pgroonga.varchar_full_text_search_ops FOR TYPE varchar
 	USING pgroonga AS
 		OPERATOR 7 %%,
-		OPERATOR 8 @@,
-		FUNCTION 1 pgroonga.get_varchar(internal, internal, varchar),
-		FUNCTION 2 pgroonga.get_varchar(internal, internal, varchar);
+		OPERATOR 8 @@;
 
 CREATE OPERATOR CLASS pgroonga.varchar_ops DEFAULT FOR TYPE varchar
 	USING pgroonga AS
@@ -278,17 +223,13 @@ CREATE OPERATOR CLASS pgroonga.varchar_ops DEFAULT FOR TYPE varchar
 		OPERATOR 2 <= (text, text),
 		OPERATOR 3 = (text, text),
 		OPERATOR 4 >= (text, text),
-		OPERATOR 5 > (text, text),
-		FUNCTION 1 pgroonga.get_varchar(internal, internal, varchar),
-		FUNCTION 2 pgroonga.get_varchar(internal, internal, varchar);
+		OPERATOR 5 > (text, text);
 
 CREATE OPERATOR CLASS pgroonga.varchar_array_ops
 	DEFAULT
 	FOR TYPE varchar[]
 	USING pgroonga AS
-		OPERATOR 7 %% (varchar[], varchar),
-		FUNCTION 1 pgroonga.get_varchar_array(internal, internal, varchar[]),
-		FUNCTION 2 pgroonga.get_varchar(internal, internal, varchar);
+		OPERATOR 7 %% (varchar[], varchar);
 
 CREATE OPERATOR CLASS pgroonga.bool_ops DEFAULT FOR TYPE bool
 	USING pgroonga AS
@@ -296,9 +237,7 @@ CREATE OPERATOR CLASS pgroonga.bool_ops DEFAULT FOR TYPE bool
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_bool(internal, internal, bool),
-		FUNCTION 2 pgroonga.get_bool(internal, internal, bool);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.int2_ops DEFAULT FOR TYPE int2
 	USING pgroonga AS
@@ -306,9 +245,7 @@ CREATE OPERATOR CLASS pgroonga.int2_ops DEFAULT FOR TYPE int2
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_int2(internal, internal, int2),
-		FUNCTION 2 pgroonga.get_int2(internal, internal, int2);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.int4_ops DEFAULT FOR TYPE int4
 	USING pgroonga AS
@@ -316,9 +253,7 @@ CREATE OPERATOR CLASS pgroonga.int4_ops DEFAULT FOR TYPE int4
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_int4(internal, internal, int4),
-		FUNCTION 2 pgroonga.get_int4(internal, internal, int4);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.int8_ops DEFAULT FOR TYPE int8
 	USING pgroonga AS
@@ -326,9 +261,7 @@ CREATE OPERATOR CLASS pgroonga.int8_ops DEFAULT FOR TYPE int8
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_int8(internal, internal, int8),
-		FUNCTION 2 pgroonga.get_int8(internal, internal, int8);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.float4_ops DEFAULT FOR TYPE float4
 	USING pgroonga AS
@@ -336,9 +269,7 @@ CREATE OPERATOR CLASS pgroonga.float4_ops DEFAULT FOR TYPE float4
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_float4(internal, internal, float4),
-		FUNCTION 2 pgroonga.get_float4(internal, internal, float4);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.float8_ops DEFAULT FOR TYPE float8
 	USING pgroonga AS
@@ -346,9 +277,7 @@ CREATE OPERATOR CLASS pgroonga.float8_ops DEFAULT FOR TYPE float8
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_float8(internal, internal, float8),
-		FUNCTION 2 pgroonga.get_float8(internal, internal, float8);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.timestamp_ops DEFAULT FOR TYPE timestamp
 	USING pgroonga AS
@@ -356,9 +285,7 @@ CREATE OPERATOR CLASS pgroonga.timestamp_ops DEFAULT FOR TYPE timestamp
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_timestamp(internal, internal, timestamp),
-		FUNCTION 2 pgroonga.get_timestamp(internal, internal, timestamp);
+		OPERATOR 5 >;
 
 CREATE OPERATOR CLASS pgroonga.timestamptz_ops DEFAULT FOR TYPE timestamptz
 	USING pgroonga AS
@@ -366,6 +293,4 @@ CREATE OPERATOR CLASS pgroonga.timestamptz_ops DEFAULT FOR TYPE timestamptz
 		OPERATOR 2 <=,
 		OPERATOR 3 =,
 		OPERATOR 4 >=,
-		OPERATOR 5 >,
-		FUNCTION 1 pgroonga.get_timestamptz(internal, internal, timestamptz),
-		FUNCTION 2 pgroonga.get_timestamptz(internal, internal, timestamptz);
+		OPERATOR 5 >;

  Deleted: pgroonga_types.c (+0 -212) 100644
===================================================================
--- pgroonga_types.c    2015-04-01 00:13:15 +0900 (94ec888)
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * IDENTIFICATION
- *	gproonga_types.c
- */
-
-#include "pgroonga.h"
-
-#include <catalog/pg_type.h>
-#include <utils/array.h>
-#include <utils/builtins.h>
-#include <utils/timestamp.h>
-
-#include <groonga.h>
-
-#include <math.h>
-
-PG_FUNCTION_INFO_V1(pgroonga_get_text);
-PG_FUNCTION_INFO_V1(pgroonga_get_text_array);
-PG_FUNCTION_INFO_V1(pgroonga_get_varchar);
-PG_FUNCTION_INFO_V1(pgroonga_get_varchar_array);
-PG_FUNCTION_INFO_V1(pgroonga_get_bool);
-PG_FUNCTION_INFO_V1(pgroonga_get_int2);
-PG_FUNCTION_INFO_V1(pgroonga_get_int4);
-PG_FUNCTION_INFO_V1(pgroonga_get_int8);
-PG_FUNCTION_INFO_V1(pgroonga_get_float4);
-PG_FUNCTION_INFO_V1(pgroonga_get_float8);
-PG_FUNCTION_INFO_V1(pgroonga_get_timestamp);
-PG_FUNCTION_INFO_V1(pgroonga_get_timestamptz);
-
-Datum
-pgroonga_get_text(PG_FUNCTION_ARGS)
-{
-	grn_ctx	*ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj	*obj = (grn_obj *) PG_GETARG_POINTER(1);
-	text *value = PG_GETARG_TEXT_PP(2);
-
-	GRN_TEXT_SET(ctx, obj, VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_text_array(PG_FUNCTION_ARGS)
-{
-	grn_ctx	*ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	ArrayType *value = PG_GETARG_ARRAYTYPE_P(2);
-	int i, n;
-
-	n = ARR_DIMS(value)[0];
-	for (i = 1; i <= n; i++)
-	{
-		int weight = 0;
-		Datum elementDatum;
-		text *element;
-		bool isNULL;
-
-		elementDatum = array_ref(value, 1, &i, -1, -1, false, 'i', &isNULL);
-		if (isNULL)
-			continue;
-
-		element = DatumGetTextPP(elementDatum);
-		grn_vector_add_element(ctx, buffer,
-							   VARDATA_ANY(element),
-							   VARSIZE_ANY_EXHDR(element),
-							   weight,
-							   buffer->header.domain);
-	}
-
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_varchar(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	VarChar *value = PG_GETARG_VARCHAR_PP(2);
-
-	GRN_TEXT_SET(ctx, buffer, VARDATA_ANY(value), VARSIZE_ANY_EXHDR(value));
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_varchar_array(PG_FUNCTION_ARGS)
-{
-	grn_ctx	*ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj	*buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	ArrayType *value = PG_GETARG_ARRAYTYPE_P(2);
-	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;
-
-		element = DatumGetVarCharPP(elementDatum);
-		grn_vector_add_element(ctx, buffer,
-							   VARDATA_ANY(element),
-							   VARSIZE_ANY_EXHDR(element),
-							   weight,
-							   buffer->header.domain);
-	}
-
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_bool(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	bool value = PG_GETARG_BOOL(2);
-
-	GRN_BOOL_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_int2(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	int16 value = PG_GETARG_INT16(2);
-
-	GRN_INT16_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_int4(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	int32 value = PG_GETARG_INT32(2);
-
-	GRN_INT32_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_int8(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	int64 value = PG_GETARG_INT64(2);
-
-	GRN_INT64_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_float4(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	float8 value = (float8) PG_GETARG_FLOAT4(2);
-
-	GRN_FLOAT_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_float8(PG_FUNCTION_ARGS)
-{
-	grn_ctx *ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj *buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	float8 value = PG_GETARG_FLOAT8(2);
-
-	GRN_FLOAT_SET(ctx, buffer, value);
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_timestamp(PG_FUNCTION_ARGS)
-{
-	grn_ctx	*ctx = (grn_ctx *) PG_GETARG_POINTER(0);
-	grn_obj	*buffer = (grn_obj *) PG_GETARG_POINTER(1);
-	Timestamp value = PG_GETARG_TIMESTAMP(2);
-	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));
-
-	PG_RETURN_VOID();
-}
-
-Datum
-pgroonga_get_timestamptz(PG_FUNCTION_ARGS)
-{
-	return pgroonga_get_timestamp(fcinfo);
-}
-------------- next part --------------
HTML����������������������������...
Download 



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