00001 #include <QtCore/QtDebug>
00002
00003 #include "ACE/accesstocool.h"
00004
00005 namespace cool {
00006
00007 bool openDatabase( cool::DatabaseId m_dbId, cool::IDatabasePtr& db )
00008 {
00009 cool::IDatabaseSvc* m_dbSvc( &(cool::DatabaseSvcFactory::databaseService() ) );
00010
00011
00012 try
00013 {
00014 db = m_dbSvc->openDatabase( m_dbId, false );
00015 }
00016 catch(cool::DatabaseDoesNotExist &e)
00017 {
00018 qDebug() << "openDatabase: DB does not exist.";
00019
00020 return false;
00021 }
00022 catch(coral::ConnectionNotAvailableException &e)
00023 {
00024
00025
00026
00027
00028 qDebug() << "openDatabase: DB connection not available.";
00029 return false;
00030 }
00031 catch(cool::Exception &e)
00032 {
00033 qDebug() << "openDatabase: failed to open DB (COOL exception).";
00034 qDebug() << e.what() << ".";
00035 return false;
00036 }
00037 catch(coral::Exception &e)
00038 {
00039 qDebug() << "openDatabase: failed to open DB (CORAL exception).";
00040 qDebug() << e.what() << ".";
00041 return false;
00042 }
00043 catch(...)
00044 {
00045 qDebug() << "openDatabase: failed to open DB (unknown exception).";
00046 return false;
00047 }
00048 return true;
00049 }
00050
00051 void createTestDB()
00052 {
00053 cool::DatabaseId dbId("sqlite://;schema=/afs/cern.ch/user/c/ctan/mytest.sqlite;dbname=TEST");
00054
00055
00056
00057 cool::IDatabaseSvc& dbSvc = cool::DatabaseSvcFactory::databaseService();
00058 dbSvc.dropDatabase( dbId );
00059
00060 cool::IDatabasePtr db = dbSvc.createDatabase( dbId );
00061
00062
00063 cool::RecordSpecification spec;
00064 spec.extend("Bool",cool::StorageType::Bool);
00065 spec.extend("UChar",cool::StorageType::UChar);
00066 spec.extend("Int16",cool::StorageType::Int16);
00067 spec.extend("UInt16",cool::StorageType::UInt16);
00068 spec.extend("Int32",cool::StorageType::Int32);
00069 spec.extend("UInt32",cool::StorageType::UInt32);
00070 spec.extend("UInt63",cool::StorageType::UInt63);
00071 spec.extend("Int64",cool::StorageType::Int64);
00072 spec.extend("Float",cool::StorageType::Float);
00073 spec.extend("Double",cool::StorageType::Double);
00074 spec.extend("String255",cool::StorageType::String255);
00075 spec.extend("String4k",cool::StorageType::String4k);
00076 spec.extend("String64k",cool::StorageType::String64k);
00077 spec.extend("String16M",cool::StorageType::String16M);
00078 spec.extend("Blob64k",cool::StorageType::Blob64k);
00079 spec.extend("Blob16M",cool::StorageType::Blob16M);
00080
00081
00082 cool::IFolderPtr f1 = db->createFolder( "/folder_1", spec, "DESCRIPTION", cool::FolderVersioning::MULTI_VERSION );
00083
00084
00085 qDebug() << "Storing objects in different channels (Channel 0-6)";
00086 for ( int i = 0; i < 20; ++i )
00087 {
00088 cool::ValidityKey since = i;
00089 cool::ValidityKey until = ValidityKeyMax;
00090 cool::ChannelId channel = i / 3;
00091 coral::AttributeList payload = createPayload( i, spec );
00092 f1->storeObject( since, until, payload, (ChannelId)channel );
00093 if ( i%3 == 0 )
00094 {
00095 std::stringstream s; s << "Tag_" << i;
00096 std::stringstream t; t << "after Object " << i;
00097 f1->tagCurrentHead( s.str(), t.str() );
00098 }
00099 }
00100 }
00101
00102 coral::AttributeList createPayload( int index, const cool::RecordSpecification& spec )
00103 {
00104 coral::AttributeList payload = Record( spec ).attributeList();
00105 payload["Bool"].data<cool::Bool>() = false;
00106 payload["UChar"].data<cool::UChar>() = 255;
00107 payload["Int16"].data<cool::Int16>() = index * -1;
00108 payload["UInt16"].data<cool::UInt16>() = index;
00109 payload["Int32"].data<cool::Int32>() = index * -1;
00110 payload["UInt32"].data<cool::UInt32>() = index;
00111 payload["UInt63"].data<cool::UInt63>() = index;
00112 payload["Int64"].data<cool::Int64>() = index * -1;
00113 payload["Float"].data<cool::Float>() = index * -1.0;
00114 payload["Double"].data<cool::Double>() = index * -1.0;
00115
00116 QString s( "THIS IS A TEST." );
00117 payload["String255"].data<cool::String255>() = s.toStdString();
00118 payload["String4k"].data<cool::String4k>() = s.toStdString();
00119 payload["String64k"].data<cool::String64k>() = s.toStdString();
00120 payload["String16M"].data<cool::String16M>() = s.toStdString();
00121
00122 QByteArray ba = QString( "0123456789abcdefABCDEF.GHIJKLMNOPQRSTUVWXYZ" ).toUtf8();
00123 coral::Blob& blob = payload["Blob64k"].data<coral::Blob>();
00124 int blobSize = ba.size();
00125 blob.resize( blobSize );
00126 char* p = static_cast<char*>( blob.startingAddress() );
00127 char *data = ba.data();
00128 for ( int j = 0; j < blobSize; ++j, ++p, ++data ) *p = *data;
00129
00130 QByteArray ba1 = QString( "0123456789abcdefABCDEF.GHIJKLMNOPQRSTUVWXYZ" ).toUtf8();
00131 coral::Blob& blob1 = payload["Blob16M"].data<coral::Blob>();
00132 int blobSize1 = ba1.size();
00133 blob1.resize( blobSize1 );
00134 char* p1 = static_cast<char*>( blob1.startingAddress() );
00135 char *data1 = ba1.data();
00136 for ( int j1 = 0; j1 < blobSize1; ++j1, ++p1, ++data1 ) *p1 = *data1;
00137
00138 return payload;
00139 }
00140
00141 }