49 #define EXPECT_TRUE(expr) \
53 "%s was unexpectedly false in file \"%s\" line %u", \
54 #expr, __FILE__, __LINE__); \
57 #define EXPECT_EQ_U32(result_expr, expected_expr) \
59 uint32 result = (result_expr); \
60 uint32 expected = (expected_expr); \
61 if (result != expected) \
63 "%s yielded %u, expected %s in file \"%s\" line %u", \
64 #result_expr, result, #expected_expr, __FILE__, __LINE__); \
67 #define EXPECT_EQ_U64(result_expr, expected_expr) \
69 uint64 result = (result_expr); \
70 uint64 expected = (expected_expr); \
71 if (result != expected) \
73 "%s yielded " UINT64_FORMAT ", expected %s in file \"%s\" line %u", \
74 #result_expr, result, #expected_expr, __FILE__, __LINE__); \
102 for (
i = 0;
i < p1->
npts - 1 && !found;
i++)
105 for (
j = 0;
j <
p2->npts - 1 && !found;
j++)
133 lseg->
p[0].
x = pt1->
x;
134 lseg->
p[0].
y = pt1->
y;
135 lseg->
p[1].
x = pt2->
x;
136 lseg->
p[1].
y = pt2->
y;
187 (
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
188 errmsg(
"invalid input syntax for type %s: \"%s\"",
192 result->
center.
x = atof(coord[0]);
193 result->
center.
y = atof(coord[1]);
194 result->
radius = atof(coord[2]);
242 new_string[
len -
i] =
string[
i];
255 elog(
ERROR,
"trigger_return_old: not fired by trigger manager");
262 #define TTDUMMY_INFINITY 999999
294 elog(
ERROR,
"ttdummy: not fired by trigger manager");
296 elog(
ERROR,
"ttdummy: must be fired for row");
298 elog(
ERROR,
"ttdummy: must be fired before event");
300 elog(
ERROR,
"ttdummy: cannot process INSERT event");
318 if (trigger->tgnargs != 2)
319 elog(
ERROR,
"ttdummy (%s): invalid (!= 2) number of arguments %d",
322 args = trigger->tgargs;
323 tupdesc = rel->rd_att;
324 natts = tupdesc->natts;
326 for (
i = 0;
i < 2;
i++)
330 elog(
ERROR,
"ttdummy (%s): there is no attribute %s",
333 elog(
ERROR,
"ttdummy (%s): attribute %s must be of integer type",
345 if (newtuple != NULL)
354 if (oldon != newon || oldoff != newoff)
356 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
357 errmsg(
"ttdummy (%s): you cannot change %s and/or %s columns (use set_ttdummy)",
382 cnulls = (
char *)
palloc(natts *
sizeof(
char));
383 for (
i = 0;
i < natts;
i++)
385 cvals[
i] =
SPI_getbinval((newtuple != NULL) ? newtuple : trigtuple,
386 tupdesc,
i + 1, &isnull);
387 cnulls[
i] = (isnull) ?
'n' :
' ';
393 cvals[
attnum[0] - 1] = newoff;
394 cnulls[
attnum[0] - 1] =
' ';
396 cnulls[
attnum[1] - 1] =
' ';
401 cvals[
attnum[1] - 1] = newoff;
402 cnulls[
attnum[1] - 1] =
' ';
414 query = (
char *)
palloc(100 + 16 * natts);
420 for (
i = 1;
i <= natts;
i++)
422 sprintf(query + strlen(query),
"$%d%s",
423 i, (
i < natts) ?
", " :
")");
447 rettuple = trigtuple;
503 i = sscanf(input_string,
524 char *result = (
char *)
palloc(16 * 4);
526 snprintf(result, 16 * 4,
"%d,%d,%d,%d",
569 ncolumns = tupdesc->
natts;
578 nulls = (
bool *)
palloc(ncolumns *
sizeof(
bool));
584 for (
i = 0;
i < ncolumns;
i++)
607 struct varlena *oldattr = attr;
615 redirect_pointer.
pointer = attr;
618 sizeof(redirect_pointer));
651 elog(
ERROR,
"must be superuser to change environment variables");
653 if (
setenv(envvar, envval, 1) != 0)
654 elog(
ERROR,
"could not set environment variable: %m");
668 elog(
ERROR,
"must be superuser to check PID liveness");
670 while (
kill(pid, 0) == 0)
677 elog(
ERROR,
"could not check PID %d liveness: %m", pid);
748 for (
i = 0;
i < 1000;
i++)
755 elog(
ERROR,
"atomic_compare_exchange_u32() never succeeded");
794 for (
i = 0;
i < 100;
i++)
801 elog(
ERROR,
"atomic_compare_exchange_u64() never succeeded");
833 struct test_lock_struct
840 memcpy(struct_w_lock.data_before,
"abcd", 4);
841 memcpy(struct_w_lock.data_after,
"ef12", 4);
850 S_LOCK(&struct_w_lock.lock);
854 s_lock(&struct_w_lock.lock,
"testfile", 17,
"testfunc");
862 S_LOCK(&struct_w_lock.lock);
864 if (!
TAS(&struct_w_lock.lock))
865 elog(
ERROR,
"acquired already held spinlock");
869 elog(
ERROR,
"acquired already held spinlock");
879 if (memcmp(struct_w_lock.data_before,
"abcd", 4) != 0)
880 elog(
ERROR,
"padding before spinlock modified");
881 if (memcmp(struct_w_lock.data_after,
"ef12", 4) != 0)
882 elog(
ERROR,
"padding after spinlock modified");
890 #ifndef HAVE_SPINLOCKS
898 for (
uint32 i = 0;
i < INT32_MAX - 100000;
i++)
938 #define NUM_TEST_ATOMICS (NUM_SPINLOCK_SEMAPHORES + NUM_ATOMICS_SEMAPHORES + 27)
968 #undef NUM_TEST_ATOMICS
995 elog(
ERROR,
"test_fdw_handler is not implemented");
1056 !((
Const *) arg1)->constisnull &&
1058 !((
Const *) arg2)->constisnull)
1063 req->
rows = val2 - val1 + 1;
1116 if (src_encoding < 0)
1118 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1119 errmsg(
"invalid source encoding name \"%s\"",
1120 src_encoding_name)));
1121 if (dest_encoding < 0)
1123 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1124 errmsg(
"invalid destination encoding name \"%s\"",
1125 dest_encoding_name)));
1129 elog(
ERROR,
"return type must be a row type");
1135 if (src_encoding == dest_encoding)
1142 if (oklen == srclen)
1144 convertedbytes = oklen;
1157 convertedbytes = oklen;
1160 memcpy(
VARDATA(retval), src, oklen);
1168 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
1169 errmsg(
"default conversion function for encoding \"%s\" to \"%s\" does not exist",
1175 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1177 errdetail(
"String of %d bytes is too long for encoding conversion.",
1187 (
unsigned char *) src, srclen,
1188 (
unsigned char *) dst, dstsize,
1190 dstlen = strlen(dst);
1197 memcpy(
VARDATA(retval), dst, dstlen);
1202 MemSet(nulls, 0,
sizeof(nulls));
1232 int column_offset = 0;
1235 elog(
ERROR,
"argument must not contain nulls");
1238 elog(
ERROR,
"argument must be empty or one-dimensional array");
1242 for (
int i = 0;
i < ntypes;
i++)
1244 Oid typeoid = type_oids[
i];
1253 elog(
ERROR,
"type %u is not fixed-length data type", typeoid);
#define PG_GETARG_ARRAYTYPE_P(n)
bool array_contains_nulls(ArrayType *array)
int ArrayGetNItems(int ndim, const int *dims)
static uint32 pg_atomic_fetch_and_u32(volatile pg_atomic_uint32 *ptr, uint32 and_)
static bool pg_atomic_compare_exchange_u32(volatile pg_atomic_uint32 *ptr, uint32 *expected, uint32 newval)
static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static void pg_atomic_clear_flag(volatile pg_atomic_flag *ptr)
static uint32 pg_atomic_fetch_or_u32(volatile pg_atomic_uint32 *ptr, uint32 or_)
static uint32 pg_atomic_sub_fetch_u32(volatile pg_atomic_uint32 *ptr, int32 sub_)
static uint32 pg_atomic_fetch_sub_u32(volatile pg_atomic_uint32 *ptr, int32 sub_)
static bool pg_atomic_compare_exchange_u64(volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval)
static void pg_atomic_init_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
static uint32 pg_atomic_fetch_add_u32(volatile pg_atomic_uint32 *ptr, int32 add_)
static uint32 pg_atomic_add_fetch_u32(volatile pg_atomic_uint32 *ptr, int32 add_)
static uint64 pg_atomic_fetch_add_u64(volatile pg_atomic_uint64 *ptr, int64 add_)
static bool pg_atomic_test_set_flag(volatile pg_atomic_flag *ptr)
static uint64 pg_atomic_sub_fetch_u64(volatile pg_atomic_uint64 *ptr, int64 sub_)
static bool pg_atomic_unlocked_test_flag(volatile pg_atomic_flag *ptr)
static void pg_atomic_write_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
static uint64 pg_atomic_fetch_and_u64(volatile pg_atomic_uint64 *ptr, uint64 and_)
static uint32 pg_atomic_read_u32(volatile pg_atomic_uint32 *ptr)
static uint64 pg_atomic_fetch_or_u64(volatile pg_atomic_uint64 *ptr, uint64 or_)
static uint64 pg_atomic_add_fetch_u64(volatile pg_atomic_uint64 *ptr, int64 add_)
static uint32 pg_atomic_exchange_u32(volatile pg_atomic_uint32 *ptr, uint32 newval)
static void pg_atomic_init_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static uint64 pg_atomic_read_u64(volatile pg_atomic_uint64 *ptr)
static uint64 pg_atomic_fetch_sub_u64(volatile pg_atomic_uint64 *ptr, int64 sub_)
static uint64 pg_atomic_exchange_u64(volatile pg_atomic_uint64 *ptr, uint64 newval)
static void pg_atomic_init_flag(volatile pg_atomic_flag *ptr)
static Datum values[MAXATTR]
#define CStringGetTextDatum(s)
#define MemSet(start, val, len)
#define OidIsValid(objectId)
static void PGresult const char * p2
struct varlena * detoast_external_attr(struct varlena *attr)
#define INDIRECT_POINTER_SIZE
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
int pg_char_to_encoding(const char *name)
const char * pg_encoding_to_char(int encoding)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
Datum GetAttributeByName(HeapTupleHeader tuple, const char *attname, bool *isNull)
#define PG_GETARG_BYTEA_PP(n)
#define PG_GETARG_TEXT_PP(n)
#define DirectFunctionCall2(func, arg1, arg2)
#define PG_GETARG_POINTER(n)
#define PG_RETURN_CSTRING(x)
#define DirectFunctionCall1(func, arg1)
#define PG_GETARG_CSTRING(n)
#define PG_GETARG_NAME(n)
#define PG_GETARG_HEAPTUPLEHEADER(n)
#define PG_RETURN_TEXT_P(x)
#define PG_RETURN_INT32(x)
#define PG_GETARG_INT32(n)
#define PG_GETARG_BOOL(n)
#define PG_RETURN_DATUM(x)
#define PG_RETURN_POINTER(x)
#define PG_RETURN_BOOL(x)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
#define HeapTupleGetDatum(tuple)
#define PG_GETARG_POINT_P(n)
#define PointPGetDatum(X)
#define PG_GETARG_PATH_P(n)
Datum point_distance(PG_FUNCTION_ARGS)
Datum lseg_intersect(PG_FUNCTION_ARGS)
Datum lseg_interpt(PG_FUNCTION_ARGS)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull)
void heap_deform_tuple(HeapTuple tuple, TupleDesc tupleDesc, Datum *values, bool *isnull)
#define HeapTupleHeaderGetTypMod(tup)
#define HeapTupleHeaderGetTypeId(tup)
#define HeapTupleHeaderGetDatumLength(tup)
#define ItemPointerSetInvalid(pointer)
Assert(fmt[strlen(fmt) - 1] !='\n')
void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval, char *typalign)
int pg_do_encoding_conversion_buf(Oid proc, int src_encoding, int dest_encoding, unsigned char *src, int srclen, unsigned char *dest, int destlen, bool noError)
void report_invalid_encoding(int encoding, const char *mbstr, int len)
MemoryContext TopTransactionContext
void pfree(void *pointer)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void * MemoryContextAlloc(MemoryContext context, Size size)
#define CHECK_FOR_INTERRUPTS()
Oid FindDefaultConversionProc(int32 for_encoding, int32 to_encoding)
#define IsA(nodeptr, _type_)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
bool IsBinaryCoercible(Oid srctype, Oid targettype)
#define MAX_CONVERSION_GROWTH
Selectivity restriction_selectivity(PlannerInfo *root, Oid operatorid, List *args, Oid inputcollid, int varRelid)
Selectivity join_selectivity(PlannerInfo *root, Oid operatorid, List *args, Oid inputcollid, JoinType jointype, SpecialJoinInfo *sjinfo)
void canonicalize_path(char *path)
#define VARATT_IS_EXTERNAL_ONDISK(PTR)
#define VARATT_IS_EXTERNAL_INDIRECT(PTR)
#define DatumGetPointer(X)
#define SET_VARTAG_EXTERNAL(PTR, tag)
#define VARDATA_EXTERNAL(PTR)
#define DatumGetFloat8(X)
#define SET_VARSIZE(PTR, len)
#define PointerGetDatum(X)
#define VARSIZE_ANY_EXHDR(PTR)
char * psprintf(const char *fmt,...)
static void test_spinlock(void)
#define EXPECT_TRUE(expr)
Datum regress_setenv(PG_FUNCTION_ARGS)
static void test_atomic_spin_nest(void)
static void test_atomic_uint32(void)
Datum ttdummy(PG_FUNCTION_ARGS)
#define EXPECT_EQ_U32(result_expr, expected_expr)
Datum test_atomic_ops(PG_FUNCTION_ARGS)
Datum test_support_func(PG_FUNCTION_ARGS)
PG_FUNCTION_INFO_V1(interpt_pp)
Datum int44out(PG_FUNCTION_ARGS)
Datum set_ttdummy(PG_FUNCTION_ARGS)
Datum test_opclass_options_func(PG_FUNCTION_ARGS)
Datum test_fdw_handler(PG_FUNCTION_ARGS)
#define EXPECT_EQ_U64(result_expr, expected_expr)
Datum interpt_pp(PG_FUNCTION_ARGS)
static void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2)
Datum trigger_return_old(PG_FUNCTION_ARGS)
Datum int44in(PG_FUNCTION_ARGS)
Datum get_columns_length(PG_FUNCTION_ARGS)
Datum test_canonicalize_path(PG_FUNCTION_ARGS)
Datum reverse_name(PG_FUNCTION_ARGS)
Datum widget_in(PG_FUNCTION_ARGS)
Datum wait_pid(PG_FUNCTION_ARGS)
Datum widget_out(PG_FUNCTION_ARGS)
static void test_atomic_flag(void)
Datum pt_in_widget(PG_FUNCTION_ARGS)
Datum test_enc_conversion(PG_FUNCTION_ARGS)
static void test_atomic_uint64(void)
Datum make_tuple_indirect(PG_FUNCTION_ARGS)
Datum binary_coercible(PG_FUNCTION_ARGS)
Datum overpaid(PG_FUNCTION_ARGS)
int s_lock(volatile slock_t *lock, const char *file, int line, const char *func)
#define S_INIT_LOCK(lock)
Datum nextval(PG_FUNCTION_ARGS)
void pg_usleep(long microsec)
char * SPI_getrelname(Relation rel)
int SPI_fnumber(TupleDesc tupdesc, const char *fname)
Oid SPI_gettypeid(TupleDesc tupdesc, int fnumber)
const char * SPI_result_code_string(int code)
HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum, Datum *Values, const char *Nulls)
SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes)
int SPI_keepplan(SPIPlanPtr plan)
int SPI_execp(SPIPlanPtr plan, Datum *Values, const char *Nulls, long tcount)
Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull)
#define SpinLockInit(lock)
#define SpinLockRelease(lock)
#define SpinLockAcquire(lock)
Point p[FLEXIBLE_ARRAY_MEMBER]
struct PlannerInfo * root
struct SpecialJoinInfo * sjinfo
#define TRIGGER_FIRED_BEFORE(event)
#define CALLED_AS_TRIGGER(fcinfo)
#define TRIGGER_FIRED_FOR_ROW(event)
#define TRIGGER_FIRED_BY_INSERT(event)
#define TRIGGER_FIRED_BY_UPDATE(event)
#define ReleaseTupleDesc(tupdesc)
#define TupleDescAttr(tupdesc, i)
#define att_align_nominal(cur_offset, attalign)
TupleDesc lookup_rowtype_tupdesc(Oid type_id, int32 typmod)
char * text_to_cstring(const text *t)
text * cstring_to_text(const char *s)
int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len)