本文整理汇总了C++中CreateTemplateTupleDesc函数的典型用法代码示例。如果您正苦于以下问题:C++ CreateTemplateTupleDesc函数的具体用法?C++ CreateTemplateTupleDesc怎么用?C++ CreateTemplateTupleDesc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CreateTemplateTupleDesc函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateTupleDescCopyConstr
/*
* CreateTupleDescCopyConstr
* This function creates a new TupleDesc by copying from an existing
* TupleDesc (including its constraints and defaults).
*/
TupleDesc
CreateTupleDescCopyConstr(TupleDesc tupdesc)
{
TupleDesc desc;
TupleConstr *constr = tupdesc->constr;
int i;
desc = CreateTemplateTupleDesc(tupdesc->natts, tupdesc->tdhasoid);
for (i = 0; i < desc->natts; i++)
{
memcpy(desc->attrs[i], tupdesc->attrs[i], ATTRIBUTE_FIXED_PART_SIZE);
}
if (constr)
{
TupleConstr *cpy = (TupleConstr *) palloc0(sizeof(TupleConstr));
cpy->has_not_null = constr->has_not_null;
if ((cpy->num_defval = constr->num_defval) > 0)
{
cpy->defval = (AttrDefault *) palloc(cpy->num_defval * sizeof(AttrDefault));
memcpy(cpy->defval, constr->defval, cpy->num_defval * sizeof(AttrDefault));
for (i = cpy->num_defval - 1; i >= 0; i--)
{
if (constr->defval[i].adbin)
cpy->defval[i].adbin = pstrdup(constr->defval[i].adbin);
}
}
if ((cpy->num_check = constr->num_check) > 0)
{
cpy->check = (ConstrCheck *) palloc(cpy->num_check * sizeof(ConstrCheck));
memcpy(cpy->check, constr->check, cpy->num_check * sizeof(ConstrCheck));
for (i = cpy->num_check - 1; i >= 0; i--)
{
if (constr->check[i].ccname)
cpy->check[i].ccname = pstrdup(constr->check[i].ccname);
if (constr->check[i].ccbin)
cpy->check[i].ccbin = pstrdup(constr->check[i].ccbin);
cpy->check[i].ccvalid = constr->check[i].ccvalid;
cpy->check[i].ccnoinherit = constr->check[i].ccnoinherit;
}
}
desc->constr = cpy;
}
desc->tdtypeid = tupdesc->tdtypeid;
desc->tdtypmod = tupdesc->tdtypmod;
return desc;
}
示例2: BuildDescForRelation
/*
* BuildDescForRelation
*
* Given a relation schema (list of ColumnDef nodes), build a TupleDesc.
*
* Note: the default assumption is no OIDs; caller may modify the returned
* TupleDesc if it wants OIDs. Also, tdtypeid will need to be filled in
* later on.
*/
TupleDesc
BuildDescForRelation(List *schema)
{
int natts;
AttrNumber attnum;
ListCell *l;
TupleDesc desc;
TupleConstr *constr = (TupleConstr *) palloc0(sizeof(TupleConstr));
char *attname;
int32 atttypmod;
int attdim;
/*
* allocate a new tuple descriptor
*/
natts = list_length(schema);
desc = CreateTemplateTupleDesc(natts, false);
constr->has_not_null = false;
attnum = 0;
foreach(l, schema)
{
ColumnDef *entry = lfirst(l);
/*
* for each entry in the list, get the name and type information from
* the list and have TupleDescInitEntry fill in the attribute
* information we need.
*/
attnum++;
attname = entry->colname;
atttypmod = entry->typname->typmod;
attdim = list_length(entry->typname->arrayBounds);
if (entry->typname->setof)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
errmsg("column \"%s\" cannot be declared SETOF",
attname)));
TupleDescInitEntry(desc, attnum, attname,
typenameTypeId(NULL, entry->typname),
atttypmod, attdim);
/* Fill in additional stuff not handled by TupleDescInitEntry */
if (entry->is_not_null)
constr->has_not_null = true;
desc->attrs[attnum - 1]->attnotnull = entry->is_not_null;
desc->attrs[attnum - 1]->attislocal = entry->is_local;
desc->attrs[attnum - 1]->attinhcount = entry->inhcount;
}
示例3: pg_visibility_map_summary
/*
* Count the number of all-visible and all-frozen pages in the visibility
* map for a particular relation.
*/
Datum
pg_visibility_map_summary(PG_FUNCTION_ARGS)
{
Oid relid = PG_GETARG_OID(0);
Relation rel;
BlockNumber nblocks;
BlockNumber blkno;
Buffer vmbuffer = InvalidBuffer;
int64 all_visible = 0;
int64 all_frozen = 0;
TupleDesc tupdesc;
Datum values[2];
bool nulls[2];
rel = relation_open(relid, AccessShareLock);
/* Only some relkinds have a visibility map */
check_relation_relkind(rel);
nblocks = RelationGetNumberOfBlocks(rel);
for (blkno = 0; blkno < nblocks; ++blkno)
{
int32 mapbits;
/* Make sure we are interruptible. */
CHECK_FOR_INTERRUPTS();
/* Get map info. */
mapbits = (int32) visibilitymap_get_status(rel, blkno, &vmbuffer);
if ((mapbits & VISIBILITYMAP_ALL_VISIBLE) != 0)
++all_visible;
if ((mapbits & VISIBILITYMAP_ALL_FROZEN) != 0)
++all_frozen;
}
/* Clean up. */
if (vmbuffer != InvalidBuffer)
ReleaseBuffer(vmbuffer);
relation_close(rel, AccessShareLock);
tupdesc = CreateTemplateTupleDesc(2, false);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "all_visible", INT8OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "all_frozen", INT8OID, -1, 0);
tupdesc = BlessTupleDesc(tupdesc);
MemSet(nulls, 0, sizeof(nulls));
values[0] = Int64GetDatum(all_visible);
values[1] = Int64GetDatum(all_frozen);
PG_RETURN_DATUM(HeapTupleGetDatum(heap_form_tuple(tupdesc, values, nulls)));
}
示例4: pg_control_recovery
Datum
pg_control_recovery(PG_FUNCTION_ARGS)
{
Datum values[5];
bool nulls[5];
TupleDesc tupdesc;
HeapTuple htup;
ControlFileData *ControlFile;
bool crc_ok;
/*
* Construct a tuple descriptor for the result row. This must match this
* function's pg_proc entry!
*/
tupdesc = CreateTemplateTupleDesc(5);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "min_recovery_end_lsn",
LSNOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "min_recovery_end_timeline",
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "backup_start_lsn",
LSNOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 4, "backup_end_lsn",
LSNOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 5, "end_of_backup_record_required",
BOOLOID, -1, 0);
tupdesc = BlessTupleDesc(tupdesc);
/* read the control file */
ControlFile = get_controlfile(DataDir, NULL, &crc_ok);
if (!crc_ok)
ereport(ERROR,
(errmsg("calculated CRC checksum does not match value stored in file")));
values[0] = LSNGetDatum(ControlFile->minRecoveryPoint);
nulls[0] = false;
values[1] = Int32GetDatum(ControlFile->minRecoveryPointTLI);
nulls[1] = false;
values[2] = LSNGetDatum(ControlFile->backupStartPoint);
nulls[2] = false;
values[3] = LSNGetDatum(ControlFile->backupEndPoint);
nulls[3] = false;
values[4] = BoolGetDatum(ControlFile->backupEndRequired);
nulls[4] = false;
htup = heap_form_tuple(tupdesc, values, nulls);
PG_RETURN_DATUM(HeapTupleGetDatum(htup));
}
示例5: initGinState
void
initGinState(GinState *state, Relation index)
{
int i;
state->origTupdesc = index->rd_att;
state->oneCol = (index->rd_att->natts == 1) ? true : false;
for (i = 0; i < index->rd_att->natts; i++)
{
state->tupdesc[i] = CreateTemplateTupleDesc(2, false);
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 1, NULL,
INT2OID, -1, 0);
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 2, NULL,
index->rd_att->attrs[i]->atttypid,
index->rd_att->attrs[i]->atttypmod,
index->rd_att->attrs[i]->attndims
);
fmgr_info_copy(&(state->compareFn[i]),
index_getprocinfo(index, i + 1, GIN_COMPARE_PROC),
CurrentMemoryContext);
fmgr_info_copy(&(state->extractValueFn[i]),
index_getprocinfo(index, i + 1, GIN_EXTRACTVALUE_PROC),
CurrentMemoryContext);
fmgr_info_copy(&(state->extractQueryFn[i]),
index_getprocinfo(index, i + 1, GIN_EXTRACTQUERY_PROC),
CurrentMemoryContext);
fmgr_info_copy(&(state->consistentFn[i]),
index_getprocinfo(index, i + 1, GIN_CONSISTENT_PROC),
CurrentMemoryContext);
/*
* Check opclass capability to do partial match.
*/
if (index_getprocid(index, i + 1, GIN_COMPARE_PARTIAL_PROC) != InvalidOid)
{
fmgr_info_copy(&(state->comparePartialFn[i]),
index_getprocinfo(index, i + 1, GIN_COMPARE_PARTIAL_PROC),
CurrentMemoryContext);
state->canPartialMatch[i] = true;
}
else
{
state->canPartialMatch[i] = false;
}
}
}
示例6: pgstrom_debug_info
/*
* pgstrom_debug_info
*
* shows user's debug information
*/
Datum
pgstrom_debug_info(PG_FUNCTION_ARGS)
{
FuncCallContext *fncxt;
MemoryContext oldcxt;
ListCell *cell;
DefElem *defel;
Datum values[2];
bool isnull[2];
HeapTuple tuple;
if (SRF_IS_FIRSTCALL())
{
TupleDesc tupdesc;
List *debug_info_list = NIL;
fncxt = SRF_FIRSTCALL_INIT();
oldcxt = MemoryContextSwitchTo(fncxt->multi_call_memory_ctx);
tupdesc = CreateTemplateTupleDesc(2, false);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "key",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "value",
TEXTOID, -1, 0);
debug_info_list = pgstrom_scan_debug_info(debug_info_list);
fncxt->user_fctx = (void *) debug_info_list;
fncxt->tuple_desc = BlessTupleDesc(tupdesc);
MemoryContextSwitchTo(oldcxt);
}
fncxt = SRF_PERCALL_SETUP();
cell = list_head((List *)fncxt->user_fctx);
if (!cell)
SRF_RETURN_DONE(fncxt);
defel = lfirst(cell);
Assert(IsA(defel, DefElem));
memset(isnull, false, sizeof(isnull));
values[0] = CStringGetTextDatum(defel->defname);
values[1] = CStringGetTextDatum(strVal(defel->arg));
tuple = heap_form_tuple(fncxt->tuple_desc, values, isnull);
fncxt->user_fctx = list_delete_ptr((List *)fncxt->user_fctx,
lfirst(cell));
SRF_RETURN_NEXT(fncxt, HeapTupleGetDatum(tuple));
}
示例7: EmptyPyPgTupleDesc_Initialize
/*
* There should be only one.
*/
void
EmptyPyPgTupleDesc_Initialize(void)
{
PG_TRY();
{
TupleDesc td;
td = CreateTemplateTupleDesc(0, false);
EmptyPyPgTupleDesc = PyPgTupleDesc_FromCopy(td);
FreeTupleDesc(td);
}
PG_CATCH();
{
PyErr_SetPgError(true);
}
PG_END_TRY();
}
示例8: pg_control_system
Datum
pg_control_system(PG_FUNCTION_ARGS)
{
Datum values[4];
bool nulls[4];
TupleDesc tupdesc;
HeapTuple htup;
ControlFileData *ControlFile;
bool crc_ok;
/*
* Construct a tuple descriptor for the result row. This must match this
* function's pg_proc entry!
*/
tupdesc = CreateTemplateTupleDesc(4);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "pg_control_version",
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "catalog_version_no",
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "system_identifier",
INT8OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 4, "pg_control_last_modified",
TIMESTAMPTZOID, -1, 0);
tupdesc = BlessTupleDesc(tupdesc);
/* read the control file */
ControlFile = get_controlfile(DataDir, NULL, &crc_ok);
if (!crc_ok)
ereport(ERROR,
(errmsg("calculated CRC checksum does not match value stored in file")));
values[0] = Int32GetDatum(ControlFile->pg_control_version);
nulls[0] = false;
values[1] = Int32GetDatum(ControlFile->catalog_version_no);
nulls[1] = false;
values[2] = Int64GetDatum(ControlFile->system_identifier);
nulls[2] = false;
values[3] = TimestampTzGetDatum(time_t_to_timestamptz(ControlFile->time));
nulls[3] = false;
htup = heap_form_tuple(tupdesc, values, nulls);
PG_RETURN_DATUM(HeapTupleGetDatum(htup));
}
示例9: createInverseTupleDesc
/*
* createInverseTupleDesc
* Create a tuple descriptor for the record returned by gp_partition_inverse.
*
* The record has the following format:
* Oid: child partition oid
* typeOid: the date type for the low end of a range partition;
* the data type for the value in a list partition
* bool: whether to include the low end of a range partition;
* always true for a list partition
* typeOid: used by range partitions only;
* represents the data type for the high end of a range partition
* bool: used by range partitions only;
* represents whether to include the high end of a range partition.
*/
static TupleDesc
createInverseTupleDesc(Oid typeOid, int32 typeMod)
{
TupleDesc tupleDesc = CreateTemplateTupleDesc(PARTITION_INVERSE_RECORD_NUM_ATTRS, false);
TupleDescInitEntry(tupleDesc, (AttrNumber) PARTITION_INVERSE_RECORD_PARCHILDRELID_ATTNO,
"partchildrelid", OIDOID, -1, 0);
TupleDescInitEntry(tupleDesc, (AttrNumber) PARTITION_INVERSE_RECORD_MINKEY_ATTNO,
"minkey", typeOid, typeMod, 0);
TupleDescInitEntry(tupleDesc, (AttrNumber) PARTITION_INVERSE_RECORD_MININCLUDED_ATTNO,
"minincluded", BOOLOID, -1, 0);
TupleDescInitEntry(tupleDesc, (AttrNumber) PARTITION_INVERSE_RECORD_MAXKEY_ATTNO,
"maxkey", typeOid, typeMod, 0);
TupleDescInitEntry(tupleDesc, (AttrNumber) PARTITION_INVERSE_RECORD_MAXINCLUDED_ATTNO,
"maxincluded", BOOLOID, -1, 0);
return tupleDesc;
}
示例10: ts_setup_firstcall
static void
ts_setup_firstcall(FunctionCallInfo fcinfo, FuncCallContext *funcctx,
TSVectorStat *stat)
{
TupleDesc tupdesc;
MemoryContext oldcontext;
StatEntry *node;
funcctx->user_fctx = (void *) stat;
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
stat->stack = palloc0(sizeof(StatEntry *) * (stat->maxdepth + 1));
stat->stackpos = 0;
node = stat->root;
/* find leftmost value */
if (node == NULL)
stat->stack[stat->stackpos] = NULL;
else
for (;;)
{
stat->stack[stat->stackpos] = node;
if (node->left)
{
stat->stackpos++;
node = node->left;
}
else
break;
}
Assert(stat->stackpos <= stat->maxdepth);
tupdesc = CreateTemplateTupleDesc(3, false);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "word",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "ndoc",
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "nentry",
INT4OID, -1, 0);
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
funcctx->attinmeta = TupleDescGetAttInMetadata(tupdesc);
MemoryContextSwitchTo(oldcontext);
}
示例11: test__ReleaseTupleDesc__ref_count
void
test__ReleaseTupleDesc__ref_count(void **state)
{
TupleDesc td = CreateTemplateTupleDesc(2, true);
td->tdrefcount = 3;
expect_any(ResourceOwnerForgetTupleDesc, owner);
expect_value(ResourceOwnerForgetTupleDesc, tupdesc, td);
will_be_called(ResourceOwnerForgetTupleDesc);
/* should decrement refcount but not free */
ReleaseTupleDesc(td);
assert_int_equal(2, td->tdrefcount);
pfree(td);
}
示例12: GetErrorTupleDesc
/*
* Returns the fixed schema for error log tuple.
*/
static TupleDesc
GetErrorTupleDesc(void)
{
static TupleDesc tupdesc = NULL, tmp;
MemoryContext oldcontext;
int natts = NUM_ERRORTABLE_ATTR;
FormData_pg_attribute attrs[NUM_ERRORTABLE_ATTR] = {
{0,{"cmdtime"},1184,-1,8,1,0,-1,-1,true,'p','d',false,false,false,true,0},
{0,{"relname"},25,-1,-1,2,0,-1,-1,false,'x','i',false,false,false,true,0},
{0,{"filename"},25,-1,-1,3,0,-1,-1,false,'x','i',false,false,false,true,0},
{0,{"linenum"},23,-1,4,4,0,-1,-1,true,'p','i',false,false,false,true,0},
{0,{"bytenum"},23,-1,4,5,0,-1,-1,true,'p','i',false,false,false,true,0},
{0,{"errmsg"},25,-1,-1,6,0,-1,-1,false,'x','i',false,false,false,true,0},
{0,{"rawdata"},25,-1,-1,7,0,-1,-1,false,'x','i',false,false,false,true,0},
{0,{"rawbytes"},17,-1,-1,8,0,-1,-1,false,'x','i',false,false,false,true,0}
};
/* If we have created it, use it. */
if (tupdesc != NULL)
return tupdesc;
/*
* Keep the tupdesc for long in the cache context. It should never
* be scribbled.
*/
oldcontext = MemoryContextSwitchTo(CacheMemoryContext);
tmp = CreateTemplateTupleDesc(natts, false);
tmp->tdrefcount = 0;
tmp->tdtypeid = RECORDOID;
tmp->tdtypmod = -1;
for (int i = 0; i < natts; i++)
{
memcpy(tmp->attrs[i], &attrs[i], ATTRIBUTE_FIXED_PART_SIZE);
tmp->attrs[i]->attcacheoff = -1;
}
tmp->attrs[0]->attcacheoff = 0;
tupdesc = tmp;
MemoryContextSwitchTo(oldcontext);
return tupdesc;
}
示例13: testfunc5
Datum
testfunc5(PG_FUNCTION_ARGS)
{
int64 i = PG_GETARG_INT64(0);
FuncCallContext *funcctx;
MemoryContext oldcontext;
if (SRF_IS_FIRSTCALL())
{
TupleDesc tupd;
funcctx = SRF_FIRSTCALL_INIT();
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
tupd = CreateTemplateTupleDesc(2, false);
TupleDescInitEntry(tupd, 1, "c1", INT8OID, -1, 0);
TupleDescInitEntry(tupd, 2, "c2", INT8OID, -1, 0);
funcctx->max_calls = 3;
funcctx->user_fctx = tupd;
MemoryContextSwitchTo(oldcontext);
}
funcctx = SRF_PERCALL_SETUP();
if (funcctx->call_cntr < funcctx->max_calls)
{
TupleDesc tupd;
HeapTupleData tupleData;
HeapTuple tuple = &tupleData;
char *values[2];
Datum result;
tupd = (TupleDesc)funcctx->user_fctx;
values[0] = palloc(32);
sprintf(values[0], INT64_FORMAT, i+1+funcctx->call_cntr);
values[1] = palloc(32);
sprintf(values[1], INT64_FORMAT, i+2+funcctx->call_cntr);
tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupd), values);
result = TupleGetDatum(TupleDescGetSlot(tuple), tuple);
SRF_RETURN_NEXT(funcctx, result);
}
else
{
SRF_RETURN_DONE(funcctx);
}
}
示例14: CreateTupleDescCopyExtend
/*
* CreateTupleDescCopyExtend
* This function creates a new TupleDesc by copying from an existing
* TupleDesc, but adding space for more columns. The new tupdesc is
* not regarded as the same record type as the old one (and therefore
* does not inherit its typeid/typmod, which instead are left as an
* anonymous record type).
*
* The additional column slots are not initialized in any way;
* callers must do their own TupleDescInitEntry on each.
*
* !!! Constraints and defaults are not copied !!!
*/
TupleDesc
CreateTupleDescCopyExtend(TupleDesc tupdesc, int moreatts)
{
TupleDesc desc;
int i;
int src_natts = tupdesc->natts;
Assert(moreatts >= 0);
desc = CreateTemplateTupleDesc(src_natts + moreatts, tupdesc->tdhasoid);
for (i = 0; i < src_natts; i++)
{
memcpy(desc->attrs[i], tupdesc->attrs[i], ATTRIBUTE_FIXED_PART_SIZE);
desc->attrs[i]->attnotnull = false;
desc->attrs[i]->atthasdef = false;
}
return desc;
}
示例15: CreateTupleDescCopy
/*
* CreateTupleDescCopy
* This function creates a new TupleDesc by copying from an existing
* TupleDesc.
*
* !!! Constraints and defaults are not copied !!!
*/
TupleDesc
CreateTupleDescCopy(TupleDesc tupdesc)
{
TupleDesc desc;
int i;
desc = CreateTemplateTupleDesc(tupdesc->natts, tupdesc->tdhasoid);
for (i = 0; i < desc->natts; i++)
{
memcpy(desc->attrs[i], tupdesc->attrs[i], ATTRIBUTE_FIXED_PART_SIZE);
desc->attrs[i]->attnotnull = false;
desc->attrs[i]->atthasdef = false;
}
desc->tdtypeid = tupdesc->tdtypeid;
desc->tdtypmod = tupdesc->tdtypmod;
return desc;
}