本文整理汇总了C++中Int16GetDatum函数的典型用法代码示例。如果您正苦于以下问题:C++ Int16GetDatum函数的具体用法?C++ Int16GetDatum怎么用?C++ Int16GetDatum使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Int16GetDatum函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pg_lock_status
//.........这里部分代码省略.........
(int) lock->tag.locktag_type);
locktypename = tnbuf;
}
values[0] = CStringGetTextDatum(locktypename);
switch (lock->tag.locktag_type)
{
case LOCKTAG_RELATION:
case LOCKTAG_RELATION_EXTEND:
case LOCKTAG_RELATION_RESYNCHRONIZE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_PAGE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[3] = UInt32GetDatum(lock->tag.locktag_field3);
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_TUPLE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[3] = UInt32GetDatum(lock->tag.locktag_field3);
values[4] = UInt16GetDatum(lock->tag.locktag_field4);
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_TRANSACTION:
values[5] = TransactionIdGetDatum(lock->tag.locktag_field1);
nulls[1] = true;
nulls[2] = true;
nulls[3] = true;
nulls[4] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_RELATION_APPENDONLY_SEGMENT_FILE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[7] = ObjectIdGetDatum(lock->tag.locktag_field3);
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[8] = true;
break;
case LOCKTAG_RESOURCE_QUEUE:
values[1] = ObjectIdGetDatum(proc->databaseId);
values[7] = ObjectIdGetDatum(lock->tag.locktag_field1);
nulls[2] = true;
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
示例2: TypeCreate
//.........这里部分代码省略.........
errmsg("alignment \"%c\" is invalid for variable-length type",
alignment)));
/* cstring must have char alignment */
if (internalSize == -2 && !(alignment == 'c'))
ereport(ERROR,
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
errmsg("alignment \"%c\" is invalid for variable-length type",
alignment)));
}
/* Only varlena types can be toasted */
if (storage != 'p' && internalSize != -1)
ereport(ERROR,
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
errmsg("fixed-size types must have storage PLAIN")));
/*
* initialize arrays needed for heap_form_tuple or heap_modify_tuple
*/
for (i = 0; i < Natts_pg_type; ++i)
{
nulls[i] = false;
replaces[i] = true;
values[i] = (Datum) 0;
}
/*
* insert data values
*/
namestrcpy(&name, typeName);
values[Anum_pg_type_typname - 1] = NameGetDatum(&name);
values[Anum_pg_type_typnamespace - 1] = ObjectIdGetDatum(typeNamespace);
values[Anum_pg_type_typowner - 1] = ObjectIdGetDatum(ownerId);
values[Anum_pg_type_typlen - 1] = Int16GetDatum(internalSize);
values[Anum_pg_type_typbyval - 1] = BoolGetDatum(passedByValue);
values[Anum_pg_type_typtype - 1] = CharGetDatum(typeType);
values[Anum_pg_type_typcategory - 1] = CharGetDatum(typeCategory);
values[Anum_pg_type_typispreferred - 1] = BoolGetDatum(typePreferred);
values[Anum_pg_type_typisdefined - 1] = BoolGetDatum(true);
values[Anum_pg_type_typdelim - 1] = CharGetDatum(typDelim);
values[Anum_pg_type_typrelid - 1] = ObjectIdGetDatum(relationOid);
values[Anum_pg_type_typelem - 1] = ObjectIdGetDatum(elementType);
values[Anum_pg_type_typarray - 1] = ObjectIdGetDatum(arrayType);
values[Anum_pg_type_typinput - 1] = ObjectIdGetDatum(inputProcedure);
values[Anum_pg_type_typoutput - 1] = ObjectIdGetDatum(outputProcedure);
values[Anum_pg_type_typreceive - 1] = ObjectIdGetDatum(receiveProcedure);
values[Anum_pg_type_typsend - 1] = ObjectIdGetDatum(sendProcedure);
values[Anum_pg_type_typmodin - 1] = ObjectIdGetDatum(typmodinProcedure);
values[Anum_pg_type_typmodout - 1] = ObjectIdGetDatum(typmodoutProcedure);
values[Anum_pg_type_typanalyze - 1] = ObjectIdGetDatum(analyzeProcedure);
values[Anum_pg_type_typalign - 1] = CharGetDatum(alignment);
values[Anum_pg_type_typstorage - 1] = CharGetDatum(storage);
values[Anum_pg_type_typnotnull - 1] = BoolGetDatum(typeNotNull);
values[Anum_pg_type_typbasetype - 1] = ObjectIdGetDatum(baseType);
values[Anum_pg_type_typtypmod - 1] = Int32GetDatum(typeMod);
values[Anum_pg_type_typndims - 1] = Int32GetDatum(typNDims);
values[Anum_pg_type_typcollation - 1] = ObjectIdGetDatum(typeCollation);
/*
* initialize the default binary value for this type. Check for nulls of
* course.
*/
if (defaultTypeBin)
values[Anum_pg_type_typdefaultbin - 1] = CStringGetTextDatum(defaultTypeBin);
else
nulls[Anum_pg_type_typdefaultbin - 1] = true;
示例3: gist_point_consistent
Datum
gist_point_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool result;
bool *recheck = (bool *) PG_GETARG_POINTER(4);
StrategyNumber strategyGroup = strategy / GeoStrategyNumberOffset;
switch (strategyGroup)
{
case PointStrategyNumberGroup:
result = gist_point_consistent_internal(strategy % GeoStrategyNumberOffset,
GIST_LEAF(entry),
DatumGetBoxP(entry->key),
PG_GETARG_POINT_P(1));
*recheck = false;
break;
case BoxStrategyNumberGroup:
result = DatumGetBool(DirectFunctionCall5(
gist_box_consistent,
PointerGetDatum(entry),
PG_GETARG_DATUM(1),
Int16GetDatum(RTOverlapStrategyNumber),
0, PointerGetDatum(recheck)));
break;
case PolygonStrategyNumberGroup:
{
POLYGON *query = PG_GETARG_POLYGON_P(1);
result = DatumGetBool(DirectFunctionCall5(
gist_poly_consistent,
PointerGetDatum(entry),
PolygonPGetDatum(query),
Int16GetDatum(RTOverlapStrategyNumber),
0, PointerGetDatum(recheck)));
if (GIST_LEAF(entry) && result)
{
/*
* We are on leaf page and quick check shows overlapping
* of polygon's bounding box and point
*/
BOX *box = DatumGetBoxP(entry->key);
Assert(box->high.x == box->low.x
&& box->high.y == box->low.y);
result = DatumGetBool(DirectFunctionCall2(
poly_contain_pt,
PolygonPGetDatum(query),
PointPGetDatum(&box->high)));
*recheck = false;
}
}
break;
case CircleStrategyNumberGroup:
{
CIRCLE *query = PG_GETARG_CIRCLE_P(1);
result = DatumGetBool(DirectFunctionCall5(
gist_circle_consistent,
PointerGetDatum(entry),
CirclePGetDatum(query),
Int16GetDatum(RTOverlapStrategyNumber),
0, PointerGetDatum(recheck)));
if (GIST_LEAF(entry) && result)
{
/*
* We are on leaf page and quick check shows overlapping
* of polygon's bounding box and point
*/
BOX *box = DatumGetBoxP(entry->key);
Assert(box->high.x == box->low.x
&& box->high.y == box->low.y);
result = DatumGetBool(DirectFunctionCall2(
circle_contain_pt,
CirclePGetDatum(query),
PointPGetDatum(&box->high)));
*recheck = false;
}
}
break;
default:
result = false; /* silence compiler warning */
elog(ERROR, "unknown strategy number: %d", strategy);
}
PG_RETURN_BOOL(result);
}
示例4: CreateConstraintEntry
/*
* CreateConstraintEntry
* Create a constraint table entry.
*
* Subsidiary records (such as triggers or indexes to implement the
* constraint) are *not* created here. But we do make dependency links
* from the constraint to the things it depends on.
*
* The new constraint's OID is returned.
*/
Oid
CreateConstraintEntry(const char *constraintName,
Oid constraintNamespace,
char constraintType,
bool isDeferrable,
bool isDeferred,
bool isValidated,
Oid relId,
const int16 *constraintKey,
int constraintNKeys,
Oid domainId,
Oid indexRelId,
Oid foreignRelId,
const int16 *foreignKey,
const Oid *pfEqOp,
const Oid *ppEqOp,
const Oid *ffEqOp,
int foreignNKeys,
char foreignUpdateType,
char foreignDeleteType,
char foreignMatchType,
const Oid *exclOp,
Node *conExpr,
const char *conBin,
const char *conSrc,
bool conIsLocal,
int conInhCount,
bool conNoInherit,
bool is_internal)
{
Relation conDesc;
Oid conOid;
HeapTuple tup;
bool nulls[Natts_pg_constraint];
Datum values[Natts_pg_constraint];
ArrayType *conkeyArray;
ArrayType *confkeyArray;
ArrayType *conpfeqopArray;
ArrayType *conppeqopArray;
ArrayType *conffeqopArray;
ArrayType *conexclopArray;
NameData cname;
int i;
ObjectAddress conobject;
conDesc = heap_open(ConstraintRelationId, RowExclusiveLock);
Assert(constraintName);
namestrcpy(&cname, constraintName);
/*
* Convert C arrays into Postgres arrays.
*/
if (constraintNKeys > 0)
{
Datum *conkey;
conkey = (Datum *) palloc(constraintNKeys * sizeof(Datum));
for (i = 0; i < constraintNKeys; i++)
conkey[i] = Int16GetDatum(constraintKey[i]);
conkeyArray = construct_array(conkey, constraintNKeys,
INT2OID, 2, true, 's');
}
else
conkeyArray = NULL;
if (foreignNKeys > 0)
{
Datum *fkdatums;
fkdatums = (Datum *) palloc(foreignNKeys * sizeof(Datum));
for (i = 0; i < foreignNKeys; i++)
fkdatums[i] = Int16GetDatum(foreignKey[i]);
confkeyArray = construct_array(fkdatums, foreignNKeys,
INT2OID, 2, true, 's');
for (i = 0; i < foreignNKeys; i++)
fkdatums[i] = ObjectIdGetDatum(pfEqOp[i]);
conpfeqopArray = construct_array(fkdatums, foreignNKeys,
OIDOID, sizeof(Oid), true, 'i');
for (i = 0; i < foreignNKeys; i++)
fkdatums[i] = ObjectIdGetDatum(ppEqOp[i]);
conppeqopArray = construct_array(fkdatums, foreignNKeys,
OIDOID, sizeof(Oid), true, 'i');
for (i = 0; i < foreignNKeys; i++)
fkdatums[i] = ObjectIdGetDatum(ffEqOp[i]);
conffeqopArray = construct_array(fkdatums, foreignNKeys,
OIDOID, sizeof(Oid), true, 'i');
}
else
{
//.........这里部分代码省略.........
示例5: pg_lock_status
//.........这里部分代码省略.........
(int) lock->tag.locktag_type);
locktypename = tnbuf;
}
values[0] = CStringGetTextDatum(locktypename);
switch (lock->tag.locktag_type)
{
case LOCKTAG_RELATION:
case LOCKTAG_RELATION_EXTEND:
case LOCKTAG_RELATION_RESYNCHRONIZE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_PAGE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[3] = UInt32GetDatum(lock->tag.locktag_field3);
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_TUPLE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[3] = UInt32GetDatum(lock->tag.locktag_field3);
values[4] = UInt16GetDatum(lock->tag.locktag_field4);
nulls[5] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_TRANSACTION:
values[5] = TransactionIdGetDatum(lock->tag.locktag_field1);
nulls[1] = true;
nulls[2] = true;
nulls[3] = true;
nulls[4] = true;
nulls[6] = true;
nulls[7] = true;
nulls[8] = true;
break;
case LOCKTAG_RELATION_APPENDONLY_SEGMENT_FILE:
values[1] = ObjectIdGetDatum(lock->tag.locktag_field1);
values[2] = ObjectIdGetDatum(lock->tag.locktag_field2);
values[7] = ObjectIdGetDatum(lock->tag.locktag_field3);
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
nulls[6] = true;
nulls[8] = true;
break;
case LOCKTAG_RESOURCE_QUEUE:
values[1] = ObjectIdGetDatum(proc->databaseId);
values[7] = ObjectIdGetDatum(lock->tag.locktag_field1);
nulls[2] = true;
nulls[3] = true;
nulls[4] = true;
nulls[5] = true;
示例6: InsertRule
/*
* InsertRule -
* takes the arguments and inserts them as a row into the system
* relation "pg_rewrite"
*/
static Oid
InsertRule(char *rulname,
int evtype,
Oid eventrel_oid,
AttrNumber evslot_index,
bool evinstead,
Node *event_qual,
List *action,
bool replace,
Oid ruleOid)
{
char *evqual = nodeToString(event_qual);
char *actiontree = nodeToString((Node *) action);
int i;
Datum values[Natts_pg_rewrite];
bool nulls[Natts_pg_rewrite];
bool replaces[Natts_pg_rewrite];
NameData rname;
HeapTuple tup,
oldtup;
Oid rewriteObjectId;
ObjectAddress myself,
referenced;
bool is_update = false;
cqContext *pcqCtx;
/*
* Set up *nulls and *values arrays
*/
MemSet(nulls, false, sizeof(nulls));
i = 0;
namestrcpy(&rname, rulname);
values[i++] = NameGetDatum(&rname); /* rulename */
values[i++] = ObjectIdGetDatum(eventrel_oid); /* ev_class */
values[i++] = Int16GetDatum(evslot_index); /* ev_attr */
values[i++] = CharGetDatum(evtype + '0'); /* ev_type */
values[i++] = BoolGetDatum(evinstead); /* is_instead */
values[i++] = CStringGetTextDatum(evqual); /* ev_qual */
values[i++] = CStringGetTextDatum(actiontree); /* ev_action */
/*
* Ready to store new pg_rewrite tuple
*/
/*
* Check to see if we are replacing an existing tuple
*/
pcqCtx = caql_beginscan(
NULL,
cql("SELECT * FROM pg_rewrite "
" WHERE ev_class = :1 "
" AND rulename = :2 "
" FOR UPDATE ",
ObjectIdGetDatum(eventrel_oid),
CStringGetDatum(rulname)));
oldtup = caql_getnext(pcqCtx);
if (HeapTupleIsValid(oldtup))
{
if (!replace)
ereport(ERROR,
(errcode(ERRCODE_DUPLICATE_OBJECT),
errmsg("rule \"%s\" for relation \"%s\" already exists",
rulname, get_rel_name(eventrel_oid))));
/*
* When replacing, we don't need to replace every attribute
*/
MemSet(replaces, false, sizeof(replaces));
replaces[Anum_pg_rewrite_ev_attr - 1] = true;
replaces[Anum_pg_rewrite_ev_type - 1] = true;
replaces[Anum_pg_rewrite_is_instead - 1] = true;
replaces[Anum_pg_rewrite_ev_qual - 1] = true;
replaces[Anum_pg_rewrite_ev_action - 1] = true;
tup = caql_modify_current(pcqCtx,
values, nulls, replaces);
caql_update_current(pcqCtx, tup);
/* and Update indexes (implicit) */
rewriteObjectId = HeapTupleGetOid(tup);
is_update = true;
}
else
{
tup = caql_form_tuple(pcqCtx, values, nulls);
if (OidIsValid(ruleOid))
HeapTupleSetOid(tup, ruleOid);
rewriteObjectId = caql_insert(pcqCtx, tup);
/* and Update indexes (implicit) */
//.........这里部分代码省略.........
示例7: AlterResqueueCapabilityEntry
/* MPP-6923: */
static
List *
AlterResqueueCapabilityEntry(
List *stmtOptIdList,
Oid queueid,
ListCell *initcell,
bool bCreate)
{
ListCell *lc;
List *elems = NIL;
List *dropelems = NIL;
List *dupcheck = NIL;
HeapTuple tuple;
cqContext *pcqCtx;
cqContext cqc;
Relation rel = NULL;
bool bWithout = false;
TupleDesc tupdesc = NULL;
#ifdef USE_ASSERT_CHECKING
{
DefElem *defel = (DefElem *) lfirst(initcell);
Assert(0 == strcmp(defel->defname, "withliststart"));
}
#endif
initcell = lnext(initcell);
/* walk the original list and build a list of valid entries */
for_each_cell(lc, initcell)
{
DefElem *defel = (DefElem *) lfirst(lc);
Oid resTypeOid = InvalidOid;
int resTypeInt = 0;
List *pentry = NIL;
Value *pKeyVal = NULL;
Value *pStrVal = NULL;
if (!bWithout && (strcmp(defel->defname, "withoutliststart") == 0))
{
bWithout = true;
rel = heap_open(ResourceTypeRelationId, RowExclusiveLock);
tupdesc = RelationGetDescr(rel);
goto L_loop_cont;
}
/* ignore the basic threshold entries -- should already be processed */
if (strcmp(defel->defname, "active_statements") == 0)
goto L_loop_cont;
if (strcmp(defel->defname, "max_cost") == 0)
goto L_loop_cont;
if (strcmp(defel->defname, "cost_overcommit") == 0)
goto L_loop_cont;
if (strcmp(defel->defname, "min_cost") == 0)
goto L_loop_cont;
if (!GetResourceTypeByName(defel->defname, &resTypeInt, &resTypeOid))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("option \"%s\" is not a valid resource type",
defel->defname)));
pKeyVal = makeString(defel->defname);
/* WITHOUT clause value determined in pg_resourcetype */
if (!bWithout)
pStrVal = makeString(defGetString(defel));
else
{
pStrVal = NULL; /* if NULL, delete entry from
* pg_resqueuecapability
*/
pcqCtx = caql_beginscan(
caql_addrel(cqclr(&cqc), rel),
cql("SELECT * FROM pg_resourcetype"
" WHERE restypid = :1 FOR UPDATE",
Int16GetDatum(resTypeInt)));
while (HeapTupleIsValid(tuple = caql_getnext(pcqCtx)))
{
text *shutoff_text = NULL;
char *shutoff_str = NULL;
Datum shutoff_datum;
bool isnull = false;
Form_pg_resourcetype rtyp =
(Form_pg_resourcetype)GETSTRUCT(tuple);
if (!rtyp->reshasdisable)
{
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("option \"%s\" cannot be disabled",
defel->defname)));
}
//.........这里部分代码省略.........
示例8: test__caql_switch7
/*
* This tests operators and orderby
*/
void
test__caql_switch7(void **state)
{
const char *query = "SELECT * FROM pg_class "
"WHERE oid < :1 AND relnatts > :2 AND "
"relfilenode <= :3 AND relpages >= :4 "
"ORDER BY oid, relnatts, relfilenode";
struct caql_hash_cookie *hash_cookie;
cqContext context = {0}, *pCtx;
Datum keys[] = {ObjectIdGetDatum(10000),
Int16GetDatum(10),
ObjectIdGetDatum(10000),
Int32GetDatum(5)};
cq_list *pcql = CaQL(query, 1, keys);
RelationData dummyrel;
SysScanDescData dummydesc;
dummyrel.rd_id = RelationRelationId;
hash_cookie = cq_lookup(query, strlen(query), pcql);
pCtx = caql_snapshot(cqclr(&context), SnapshotDirty);
/* setup heap_open */
expect__heap_open(RelationRelationId, true,
AccessShareLock, true,
&dummyrel);
/* setup ScanKeyInit */
expect__ScanKeyInit(NULL, false,
ObjectIdAttributeNumber, true,
BTLessStrategyNumber, true,
F_OIDLT, true,
NULL, false);
expect__ScanKeyInit(NULL, false,
Anum_pg_class_relnatts, true,
BTGreaterStrategyNumber, true,
F_INT2GT, true,
NULL, false);
expect__ScanKeyInit(NULL, false,
Anum_pg_class_relfilenode, true,
BTLessEqualStrategyNumber, true,
F_OIDLE, true,
NULL, false);
expect__ScanKeyInit(NULL, false,
Anum_pg_class_relpages, true,
BTGreaterEqualStrategyNumber, true,
F_INT4GE, true,
NULL, false);
/* setup systable_beginscan */
expect__systable_beginscan(&dummyrel, true,
InvalidOid, false,
false, true,
SnapshotDirty, true,
4, true,
NULL, false,
&dummydesc);
pCtx = caql_switch(hash_cookie, pCtx, pcql);
assert_true(pCtx != NULL);
assert_true(!pCtx->cq_usesyscache);
assert_true(pCtx->cq_heap_rel->rd_id == RelationRelationId);
assert_true(!pCtx->cq_useidxOK);
}
示例9: get_attribute_options
/*
* get_attribute_options
* Fetch attribute options for a specified table OID.
*/
AttributeOpts *
get_attribute_options(Oid attrelid, int attnum)
{
AttoptCacheKey key;
AttoptCacheEntry *attopt;
AttributeOpts *result;
HeapTuple tp;
/* Find existing cache entry, if any. */
if (!AttoptCacheHash)
InitializeAttoptCache();
memset(&key, 0, sizeof(key)); /* make sure any padding bits are
* unset */
key.attrelid = attrelid;
key.attnum = attnum;
attopt =
(AttoptCacheEntry *) hash_search(AttoptCacheHash,
(void *) &key,
HASH_FIND,
NULL);
/* Not found in Attopt cache. Construct new cache entry. */
if (!attopt)
{
AttributeOpts *opts;
tp = SearchSysCache2(ATTNUM,
ObjectIdGetDatum(attrelid),
Int16GetDatum(attnum));
/*
* If we don't find a valid HeapTuple, it must mean someone has
* managed to request attribute details for a non-existent attribute.
* We treat that case as if no options were specified.
*/
if (!HeapTupleIsValid(tp))
opts = NULL;
else
{
Datum datum;
bool isNull;
datum = SysCacheGetAttr(ATTNUM,
tp,
Anum_pg_attribute_attoptions,
&isNull);
if (isNull)
opts = NULL;
else
{
bytea *bytea_opts = attribute_reloptions(datum, false);
opts = MemoryContextAlloc(CacheMemoryContext,
VARSIZE(bytea_opts));
memcpy(opts, bytea_opts, VARSIZE(bytea_opts));
}
ReleaseSysCache(tp);
}
/*
* It's important to create the actual cache entry only after reading
* pg_attribute, since the read could cause a cache flush.
*/
attopt = (AttoptCacheEntry *) hash_search(AttoptCacheHash,
(void *) &key,
HASH_ENTER,
NULL);
attopt->opts = opts;
}
/* Return results in caller's memory context. */
if (attopt->opts == NULL)
return NULL;
result = palloc(VARSIZE(attopt->opts));
memcpy(result, attopt->opts, VARSIZE(attopt->opts));
return result;
}
示例10: GpPersistentRelationNode_SetDatumValues
void GpPersistentRelationNode_SetDatumValues(
Datum *values,
Oid tablespaceOid,
Oid databaseOid,
Oid relfilenodeOid,
int32 segmentFileNum,
PersistentFileSysRelStorageMgr relationStorageManager,
PersistentFileSysState persistentState,
int64 createMirrorDataLossTrackingSessionNum,
MirroredObjectExistenceState mirrorExistenceState,
MirroredRelDataSynchronizationState mirrorDataSynchronizationState,
bool mirrorBufpoolMarkedForScanIncrementalResync,
int64 mirrorBufpoolResyncChangedPageCount,
XLogRecPtr *mirrorBufpoolResyncCkptLoc,
BlockNumber mirrorBufpoolResyncCkptBlockNum,
int64 mirrorAppendOnlyLossEof,
int64 mirrorAppendOnlyNewEof,
PersistentFileSysRelBufpoolKind relBufpoolKind,
TransactionId parentXid,
int64 persistentSerialNum)
{
if (persistentState != PersistentFileSysState_Free && !PersistentFileSysRelStorageMgr_IsValid(relationStorageManager))
elog(ERROR, "Invalid value for relation storage manager (%d)",
relationStorageManager);
values[Anum_gp_persistent_relation_node_tablespace_oid - 1] =
ObjectIdGetDatum(tablespaceOid);
values[Anum_gp_persistent_relation_node_database_oid - 1] =
ObjectIdGetDatum(databaseOid);
values[Anum_gp_persistent_relation_node_relfilenode_oid - 1] =
ObjectIdGetDatum(relfilenodeOid);
values[Anum_gp_persistent_relation_node_segment_file_num - 1] =
Int32GetDatum(segmentFileNum);
values[Anum_gp_persistent_relation_node_relation_storage_manager - 1] =
Int16GetDatum(relationStorageManager);
values[Anum_gp_persistent_relation_node_persistent_state - 1] =
Int16GetDatum(persistentState);
values[Anum_gp_persistent_relation_node_create_mirror_data_loss_tracking_session_num - 1] =
Int64GetDatum(createMirrorDataLossTrackingSessionNum);
values[Anum_gp_persistent_relation_node_mirror_existence_state - 1] =
Int16GetDatum(mirrorExistenceState);
values[Anum_gp_persistent_relation_node_mirror_data_synchronization_state - 1] =
Int16GetDatum(mirrorDataSynchronizationState);
values[Anum_gp_persistent_relation_node_mirror_bufpool_marked_for_scan_incremental_resync - 1] =
BoolGetDatum(mirrorBufpoolMarkedForScanIncrementalResync);
values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_changed_page_count - 1] =
Int64GetDatum(mirrorBufpoolResyncChangedPageCount);
values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_ckpt_loc - 1] =
PointerGetDatum(mirrorBufpoolResyncCkptLoc);
values[Anum_gp_persistent_relation_node_mirror_bufpool_resync_ckpt_block_num - 1] =
Int32GetDatum(mirrorBufpoolResyncCkptBlockNum);
values[Anum_gp_persistent_relation_node_mirror_append_only_loss_eof - 1] =
Int64GetDatum(mirrorAppendOnlyLossEof);
values[Anum_gp_persistent_relation_node_mirror_append_only_new_eof - 1] =
Int64GetDatum(mirrorAppendOnlyNewEof);
values[Anum_gp_persistent_relation_node_relation_bufpool_kind - 1] =
Int32GetDatum((int32)relBufpoolKind);
values[Anum_gp_persistent_relation_node_parent_xid - 1] =
Int32GetDatum(parentXid);
values[Anum_gp_persistent_relation_node_persistent_serial_num - 1] =
Int64GetDatum(persistentSerialNum);
}
示例11: GpPersistentFilespaceNode_SetDatumValues
void GpPersistentFilespaceNode_SetDatumValues(
Datum *values,
Oid filespaceOid,
int16 dbId1,
char locationBlankPadded1[FilespaceLocationBlankPaddedWithNullTermLen],
int16 dbId2,
char locationBlankPadded2[FilespaceLocationBlankPaddedWithNullTermLen],
PersistentFileSysState persistentState,
int64 createMirrorDataLossTrackingSessionNum,
MirroredObjectExistenceState mirrorExistenceState,
int32 reserved,
TransactionId parentXid,
int64 persistentSerialNum)
{
int locationLen;
locationLen = strlen(locationBlankPadded1);
if (locationLen != FilespaceLocationBlankPaddedWithNullTermLen - 1)
elog(ERROR, "Expected filespace location 1 to be %d characters and found %d",
FilespaceLocationBlankPaddedWithNullTermLen - 1,
locationLen);
locationLen = strlen(locationBlankPadded2);
if (locationLen != FilespaceLocationBlankPaddedWithNullTermLen - 1)
elog(ERROR, "Expected filespace location 2 to be %d characters and found %d",
FilespaceLocationBlankPaddedWithNullTermLen - 1,
locationLen);
values[Anum_gp_persistent_filespace_node_filespace_oid - 1] =
ObjectIdGetDatum(filespaceOid);
values[Anum_gp_persistent_filespace_node_db_id_1 - 1] =
Int16GetDatum(dbId1);
values[Anum_gp_persistent_filespace_node_location_1 - 1] =
CStringGetTextDatum(locationBlankPadded1);
values[Anum_gp_persistent_filespace_node_db_id_2 - 1] =
Int16GetDatum(dbId2);
values[Anum_gp_persistent_filespace_node_location_2 - 1] =
CStringGetTextDatum(locationBlankPadded2);
values[Anum_gp_persistent_filespace_node_persistent_state - 1] =
Int16GetDatum(persistentState);
values[Anum_gp_persistent_filespace_node_create_mirror_data_loss_tracking_session_num - 1] =
Int64GetDatum(createMirrorDataLossTrackingSessionNum);
values[Anum_gp_persistent_filespace_node_mirror_existence_state - 1] =
Int16GetDatum(mirrorExistenceState);
values[Anum_gp_persistent_filespace_node_reserved - 1] =
Int32GetDatum(reserved);
values[Anum_gp_persistent_filespace_node_parent_xid - 1] =
Int32GetDatum(parentXid);
values[Anum_gp_persistent_filespace_node_persistent_serial_num - 1] =
Int64GetDatum(persistentSerialNum);
}
示例12: BuildModelInfoTupleTableSlot
TupleTableSlot* BuildModelInfoTupleTableSlot(ModelInfo *modelInfo){
TupleTableSlot *resultSlot;
HeapTuple tuple;
TupleDesc tdesc;
Datum *values;
bool *isNull;
Form_pg_attribute *attrs;
// open the relation pg_model to lend the TupleDescriptor from it
Relation rel = heap_open(ModelRelationId, 0);
// we have to copy the lent TupleDesc, otherwise the relation pg_model won't talk to us later
tdesc = CreateTupleDescCopy(rel->rd_att);
/*hsdesc = heap_beginscan(rel, SnapshotNow, 0, NULL);
tuple = heap_getnext(hsdesc, ForwardScanDirection);
resultSlot = MakeSingleTupleTableSlot(tdesc);*/
attrs = palloc(sizeof(FormData_pg_attribute)*7);
attrs[0] = tdesc->attrs[0]; //name
attrs[1] = tdesc->attrs[4]; //algorithm
attrs[2] = tdesc->attrs[2]; //time
attrs[3] = tdesc->attrs[3]; //measure
attrs[4] = tdesc->attrs[6]; //aggtype
attrs[5] = tdesc->attrs[5]; //granularity
attrs[6] = tdesc->attrs[9]; //timestamp
tdesc = CreateTupleDesc(7, false, attrs);
resultSlot = MakeSingleTupleTableSlot(tdesc);
values = (Datum *)palloc(sizeof(Datum)*7);
isNull = (bool *)palloc0(sizeof(bool)*7);
if(modelInfo->modelName){
values[0] = PointerGetDatum(modelInfo->modelName);
}else{
// if a model is not stored, it has no name
isNull[0] = true;
}
values[1] = PointerGetDatum(getModelTypeAsString((ModelType)(modelInfo->forecastMethod)));
isNull[1] = false;
values[2] = Int16GetDatum(modelInfo->time->resorigcol);
isNull[2] = false;
values[3] = Int16GetDatum(modelInfo->measure->resorigcol);
isNull[3] = false;
values[4] = ObjectIdGetDatum(modelInfo->aggType);
isNull[4] = false;
values[5] = Int16GetDatum(modelInfo->granularity);
isNull[5] = false;
values[6] = Int32GetDatum(modelInfo->timestamp);
isNull[6] = false;
tuple = heap_form_tuple(tdesc, values, isNull);
if(tuple){
ExecStoreTuple(tuple, resultSlot, InvalidBuffer, false);
}
// if(hsdesc){
// heap_endscan(hsdesc);
// }
heap_close(rel, 0);
return resultSlot;
}
示例13: gp_build_logical_index_info
Datum
gp_build_logical_index_info(PG_FUNCTION_ARGS)
{
Oid relid = PG_GETARG_OID(0);
FuncCallContext *funcctx;
MemoryContext oldcontext;
TupleDesc tupdesc;
HeapTuple tuple;
bool nulls[NUM_COLS];
LogicalIndexes *partsLI;
if (SRF_IS_FIRSTCALL())
{
/* create a function context */
funcctx = SRF_FIRSTCALL_INIT();
/* switch memory context for multiple function calls */
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* build tupdesc for result tuples */
tupdesc = CreateTemplateTupleDesc(NUM_COLS, false);
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "logicalIndexId",
OIDOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "nColumns",
INT2OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "indexKeys",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 4, "indIsUnique",
BOOLOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 5, "indPred",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 6, "indExprs",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 7, "partConsBin",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 8, "defaultLevels",
TEXTOID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 9, "indType",
INT2OID, -1, 0);
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
partsLI = (LogicalIndexes *)palloc(sizeof(LogicalIndexes));
funcctx->user_fctx = (void *) partsLI;
/* do the actual work */
partsLI = BuildLogicalIndexInfo(relid);
funcctx->user_fctx = (void *) partsLI;
if (partsLI)
funcctx->max_calls = partsLI->numLogicalIndexes;
MemoryContextSwitchTo(oldcontext);
}
funcctx = SRF_PERCALL_SETUP();
partsLI = (LogicalIndexes *)funcctx->user_fctx;
if (funcctx->call_cntr < funcctx->max_calls)
{
/* fetch each tuple, and return */
Datum values[NUM_COLS];
Datum result;
char *c;
text *t;
StringInfoData keys;
int i;
LogicalIndexInfo *li = partsLI->logicalIndexInfo[funcctx->call_cntr];
for (int i = 0; i < NUM_COLS; i++)
nulls[i] = false;
values[0] = ObjectIdGetDatum(li->logicalIndexOid);
values[1] = Int16GetDatum(li->nColumns);
initStringInfo(&keys);
for (i = 0; i < li->nColumns; i++)
appendStringInfo(&keys, "%d ",li->indexKeys[i]);
t = cstring_to_text(keys.data);
values[2] = PointerGetDatum(t);
values[3] = BoolGetDatum(li->indIsUnique);
if (li->indPred)
{
c = nodeToString(li->indPred);
t = cstring_to_text(c);
//.........这里部分代码省略.........
示例14: memReservedForParquetScan
uint64 memReservedForParquetScan(Oid rel_oid, List* attr_list) {
uint64 rowgroupsize = 0;
char *compresstype = NULL;
uint64 memReserved = 0;
int attrNum = get_relnatts(rel_oid); /*Get the total attribute number of the relation*/
uint64 attsWidth = 0; /*the sum width of attributes to be scanned*/
uint64 recordWidth = 0; /*the average width of one record in the relation*/
/* The width array for all the attributes in the relation*/
int32 *attWidth = (int32*)palloc0(attrNum * sizeof(int32));
/** The variables for traversing through attribute list*/
ListCell *cell;
/* Get rowgroup size and compress type */
AppendOnlyEntry *aoEntry = GetAppendOnlyEntry(rel_oid, SnapshotNow);
rowgroupsize = aoEntry->blocksize;
compresstype = aoEntry->compresstype;
/** For each column in the relation, get the column width
* 1) Get the column width from pg_attribute, estimate column width for to-be-scanned columns:
* If fixed column width, the attlen is the column width; if not fixed, refer to typmod
* 2) Get the average column width for variable length type column from table pg_statistic, if the
* stawidth not equals 0, set it as the column width.
*/
for(int i = 0; i < attrNum; i++){
int att_id = i + 1;
HeapTuple attTuple = caql_getfirst(NULL, cql("SELECT * FROM pg_attribute"
" WHERE attrelid = :1 "
" AND attnum = :2 ",
ObjectIdGetDatum(rel_oid),
Int16GetDatum(att_id)));
if (HeapTupleIsValid(attTuple)) {
/*Step1: estimate attwidth according to pg_attributes*/
Form_pg_attribute att = (Form_pg_attribute) GETSTRUCT(attTuple);
estimateColumnWidth(attWidth, &i, att, false);
i--;
int32 stawidth = 0;
/*Step2: adjust addwidth according to pg_statistic*/
switch (att->atttypid)
{
case HAWQ_TYPE_VARCHAR:
case HAWQ_TYPE_TEXT:
case HAWQ_TYPE_XML:
case HAWQ_TYPE_PATH:
case HAWQ_TYPE_POLYGON:
stawidth = get_attavgwidth(rel_oid, att_id);
if(stawidth != 0)
attWidth[i] = stawidth;
break;
case HAWQ_TYPE_VARBIT:
stawidth = get_attavgwidth(rel_oid, att_id);
if(stawidth != 0)
attWidth[i] = stawidth + 4;
break;
default:
break;
}
}
recordWidth += attWidth[i];
}
/* Reverse through the to-be-scanned attribute list, sum up the width */
Assert (1 <= list_length(attr_list));
foreach(cell, attr_list)
{
AttrNumber att_id = lfirst_int(cell);
Assert(1 <= att_id);
Assert(att_id <= attrNum);
attsWidth += attWidth[att_id - 1]; /*sum up the attribute width in the to-be-scanned list*/
}
示例15: GpPolicyReplace
/*
* Sets the policy of a table into the gp_distribution_policy table
* from a GpPolicy structure.
*
*/
void
GpPolicyReplace(Oid tbloid, const GpPolicy *policy)
{
Relation gp_policy_rel;
HeapTuple gp_policy_tuple = NULL;
cqContext cqc;
cqContext *pcqCtx;
ArrayType *attrnums;
bool nulls[2];
Datum values[2];
bool repl[2];
Insist(policy->ptype == POLICYTYPE_PARTITIONED);
/*
* Open and lock the gp_distribution_policy catalog.
*/
gp_policy_rel = heap_open(GpPolicyRelationId, RowExclusiveLock);
pcqCtx = caql_addrel(cqclr(&cqc), gp_policy_rel);
/*
* Convert C arrays into Postgres arrays.
*/
if (policy->nattrs > 0)
{
int i;
Datum *akey;
akey = (Datum *) palloc(policy->nattrs * sizeof(Datum));
for (i = 0; i < policy->nattrs; i++)
akey[i] = Int16GetDatum(policy->attrs[i]);
attrnums = construct_array(akey, policy->nattrs,
INT2OID, 2, true, 's');
}
else
{
attrnums = NULL;
}
nulls[0] = false;
nulls[1] = false;
values[0] = ObjectIdGetDatum(tbloid);
if (attrnums)
values[1] = PointerGetDatum(attrnums);
else
nulls[1] = true;
repl[0] = false;
repl[1] = true;
/*
* Select by value of the localoid field
*/
gp_policy_tuple = caql_getfirst(
pcqCtx,
cql("SELECT * FROM gp_distribution_policy "
" WHERE localoid = :1 "
" FOR UPDATE ",
ObjectIdGetDatum(tbloid)));
/*
* Read first (and only ) tuple
*/
if (HeapTupleIsValid(gp_policy_tuple))
{
HeapTuple newtuple = caql_modify_current(pcqCtx, values,
nulls, repl);
caql_update_current(pcqCtx, newtuple);
/* and Update indexes (implicit) */
heap_freetuple(newtuple);
}
else
{
gp_policy_tuple = caql_form_tuple(pcqCtx, values, nulls);
caql_insert(pcqCtx, gp_policy_tuple);
/* and Update indexes (implicit) */
}
/*
* Close the gp_distribution_policy relcache entry without unlocking.
* We have updated the catalog: consequently the lock must be held until
* end of transaction.
*/
heap_close(gp_policy_rel, NoLock);
} /* GpPolicyReplace */