33{
53 bool nulls[8] = {0};
54
55
57
58
59
60
61
62
63
66 elog(
ERROR,
"SPI_prepare failed for \"%s\"", query_string);
67
70 elog(
ERROR,
"failed to execute \"%s\"", query_string);
72 if (tupdesc->
natts != 2 ||
75 elog(
ERROR,
"test_predtest query must yield two boolean columns");
76
79 {
82 bool isnull;
85
86
88 if (isnull)
92 else
94
96 if (isnull)
100 else
102
103
104
105
106 if (
c2 ==
't' &&
c1 !=
't')
108
109 if (
c2 !=
'f' &&
c1 ==
'f')
111
112 if (
c2 ==
't' &&
c1 !=
'f')
114
115 if (
c2 ==
't' &&
c1 ==
't')
117 }
118
119
120
121
122
123
124
125
126
127
128
129
130
131
133 elog(
WARNING,
"s_r_holds was true; w_r_holds must not be false");
134
135
136
137
138
140
142 elog(
ERROR,
"test_predtest query string must contain exactly one query");
145 elog(
ERROR,
"test_predtest query must be a SELECT");
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
167
170 false);
171
174 true);
175
178 false);
179
182 true);
183
184
185
186
188 elog(
WARNING,
"strong_implied_by result is incorrect");
190 elog(
WARNING,
"weak_implied_by result is incorrect");
192 elog(
WARNING,
"strong_refuted_by result is incorrect");
194 elog(
WARNING,
"weak_refuted_by result is incorrect");
195
196
197
198
199
200
201
202
203
204
205
207 elog(
WARNING,
"strong_refuted_by was proven; weak_refuted_by should also be proven");
208
209
210
211
214
217 "strong_implied_by",
BOOLOID, -1, 0);
219 "weak_implied_by",
BOOLOID, -1, 0);
221 "strong_refuted_by",
BOOLOID, -1, 0);
223 "weak_refuted_by",
BOOLOID, -1, 0);
234
243
245}
static Datum values[MAXATTR]
#define Assert(condition)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
#define PG_GETARG_TEXT_PP(n)
#define PG_RETURN_DATUM(x)
static Datum HeapTupleGetDatum(const HeapTupleData *tuple)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
List * make_ands_implicit(Expr *clause)
static int list_length(const List *l)
#define linitial_node(type, l)
#define lsecond_node(type, l)
static bool DatumGetBool(Datum X)
static Datum BoolGetDatum(bool X)
bool predicate_refuted_by(List *predicate_list, List *clause_list, bool weak)
bool predicate_implied_by(List *predicate_list, List *clause_list, bool weak)
SPITupleTable * SPI_tuptable
int SPI_execute_plan(SPIPlanPtr plan, const Datum *Values, const char *Nulls, bool read_only, long tcount)
CachedPlan * SPI_plan_get_cached_plan(SPIPlanPtr plan)
SPIPlanPtr SPI_prepare(const char *src, int nargs, const Oid *argtypes)
Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull)
TupleDesc CreateTemplateTupleDesc(int natts)
void TupleDescFinalize(TupleDesc tupdesc)
void TupleDescInitEntry(TupleDesc desc, AttrNumber attributeNumber, const char *attributeName, Oid oidtypeid, int32 typmod, int attdim)
static FormData_pg_attribute * TupleDescAttr(TupleDesc tupdesc, int i)
char * text_to_cstring(const text *t)