/* * 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 */