/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
*/
/*************************************************************
*
*
* PURPOSE:
* Example program for RasML query invocation from C++.
*
*
************************************************************/
#include
// Linux needs this for template instantiation
#ifdef EARLY_TEMPLATE
#define __EXECUTABLE__
#ifdef __GNUG__
#include "raslib/template_inst.hh"
#endif
#endif
// this file is generated by the rasdl processor
#include "basictypes.hh"
int main( int ac, char** av )
{
char rasmgrName[255];
int rasmgrPort;
char baseName[255];
char collName[255];
char userName[255];
char userPass[255];
if( ac != 7 )
{
cout << "Usage: query rasmgr_name rasmgr_port base_name collection_name user_name user_passwd" << endl;
return -1;
}
strcpy( rasmgrName, av[1] );
rasmgrPort = strtoul( av[2], NULL, 0);
strcpy( baseName, av[3] );
strcpy( collName, av[4] );
strcpy( userName, av[5] );
strcpy( userPass, av[6] );
r_Minterval select_domain = r_Minterval("[0:4,0:4]");
r_Minterval where_domain = r_Minterval("[8:9,8:9]");
r_ULong threshold_value = 10;
r_Database database;
r_Transaction transaction;
r_Set< r_Ref< r_GMarray > > image_set;
r_Ref< r_GMarray > image;
r_Iterator< r_Ref< r_GMarray > > iter;
try
{
database.set_servername( rasmgrName, rasmgrPort );
database.set_useridentification( userName, userPass );
cout << "Opening database " << baseName
<< " on " << rasmgrName << "... " << flush;
database.open( baseName );
cout << "OK" << endl;
cout << "Starting read-only transaction ... " << flush;
transaction.begin( r_Transaction::read_only );
cout << "OK" << endl;
cout << "Creating the query object ..." << flush;
r_OQL_Query query("select a$1 from $2 as a where some_cells( a$3 > $4 )");
cout << "OK, Query string is: " << query.get_query() << endl;
cout << "Substituting query parameters ..." << flush;
query << select_domain << collName << where_domain << threshold_value;
cout << "OK, Query string is: " << query.get_query() << endl;
cout << "Executing the query ..." << flush;
try
{
r_oql_execute( query, image_set );
}
catch( r_Error& errorObj )
{
cout << "FAILED" << endl << errorObj.what() << endl;
cout << "Aborting transaction ... " << flush;
transaction.abort();
cout << "OK" << endl;
cout << "Closing database ... " << flush;
database.close();
cout << "OK" << endl;
return -1;
}
cout << "OK" << endl << endl;
cout << "Collection" << endl;
cout << " Oid...................: " << image_set.get_oid() << endl;
cout << " Type Name.............: " << image_set.get_object_name() << endl;
cout << " Type Structure........: "
<< ( image_set.get_type_structure() ? image_set.get_type_structure() : "" )
<< endl;
cout << " Type Schema...........: " << flush;
if( image_set.get_type_schema() )
image_set.get_type_schema()->print_status( cout );
else
cout << "" << flush;
cout << endl;
cout << " Number of entries.....: " << image_set.cardinality() << endl;
cout << " Element Type Schema...: " << flush;
if( image_set.get_element_type_schema() )
image_set.get_element_type_schema()->print_status( cout );
else
cout << "" << flush;
cout << endl << endl;
iter = image_set.create_iterator();
int i;
for ( i=1, iter.reset(); iter.not_done(); iter++, i++ )
{
cout << "Image " << i << endl;
image= *iter;
image->print_status( cout );
cout << endl;
}
cout << endl;
cout << "Committing transaction ... " << flush;
transaction.commit();
cout << "OK" << endl;
cout << "Closing database ... " << flush;
database.close();
cout << "OK" << endl;
}
catch( r_Error& errorObj )
{
cerr << errorObj.what() << endl;
return -1;
}
return 0;
}
/*
* end of query.cc
*/