diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/stub/src/caclientproxy.cpp --- a/contentstorage/caclient/stub/src/caclientproxy.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/stub/src/caclientproxy.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -36,7 +36,7 @@ const char *DATABASE_CONNECTION_NAME = "CaService"; const char *DATABASE_TYPE = "QSQLITE"; -const char *DATABASE_NAME = "castoragedb"; +const char *DATABASE_NAME = "castorage.db"; static QSqlDatabase dbConnection() { @@ -605,7 +605,6 @@ whereStatement.append(" AND ").append(QString().setNum( query.entryRoles())) .append(" | EN_ROLE == ").append( QString().setNum(query.entryRoles())); - //TODO: by uid??? if (query.entryTypeNames().count()) { whereStatement.append(" AND EN_TYPE_NAME IN ("); @@ -617,11 +616,48 @@ whereStatement.append(") "); } + QString whereAttributes; + if (query.attributes().count()) { + QMap attributes = query.attributes(); + QMapIterator atrIt(attributes); + int j = 1; + while (atrIt.hasNext()) { + atrIt.next(); + + // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1' + whereAttributes.append(" AND ").append( + " at").append(QString().setNum(j)).append(".AT_NAME = \'").append( + atrIt.key()).append("\' ").append( + " AND ").append( + " at").append(QString().setNum(j)).append(".AT_VALUE = \'").append( + atrIt.value()).append("\' "); + + j++; + } + whereStatement.append(whereAttributes); + + } + + whereStatement.append(" GROUP BY ENTRY_ID "); + + QString leftJoins; + if (query.attributes().count()) { + for (int j=1; j<=query.attributes().count(); j++) { + // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID + leftJoins.append( + " LEFT JOIN CA_ATTRIBUTE as at").append(QString().setNum(j)).append( + " ON ENTRY_ID = at").append(QString().setNum(j)).append(" .AT_ENTRY_ID "); + } + } + QSqlQuery sqlquery(db); if (query.parentId() == 0) { // sort - QString queryString("SELECT ENTRY_ID from CA_ENTRY where 1=1 "); + QString queryString("SELECT ENTRY_ID from CA_ENTRY "); + queryString.append(leftJoins); + queryString.append(" where 1=1 "); queryString.append(whereStatement); + modifyQueryForSortOrder(queryString, query, false); if (query.count() > 0) queryString.append(" LIMIT ").append(query.count()); @@ -636,11 +672,13 @@ } } } else { - QString - queryString( - "SELECT ENTRY_ID FROM CA_ENTRY \ - LEFT JOIN CA_GROUP_ENTRY ON GE_ENTRY_ID = ENTRY_ID WHERE GE_GROUP_ID = ? "); - queryString.append(whereStatement); + + QString queryString("SELECT ENTRY_ID FROM CA_ENTRY "); + QString queryString2(" LEFT JOIN CA_GROUP_ENTRY ON GE_ENTRY_ID = ENTRY_ID WHERE GE_GROUP_ID = ? "); + queryString2.append(whereStatement); + queryString.append(leftJoins); + queryString.append(queryString2); + modifyQueryForSortOrder(queryString, query, true); if (query.count() > 0) queryString.append(" LIMIT ").append(query.count()); @@ -752,9 +790,9 @@ return error; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- void CaClientProxy::modifyQueryForSortOrder(QString &queryString, const CaQuery &query, bool parent) const { @@ -802,9 +840,9 @@ } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setIconInDb(CaEntry *entryClone) const { //set icon information into db @@ -848,9 +886,9 @@ return success; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setEntryInDb(CaEntry *entryClone) const { QSqlQuery query(dbConnection()); @@ -902,9 +940,9 @@ return success; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setAttributesInDb(CaEntry *entryClone) const { bool success = true;