RETURNS trigger
AS :'regresslib'
LANGUAGE C;
-CREATE FUNCTION get_columns_length(oid[])
- RETURNS int
- AS :'regresslib'
- LANGUAGE C STRICT STABLE PARALLEL SAFE;
-- Use hand-rolled hash functions and operator classes to get predictable
-- result on different machines. The hash function for int4 simply returns
-- the sum of the values passed to it and the one for text returns the length
#include "utils/array.h"
#include "utils/builtins.h"
#include "utils/geo_decls.h"
-#include "utils/lsyscache.h"
#include "utils/memutils.h"
#include "utils/rel.h"
#include "utils/typcache.h"
PG_RETURN_BOOL(IsBinaryCoercible(srctype, targettype));
}
-
-/*
- * Return the length of the portion of a tuple consisting of the given array
- * of data types. The input data types must be fixed-length data types.
- */
-PG_FUNCTION_INFO_V1(get_columns_length);
-Datum
-get_columns_length(PG_FUNCTION_ARGS)
-{
- ArrayType *ta = PG_GETARG_ARRAYTYPE_P(0);
- Oid *type_oids;
- int ntypes;
- int column_offset = 0;
-
- if (ARR_HASNULL(ta) && array_contains_nulls(ta))
- elog(ERROR, "argument must not contain nulls");
-
- if (ARR_NDIM(ta) > 1)
- elog(ERROR, "argument must be empty or one-dimensional array");
-
- type_oids = (Oid *) ARR_DATA_PTR(ta);
- ntypes = ArrayGetNItems(ARR_NDIM(ta), ARR_DIMS(ta));
- for (int i = 0; i < ntypes; i++)
- {
- Oid typeoid = type_oids[i];
- int16 typlen;
- bool typbyval;
- char typalign;
-
- get_typlenbyvalalign(typeoid, &typlen, &typbyval, &typalign);
-
- /* the data type must be fixed-length */
- if (typlen < 0)
- elog(ERROR, "type %u is not fixed-length data type", typeoid);
-
- column_offset = att_align_nominal(column_offset + typlen, typalign);
- }
-
- PG_RETURN_INT32(column_offset);
-}
AS :'regresslib'
LANGUAGE C;
-CREATE FUNCTION get_columns_length(oid[])
- RETURNS int
- AS :'regresslib'
- LANGUAGE C STRICT STABLE PARALLEL SAFE;
-
-- Use hand-rolled hash functions and operator classes to get predictable
-- result on different machines. The hash function for int4 simply returns
-- the sum of the values passed to it and the one for text returns the length