4 #include "CoralBase/Attribute.h"
5 #include "CoralBase/Blob.h"
6 #include "RelationalAccess/ISchema.h"
7 #include "RelationalAccess/ITable.h"
8 #include "RelationalAccess/ITableDataEditor.h"
9 #include "RelationalAccess/IBulkOperation.h"
10 #include "RelationalAccess/IQuery.h"
11 #include "RelationalAccess/ICursor.h"
16 const coral::AttributeList&
data){
18 for(coral::AttributeList::const_iterator iAttr = data.begin();
19 iAttr!=data.end() && !
found; ++iAttr){
20 if( iAttr->specification().name() == attributeName ) found =
true;
26 static char* cond[ 5 ] = { (
char*)
"=",(
char*)
">",(
char*)
"<",(
char*)
">=",(
char*)
"<=" };
27 return cond[ condType ];
43 m_data.extend<
int>( columnName );
44 if(!m_setClause.empty()) m_setClause +=
", ";
45 m_setClause += ( columnName +
"= :"+columnName );
50 const std::type_info& columnType ){
52 m_data.extend( columnName, columnType );
53 if(!m_setClause.empty()) m_setClause +=
", ";
54 m_setClause += ( columnName +
"= :"+columnName );
60 m_data.extend<coral::Blob>( columnName );
61 if(!m_setClause.empty()) m_setClause +=
", ";
62 m_setClause += ( columnName +
"= :"+columnName );
68 m_data.extend<
int>( columnName );
70 if(!m_whereClause.empty()) m_whereClause +=
" AND ";
71 m_whereClause += ( columnName +
"= :"+columnName );
76 m_data.extend<
int>( columnName );
77 if(!m_whereClause.empty()) m_whereClause +=
" AND ";
78 m_whereClause += ( columnName +
conditionOfType(condType)+
" :"+columnName );
102 m_tableName( tableName ),
115 coral::ITable&
table = m_schema.tableHandle( m_tableName );
116 table.dataEditor().insertRow(
data() );
126 m_tableName( tableName ),
132 for( std::vector<coral::IBulkOperation*>::iterator iB = m_bulkOperations.begin();
133 iB != m_bulkOperations.end(); ++iB ){
139 coral::ITable&
table = m_schema.tableHandle( m_tableName );
141 m_bulkOperations.push_back( table.dataEditor().bulkInsert(
data(), rowCacheSize ) );
142 return *m_bulkOperations.back();
151 for( std::vector<coral::IBulkOperation*>::iterator iB = m_bulkOperations.begin();
152 iB != m_bulkOperations.end(); ++iB ){
156 m_bulkOperations.clear();
161 for( std::vector<coral::IBulkOperation*>::iterator iB = m_bulkOperations.begin();
162 iB != m_bulkOperations.end(); ++iB ){
165 m_bulkOperations.clear();
171 m_tableName( tableName ),
185 if( updateClause().
size() && whereClause().
size() ){
186 coral::ITable&
table = m_schema.tableHandle( m_tableName );
187 long nr = table.dataEditor().updateRows( updateClause(), whereClause(),
data() );
199 m_tableName( tableName ),
213 if( whereClause().
size() ){
214 coral::ITable&
table = m_schema.tableHandle( m_tableName );
215 long nr = table.dataEditor().deleteRows( whereClause(), whereData() );
226 m_spec( new coral::AttributeListSpecification ),
232 m_tableName( tableName ),
241 m_orderByCols.push_back( columnName );
247 ret = m_cursor->next();
259 if(m_spec->index( columnName )==-1){
260 m_spec->extend<
int >( columnName );
265 const std::type_info& columnType ){
266 if(m_spec->index( columnName )==-1){
267 m_spec->extend( columnName, columnType );
272 if(m_spec->index( columnName )==-1){
273 m_spec->extend<coral::Blob>( columnName );
279 m_whereData.extend<
int>( columnName );
280 if(!m_whereClause.empty()) m_whereClause +=
" AND ";
281 m_whereClause += ( columnName +
"= :"+columnName );
286 if(!m_cursor)
throwException(
"Query on table "+m_tableName+
" has not been executed.",
287 "ora::ReadOperation::data" );
288 return const_cast<coral::AttributeList&
>(m_cursor->currentRow());
296 return m_whereClause;
301 coral::ITable&
table = m_schema.tableHandle( m_tableName );
302 m_query.reset( table.newQuery() );
303 for ( coral::AttributeListSpecification::const_iterator iSpec = m_spec->begin();
304 iSpec != m_spec->end(); ++iSpec ) {
305 m_query->addToOutputList( iSpec->name() );
306 m_query->defineOutputType( iSpec->name(),iSpec->typeName());
308 for(std::vector<std::string>::iterator iCol = m_orderByCols.begin();
309 iCol != m_orderByCols.end(); iCol++ ){
310 m_query->addToOrderList( *iCol );
312 m_query->setCondition( m_whereClause, m_whereData );
313 m_query->setRowCacheSize( 100 );
314 m_cursor = &m_query->execute();
char * conditionOfType(ConditionType condType)
coral::AttributeListSpecification & attributeListSpecification()
void addId(const std::string &columnName)
UpdateOperation(const std::string &tableName, coral::ISchema &schema)
BulkInsertOperation(const std::string &tableName, coral::ISchema &schema)
SelectOperation(const std::string &tableName, coral::ISchema &schema)
InsertOperation(const std::string &tableName, coral::ISchema &schema)
coral::IBulkOperation & setUp(int rowCacheSize)
std::string & whereClause()
DeleteOperation(const std::string &tableName, coral::ISchema &schema)
coral::AttributeList & data()
void addOrderId(const std::string &columnName)
void addData(const std::string &columnName, const std::type_info &columnType)
coral::AttributeList & whereData()
void addWhereId(const std::string &columnName)
void addBlobData(const std::string &columnName)
void throwException(const std::string &message, const std::string &methodName)
tuple size
Write out results.
bool existAttribute(const std::string &attributeName, const coral::AttributeList &data)