bool DatabaseAdapter_ForwardIndex::exists( const DatabaseClientInterface* database_, const Index& typeno_)
{
	DatabaseKey dbkey( DatabaseKey::ForwardIndexPrefix, typeno_);
	Reference<DatabaseCursorInterface> cursor( database_->createCursor( DatabaseOptions().useCache()));
	if (!cursor.get()) return false;
	DatabaseCursorInterface::Slice key = cursor->seekFirst( dbkey.ptr(), dbkey.size());
	return key.defined();
}
bool DatabaseAdapter_StringIndex::Cursor::getData( const DatabaseCursorInterface::Slice& dbkey, std::string& key, Index& value)
{
	if (!dbkey.defined()) return false;
	key = std::string( dbkey.ptr()+1, dbkey.size()-1);
	DatabaseCursorInterface::Slice blkslice = m_cursor->value();
	char const* vi = blkslice.ptr();
	char const* ve = vi + blkslice.size();
	value = unpackIndex( vi, ve);
	return true;
}
bool DatabaseAdapter_DocMetaData::getBlock( const DatabaseCursorInterface::Slice& key, MetaDataBlock& blk)
{
	if (!key.defined()) return false;
	char const* ki = key.ptr()+1;
	char const* ke = ki + key.size()-1;
	Index blockno = unpackIndex( ki, ke);
	DatabaseCursorInterface::Slice blkslice = m_cursor->value();
	blk.init( m_descr, blockno, blkslice.ptr(), blkslice.size());
	return true;
}
bool DatabaseAdapter_DataBlock::Cursor::getBlock( const DatabaseCursorInterface::Slice& key, DataBlock& blk)
{
	if (!key.defined()) return false;
	char const* ki = key.ptr()+m_domainKeySize;
	char const* ke = ki + key.size()-m_domainKeySize;
	Index elemno = unpackIndex( ki, ke);
	DatabaseCursorInterface::Slice blkslice = m_cursor->value();
	blk.init( elemno, blkslice.ptr(), blkslice.size());
	return true;
}
bool DatabaseAdapter_DocFrequency::Cursor::getData( const DatabaseCursorInterface::Slice& key, Index& typeno, Index& termno, Index& df)
{
	if (!key.defined()) return false;
	char const* ki = key.ptr()+1;
	char const* ke = ki + key.size()-1;
	typeno = unpackIndex( ki, ke);
	termno = unpackIndex( ki, ke);
	DatabaseCursorInterface::Slice blkslice = m_cursor->value();
	char const* vi = blkslice.ptr();
	char const* ve = vi + blkslice.size();
	df = unpackIndex( vi, ve);
	return true;
}
Exemple #6
0
static void dumpKeyValue(
		std::ostream& out,
		const DatabaseClientInterface* database,
		const DatabaseCursorInterface::Slice& key,
		const DatabaseCursorInterface::Slice& value)
{
	try
	{
		switch (key.ptr()[0])
		{
			case DatabaseKey::TermTypePrefix:
			{
				TermTypeData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::TermValuePrefix:
			{
				TermValueData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::DocIdPrefix:
			{
				DocIdData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::VariablePrefix:
			{
				VariableData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::DocAttributePrefix:
			{
				DocAttributeData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::TermTypeInvPrefix:
			{
				TermTypeInvData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::TermValueInvPrefix:
			{
				TermValueInvData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::ForwardIndexPrefix:
			{
				ForwardIndexData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::DocMetaDataPrefix:
			{
				MetaDataDescription metadescr( database);
				DocMetaDataData data( &metadescr, key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::UserNamePrefix:
			{
				UserNameData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::DocFrequencyPrefix:
			{
				DocFrequencyData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::PosinfoBlockPrefix:
			{
				PosinfoBlockData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::UserAclBlockPrefix:
			{
				UserAclBlockData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::AclBlockPrefix:
			{
				AclBlockData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::DocListBlockPrefix:
			{
				DocListBlockData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::InverseTermPrefix:
			{
				InverseTermData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::MetaDataDescrPrefix:
			{
				MetaDataDescrData data( key, value);
				data.print( out);
				break;
			}
			case DatabaseKey::AttributeKeyPrefix:
			{
				AttributeKeyData data( key, value);
				data.print( out);
				break;
			}
			default:
			{
				throw strus::runtime_error( _TXT( "illegal data base key prefix for this storage"));
			}
		}
	}
	catch (const std::runtime_error& err)
	{
		std::string ks( extractKeyString( key));
		throw strus::runtime_error( _TXT( "error in dumped dkey '%s': %s"), ks.c_str(), err.what());
	}
}