00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <set>
00016 #include <iostream>
00017
00018
00019 #include "CondTools/L1Trigger/interface/OMDSReader.h"
00020 #include "RelationalAccess/ITableDescription.h"
00021 #include "RelationalAccess/IColumn.h"
00022 #include "CondCore/DBCommon/interface/DbTransaction.h"
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 namespace l1t
00033 {
00034
00035
00036
00037
00038 OMDSReader::OMDSReader()
00039 : DataManager()
00040 {}
00041
00042 OMDSReader::OMDSReader( const std::string& connectString,
00043 const std::string& authenticationPath )
00044 : DataManager( connectString, authenticationPath, true )
00045 {
00046 session->transaction().start( true ) ;
00047 }
00048
00049 void
00050 OMDSReader::connect( const std::string& connectString,
00051 const std::string& authenticationPath )
00052 {
00053 DataManager::connect( connectString, authenticationPath, true ) ;
00054 session->transaction().start( true ) ;
00055 }
00056
00057
00058
00059
00060
00061
00062 OMDSReader::~OMDSReader()
00063 {
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 const OMDSReader::QueryResults
00087 OMDSReader::basicQuery(
00088 const std::vector< std::string >& columnNames,
00089 const std::string& schemaName,
00090 const std::string& tableName,
00091 const std::string& conditionLHS,
00092 const QueryResults conditionRHS,
00093 const std::string& conditionRHSName ) const
00094 {
00095 coral::ISchema& schema = schemaName.empty() ?
00096 session->nominalSchema() :
00097 session->schema( schemaName ) ;
00098
00099 coral::ITable& table = schema.tableHandle( tableName ) ;
00100
00101
00102 boost::shared_ptr< coral::IQuery > query( table.newQuery() ) ;
00103
00104
00105 std::vector< std::string >::const_iterator it = columnNames.begin() ;
00106 std::vector< std::string >::const_iterator end = columnNames.end() ;
00107 for( ; it != end ; ++it )
00108 {
00109 query->addToOutputList( *it ) ;
00110 }
00111
00112
00113 if( !conditionLHS.empty() && conditionRHS.numberRows() == 1 )
00114 {
00115 if( !conditionRHSName.empty() )
00116 {
00117
00118 coral::AttributeList attList ;
00119 attList.extend( conditionRHSName, typeid( std::string ) ) ;
00120 std::string tmp ;
00121 conditionRHS.fillVariable( conditionRHSName, tmp ) ;
00122 attList[ conditionRHSName ].data< std::string >() = tmp ;
00123
00124 query->setCondition( conditionLHS + " = :" + conditionRHSName,
00125 attList ) ;
00126 }
00127 else if( conditionRHS.columnNames().size() == 1 )
00128
00129 {
00130 query->setCondition( conditionLHS + " = :" +
00131 conditionRHS.columnNames().front(),
00132 conditionRHS.attributeLists().front() ) ;
00133 }
00134 }
00135
00136 coral::ICursor& cursor = query->execute() ;
00137
00138
00139
00140 std::vector< coral::AttributeList > atts ;
00141 while( cursor.next() )
00142 {
00143 atts.push_back( cursor.currentRow() ) ;
00144 } ;
00145
00146 return QueryResults( columnNames, atts ) ;
00147 }
00148
00149 const OMDSReader::QueryResults
00150 OMDSReader::basicQuery(
00151 const std::string& columnName,
00152 const std::string& schemaName,
00153 const std::string& tableName,
00154 const std::string& conditionLHS,
00155 const QueryResults conditionRHS,
00156 const std::string& conditionRHSName ) const
00157 {
00158 std::vector< std::string > columnNames ;
00159 columnNames.push_back( columnName ) ;
00160 return basicQuery( columnNames, schemaName, tableName,
00161 conditionLHS, conditionRHS, conditionRHSName ) ;
00162 }
00163
00164 std::vector< std::string >
00165 OMDSReader::columnNames(
00166 const std::string& schemaName,
00167 const std::string& tableName ) const
00168 {
00169 coral::ISchema& schema = schemaName.empty() ?
00170 session->nominalSchema() :
00171 session->schema( schemaName ) ;
00172
00173 coral::ITable& table = schema.tableHandle( tableName ) ;
00174 const coral::ITableDescription& tableDesc = table.description() ;
00175
00176 std::vector< std::string > names ;
00177 int nCols = tableDesc.numberOfColumns() ;
00178
00179 for( int i = 0 ; i < nCols ; ++i )
00180 {
00181 const coral::IColumn& column = tableDesc.columnDescription( i ) ;
00182 names.push_back( column.name() ) ;
00183 }
00184
00185 return names ;
00186 }
00187
00188
00189
00190 const OMDSReader::QueryResults
00191 OMDSReader::basicQueryView(
00192 const std::vector< std::string >& columnNames,
00193 const std::string& schemaName,
00194 const std::string& viewName,
00195 const std::string& conditionLHS,
00196 const QueryResults conditionRHS,
00197 const std::string& conditionRHSName ) const
00198 {
00199 coral::ISchema& schema = schemaName.empty() ?
00200 session->nominalSchema() :
00201 session->schema( schemaName ) ;
00202
00203
00204
00205
00206 coral::IQuery* query = schema.newQuery(); ;
00207
00208
00209 for (std::vector<std::string>::const_iterator constIt = columnNames.begin(); constIt
00210 != columnNames.end(); ++constIt) {
00211 query->addToOutputList(*constIt);
00212 }
00213
00214 query->addToTableList(viewName);
00215
00216
00217 if (!conditionLHS.empty() && conditionRHS.numberRows() == 1) {
00218
00219 if (!conditionRHSName.empty()) {
00220
00221 coral::AttributeList attList;
00222 attList.extend(conditionRHSName, typeid(std::string));
00223 std::string tmp;
00224 conditionRHS.fillVariable(conditionRHSName, tmp);
00225 attList[conditionRHSName].data<std::string> () = tmp;
00226
00227 query->setCondition(conditionLHS + " = :" + conditionRHSName, attList);
00228 } else if (conditionRHS.columnNames().size() == 1)
00229
00230 {
00231 query->setCondition(
00232 conditionLHS + " = :" + conditionRHS.columnNames().front(),
00233 conditionRHS.attributeLists().front());
00234 }
00235 }
00236
00237 coral::ICursor& cursor = query->execute();
00238
00239
00240
00241 std::vector<coral::AttributeList> atts;
00242 while (cursor.next()) {
00243 atts.push_back(cursor.currentRow());
00244 };
00245
00246 delete query;
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 return QueryResults(columnNames, atts);
00260 }
00261
00262 const OMDSReader::QueryResults
00263 OMDSReader::basicQueryView(
00264 const std::string& columnName,
00265 const std::string& schemaName,
00266 const std::string& viewName,
00267 const std::string& conditionLHS,
00268 const QueryResults conditionRHS,
00269 const std::string& conditionRHSName ) const
00270 {
00271 std::vector< std::string > columnNames ;
00272 columnNames.push_back( columnName ) ;
00273 return basicQuery( columnNames, schemaName, viewName,
00274 conditionLHS, conditionRHS, conditionRHSName ) ;
00275 }
00276
00277 std::vector< std::string >
00278 OMDSReader::columnNamesView(
00279 const std::string& schemaName,
00280 const std::string& viewName ) const
00281 {
00282 coral::ISchema& schema = schemaName.empty() ?
00283 session->nominalSchema() :
00284 session->schema( schemaName ) ;
00285
00286 std::set< std::string > views = schema.listViews ();
00287 std::vector< std::string > names ;
00288
00289 if (schema.existsView (viewName)) {
00290
00291 coral::IView& view = schema.viewHandle( viewName ) ;
00292
00293 int nCols = view.numberOfColumns() ;
00294
00295 for (int i = 0; i < nCols; ++i) {
00296 const coral::IColumn& column = view.column(i);
00297 names.push_back(column.name());
00298 }
00299
00300 return names ;
00301
00302 }
00303
00304 return names ;
00305
00306 }
00307
00308
00309
00310
00311 }