Query Code Samples Returning StructSet
These examples return a StructSet
for built-in and user-defined data types, Struct
objects, and collections.
Query Returning a StructSet for a Built-In Data Type
QueryServicePtr qrySvcPtr = cachePtr->getQueryService("examplePool");
const char * querystring =
"SELECT DISTINCT ID, pkid, status, getType FROM /portfolios";
QueryPtr query = qrySvcPtr->newQuery(querystring);
//specify 10 seconds for the query timeout period
SelectResultsPtr results = query->execute(10);
if (results == NULLPTR)
{
printf( "\nNo results returned from the server");
}
//obtaining a handle to resultset
StructSetPtr ss(dynamic_cast<StructSet*> (results.ptr()));
if (ss == NULLPTR)
{
printf ("\nStructSet is not obtained \n");
return;
}
//iterating through the resultset using indexes.
for ( int32_t row=0; row < ss->size(); row++)
{
Struct * siptr = (Struct*) dynamic_cast<Struct*> ( ((*ss)[row]).ptr() );
if (siptr == NULL)
{
printf("\nstruct is empty \n");
continue;
}
//iterate through fields now
for( int32_t field=0; field < siptr->length(); field++)
{
SerializablePtr fieldptr((*siptr)[field]);
if(fieldptr == NULLPTR )
{
printf("\nnull data received\n");
}
CacheableStringPtr
str(dynamic_cast<CacheableString*>(fieldptr.ptr()));
if (str == NULLPTR)
{
printf("\n field is of some other type \n");
}
else
{
printf("\n Data for %s is %s ", siptr->getFieldName(field), str->asChar() );
}
} //end of columns
} // end of rows
Returning Struct Objects
QueryServicePtr qrySvcPtr = cachePtr->getQueryService("examplePool");
const char * querystring =
"SELECT DISTINCT derivedProjAttrbts, key: p.key FROM "
"/Portfolios.entries p, (SELECT DISTINCT x.ID, myPos.secId FROM "
"/Portfolios x, x.positions.values AS myPos) derivedProjAttrbts WHERE "
"p.value.ID = derivedProjAttrbts.ID AND derivedProjAttrbts.secId = 'IBM'";
QueryPtr query = qrySvcPtr->newQuery(querystring);
//specify 10 seconds for the query timeout period
SelectResultsPtr results = query->execute(10);
if (results == NULLPTR)
{
printf( "\nNo results returned from the server");
}
//obtaining a handle to resultset
StructSetPtr ss(dynamic_cast<StructSet*> (results.ptr()));
if (ss == NULLPTR)
{
printf ("\nStructSet is not obtained \n");
return;
}
//iterating through the resultset using indexes.
for (int32_t row=0; row < ss->size(); row++)
{
Struct * siptr = (Struct*) dynamic_cast<Struct*> ( ((*ss)[row]).ptr() );
if (siptr == NULL) { printf("\nstruct is empty \n"); }
//iterate through fields now
for (int32_t field=0; field < siptr->length(); field++) {
SerializablePtr fieldptr((*siptr)[field]);
if (fieldptr == NULLPTR )
{
printf("\nnull data received\n");
}
CacheableStringPtr
str(dynamic_cast<CacheableString*>(fieldptr.ptr()));
if (str != NULLPTR) {
printf("\n Data for %s is %s ", siptr->getFieldName(field),
str->asChar() );
}
else
{
StructPtr simpl(dynamic_cast<Struct*> (fieldptr.ptr()));
if (simpl == NULLPTR)
{
printf("\n field is of some other type \n"); continue;
}
printf( "\n struct received %s \n", siptr->getFieldName(field) );
for (int32_t inner_field=0; inner_field < simpl->length(); inner_field++)
{
SerializablePtr innerfieldptr((*simpl)[inner_field]);
if (innerfieldptr == NULLPTR)
{
printf("\nfield of struct is NULL\n");
}
CacheableStringPtr str(dynamic_cast<CacheableString*>
(innerfieldptr.ptr()));
if (str != NULLPTR)
{
printf("\n Data for %s is %s ",
simpl->getFieldName(inner_field),str->asChar() );
}
else
{
printf("\n some other object type inside struct\n");
}
}
}
} //end of columns
}//end of rows
Returning Collections
QueryServicePtr qrySvcPtr = cachePtr->getQueryService("examplePool");
const char * querystring = "select distinct ID, names from /portfolios";
QueryPtr query = qrySvcPtr->newQuery(querystring);
SelectResultsPtr results = query->execute(10);
if (results == NULLPTR) {
printf( "\nNo results returned from the server");
}
//obtain a handle to resultset
StructSetPtr ss(dynamic_cast<StructSet*> (results.ptr()));
if (ss == NULLPTR) {
printf ("\nStructSet is not obtained \n");
return;
}
//iterate through the resultset using indexes.
for (int32_t row=0; row < ss->size(); row++)
{
Struct * siptr = dynamic_cast<Struct*> ( ((*ss)[row]).ptr() );
if (siptr == NULL)
{
printf("\nstruct is empty \n");
continue;
}
//iterate through fields now
for (int32_t field=0; field < siptr->length(); field++)
{
SerializablePtr fieldptr((*siptr)[field]);
if (fieldptr == NULLPTR)
{
printf("\nnull data received\n");
}
CacheableStringPtr
str(dynamic_cast<CacheableString*>(fieldptr.ptr()));
if (str != NULLPTR)
{
printf("\n Data for %s is %s ", siptr->getFieldName(field),
str->asChar() );
}
else
{
CacheableObjectArrayPtr
coa(dynamic_cast<CacheableObjectArray*>(fieldptr.ptr()));
if (coa == NULLPTR)
{
printf("\n field is of some other type\n"); continue;
}
printf( "\n objectArray received %s \n",
siptr->getFieldName(field) );
for (unsigned arrlen=0; arrlen < (uint32_t)coa->length(); arrlen++)
{
printf("\n Data for %s is %s ",siptr->getFieldName(field),
coa->operator[](arrlen)->toString().c_str());
}
}
} //end of columns
}//end of rows