C example--value set queries
This example is updated to show where existing code would need to change to use the groupBy and having clauses and related structures introduced in release 7.6.03. Lines with required code changes are marked with //.
For information about using the groupBy and having clauses and the related aggregate functions, see Using aggregate functions, groupBy clauses, and having clauses.
void queryUsingSubquery(unsigned int IN_NOT_IN_op,
ARControlStruct *ctrl, ARStatusList *status)
{
ARMultiSchemaFieldFuncValueListList msEntryList = {0, NULL}; /**/
unsigned int numMatches;
unsigned int *numMatchesPtr;
int result;
ARMultiSchemaFuncQueryFromList fromList = {0, NULL}; /**/
ARMultiSchemaSortList sortList = {0, NULL};
ARMultiSchemaFieldFuncList getListFields = {0, NULL}; /**/
ARMultiSchemaFuncQueryFromStruct perm1fromItem = {0,}; /* 0-fill */ /**/
ARMultiSchemaFuncQueryFromStruct perm3fromItem = {0,}; /* 0-fill */ /**/
ARMultiSchemaQualifierStruct joinQual = {AR_COND_OP_NONE, NULL};
ARMultiSchemaQualifierStruct qualifier = {AR_COND_OP_NONE, NULL};
ARMultiSchemaRelOpStruct relop;
ARMultiSchemaFieldFuncStruct fieldIdMain[4] = {{"",}}; /* 0-fill */ /**/
ARMultiSchemaValueSetFuncQueryStruct valueSetQuery = {{0,}}; /* 0-fill *//**/
/* fill up query struct */
fromList.numItems = 1;
fromList.listPtr = &perm1fromItem;
strcpy(fieldIdMain[0].queryFromAlias, "perm1");
fieldIdMain[0].fieldId = 1; /*requestId */
fieldIdMain[0].funcId = AR_MULTI_SCHEMA_FUNC_NONE; /**/
strcpy(fieldIdMain[1].queryFromAlias, "perm1");
fieldIdMain[1].fieldId = 536870913; /* char field */
fieldIdMain[1].funcId = AR_MULTI_SCHEMA_FUNC_NONE; /**/
strcpy(fieldIdMain[2].queryFromAlias, "perm1");
fieldIdMain[2].funcId = AR_MULTI_SCHEMA_FUNC_NONE; /**/
fieldIdMain[2].fieldId = 536870914; /* integer field */
getListFields.numItems = 3;
getListFields.listPtr = fieldIdMain; /**/
/* perm1fromItem from item */
perm1fromItem.type = AR_MULTI_SCHEMA_SCHEMA_NAME;
strcpy(perm1fromItem.u.schemaName, "InSubqueryPermissions1");
perm1fromItem.joinType = 0;
perm1fromItem.joinQual = NULL;
strcpy(perm1fromItem.queryFromAlias, "perm1");
/* perm3fromItem from item */
perm3fromItem.type = AR_MULTI_SCHEMA_SCHEMA_NAME;
strcpy(perm3fromItem.u.schemaName, "InSubqueryPermissions4");
perm3fromItem.joinType = 0;
perm3fromItem.joinQual = NULL;
strcpy(perm3fromItem.queryFromAlias, "perm3");
numMatchesPtr = &numMatches;
/* main query qualifier */
qualifier.operation = AR_COND_OP_REL_OP;
qualifier.u.relOp = &relop;
relop.operation = IN_NOT_IN_op;
relop.operandLeft.tag = AR_FIELD;
strcpy(relop.operandLeft.u.fieldId.queryFromAlias, "perm1");
relop.operandLeft.u.fieldId.fieldId = 536870913;
relop.operandRight.tag = AR_VALUE_SET_QUERY;
relop.operandRight.u.valueSetQuery = &valueSetQuery;
/* set value set query now */
valueSetQuery.queryFromList.numItems = 1;
valueSetQuery.queryFromList.listPtr = &perm3fromItem;
valueSetQuery.fieldId.fieldId = 536870913;
strcpy(valueSetQuery.fieldId.queryFromAlias, "perm3");
valueSetQuery.qualifier = NULL;
result = ARGetListEntryWithMultiSchemaFields (ctrl, &fromList,
&getListFields, &qualifier, &sortList, AR_START_WITH_FIRST_ENTRY,
AR_NO_MAX_LIST_RETRIEVE, FALSE,
NULL, NULL, /* groupBy, having */
&msEntryList, numMatchesPtr, status);
}
Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*