xapian-core
1.4.26
|
#include <chert_postlist.h>
Public Member Functions | |
ChertPostListTable (const string &path_, bool readonly_) | |
Create a new table object. More... | |
bool | open (chert_revision_number_t revno) |
void | merge_changes (const map< string, map< Xapian::docid, pair< char, Xapian::termcount > > > &mod_plists, const map< Xapian::docid, Xapian::termcount > &doclens, const map< string, pair< Xapian::termcount_diff, Xapian::termcount_diff > > &freq_deltas) |
Merge added, removed, and changed entries. More... | |
Xapian::docid | get_chunk (const string &tname, Xapian::docid did, bool adding, Chert::PostlistChunkReader **from, Chert::PostlistChunkWriter **to) |
bool | term_exists (const string &term) const |
void | get_freqs (const std::string &term, Xapian::doccount *termfreq_ptr, Xapian::termcount *collfreq_ptr) const |
Returns frequencies for a term. More... | |
Xapian::termcount | get_doclength (Xapian::docid did, Xapian::Internal::intrusive_ptr< const ChertDatabase > db) const |
Returns the length of document did. More... | |
Xapian::termcount | get_unique_terms (Xapian::docid did, Xapian::Internal::intrusive_ptr< const ChertDatabase > db) const |
bool | document_exists (Xapian::docid did, Xapian::Internal::intrusive_ptr< const ChertDatabase > db) const |
Check if document did exists. More... | |
void | get_used_docid_range (Xapian::docid &first, Xapian::docid &last) const |
Public Member Functions inherited from ChertTable | |
ChertTable (const char *tablename_, const std::string &path_, bool readonly_, int compress_strategy_=DONT_COMPRESS, bool lazy=false) | |
Create a new Btree object. More... | |
~ChertTable () | |
Close the Btree. More... | |
void | close (bool permanent=false) |
Close the Btree. More... | |
bool | readahead_key (const string &key) const |
bool | exists () const |
Determine whether the btree exists on disk. More... | |
void | open () |
Open the btree at the latest revision. More... | |
bool | open (chert_revision_number_t revision_) |
Open the btree at a given revision. More... | |
bool | is_open () const |
Return true if this table is open. More... | |
void | flush_db () |
Flush any outstanding changes to the DB file of the table. More... | |
void | commit (chert_revision_number_t revision, int changes_fd=-1, const std::string *changes_tail=NULL) |
Commit any outstanding changes to the table. More... | |
void | write_changed_blocks (int changes_fd) |
Append the list of blocks changed to a changeset file. More... | |
void | cancel () |
Cancel any outstanding changes. More... | |
bool | get_exact_entry (const std::string &key, std::string &tag) const |
Read an entry from the table, if and only if it is exactly that being asked for. More... | |
bool | key_exists (const std::string &key) const |
Check if a key exists in the Btree. More... | |
bool | read_tag (Cursor *C_, std::string *tag, bool keep_compressed) const |
Read the tag value for the key pointed to by cursor C_. More... | |
void | add (const std::string &key, std::string tag, bool already_compressed=false) |
Add a key/tag pair to the table, replacing any existing pair with the same key. More... | |
bool | del (const std::string &key) |
Delete an entry from the table. More... | |
void | erase () |
Erase this table from disk. More... | |
void | set_block_size (unsigned int block_size_) |
Set the block size. More... | |
unsigned int | get_block_size () const |
Get the block size. More... | |
void | create_and_open (unsigned int blocksize) |
Create a new empty btree structure on disk and open it at the initial revision. More... | |
void | set_full_compaction (bool parity) |
chert_revision_number_t | get_latest_revision_number () const |
Get the latest revision number stored in this table. More... | |
chert_revision_number_t | get_open_revision_number () const |
Get the revision number at which this table is currently open. More... | |
chert_tablesize_t | get_entry_count () const |
Return a count of the number of entries in the table. More... | |
bool | empty () const |
Return true if there are no entries in the table. More... | |
ChertCursor * | cursor_get () const |
Get a cursor for reading from the table. More... | |
bool | is_modified () const |
Determine whether the object contains uncommitted modifications. More... | |
void | set_max_item_size (size_t block_capacity) |
Set the maximum item size given the block capacity. More... | |
string | get_path () const |
Static Public Member Functions | |
static string | make_key (const string &term, Xapian::docid did) |
Compose a key from a termname and docid. More... | |
static string | make_key (const string &term) |
Compose a key from a termname. More... | |
Static Public Member Functions inherited from ChertTable | |
static void | throw_database_closed () |
Throw an exception indicating that the database is closed. More... | |
Private Attributes | |
AutoPtr< ChertPostList > | doclen_pl |
PostList for looking up document lengths. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from ChertTable | |
bool | do_open_to_read (bool revision_supplied, chert_revision_number_t revision_) |
Perform the opening operation to read. More... | |
bool | do_open_to_write (bool revision_supplied, chert_revision_number_t revision_, bool create_db=false) |
Perform the opening operation to write. More... | |
bool | basic_open (bool revision_supplied, chert_revision_number_t revision) |
bool | find (Cursor *) const |
find(C_) searches for the key of B->kt in the B-tree. More... | |
int | delete_kt () |
void | read_block (uint4 n, uint8_t *p) const |
read_block(n, p) reads block n of the DB file to address p. More... | |
void | write_block (uint4 n, const uint8_t *p) const |
write_block(n, p) writes block n in the DB file from address p. More... | |
void | set_overwritten () const |
void | block_to_cursor (Cursor *C_, int j, uint4 n) const |
void | alter () |
Btree::alter(); is called when the B-tree is to be altered. More... | |
void | compact (uint8_t *p) |
compact(p) compact the block at p by shuffling all the items up to the end. More... | |
void | enter_key (int j, Key prevkey, Key newkey) |
enter_key(j, prevkey, newkey) is called after a block split. More... | |
int | mid_point (uint8_t *p) const |
mid_point(p) finds the directory entry in c that determines the approximate mid point of the data in the block at p. More... | |
void | add_item_to_block (uint8_t *p, Item_wr kt, int c) |
add_item_to_block(p, kt_, c) adds item kt_ to the block at p. More... | |
void | add_item (Item_wr kt, int j) |
ChertTable::add_item(kt_, j) adds item kt_ to the block at cursor level C[j]. More... | |
void | delete_item (int j, bool repeatedly) |
ChertTable::delete_item(j, repeatedly) is (almost) the converse of add_item. More... | |
int | add_kt (bool found) |
add_kt(found) adds the item (key-tag pair) at B->kt into the B-tree, using cursor C. More... | |
void | read_root () |
void | split_root (uint4 split_n) |
Btree needs to gain a new level to insert more items: so split root block and construct a new one. More... | |
void | form_key (const std::string &key) const |
char | other_base_letter () const |
void | lazy_alloc_deflate_zstream () const |
Allocate the zstream for deflating, if not already allocated. More... | |
void | lazy_alloc_inflate_zstream () const |
Allocate the zstream for inflating, if not already allocated. More... | |
bool | prev (Cursor *C_, int j) const |
bool | next (Cursor *C_, int j) const |
bool | prev_default (Cursor *C_, int j) const |
bool | next_default (Cursor *C_, int j) const |
bool | prev_for_sequential (Cursor *C_, int dummy) const |
bool | next_for_sequential (Cursor *C_, int dummy) const |
Static Protected Member Functions inherited from ChertTable | |
static int | find_in_block (const uint8_t *p, Key key, bool leaf, int c) |
find_in_block(p, key, leaf, c) searches for the key in the block at p. More... | |
static uint4 | block_given_by (const uint8_t *p, int c) |
block_given_by(p, c) finds the item at block address p, directory offset c, and returns its tag value as an integer. More... | |
Protected Attributes inherited from ChertTable | |
const char * | tablename |
The name of the table (used when writing changesets). More... | |
chert_revision_number_t | revision_number |
revision number of the opened B-tree. More... | |
chert_tablesize_t | item_count |
keeps a count of the number of items in the B-tree. More... | |
unsigned int | block_size |
block size of the B tree in bytes More... | |
chert_revision_number_t | latest_revision_number |
Revision number of the other base, or zero if there is only one base file. More... | |
bool | both_bases |
set to true if baseA and baseB both exist as valid bases. More... | |
char | base_letter |
the value 'A' or 'B' of the current base More... | |
bool | faked_root_block |
true if the root block is faked (not written to disk). More... | |
bool | sequential |
true iff the data has been written in a single write in sequential order. More... | |
int | handle |
File descriptor of the table. More... | |
int | level |
number of levels, counting from 0 More... | |
uint4 | root |
the root block of the B-tree More... | |
Item_wr | kt |
buffer of size block_size for making up key-tag items More... | |
uint8_t * | buffer |
buffer of size block_size for reforming blocks More... | |
ChertTable_base | base |
For writing back as file baseA or baseB. More... | |
std::string | name |
The path name of the B tree. More... | |
int | seq_count |
count of the number of successive instances of purely sequential addition, starting at SEQ_START_POINT (neg) and going up to zero. More... | |
uint4 | changed_n |
the last block to be changed by an addition More... | |
int | changed_c |
directory offset corresponding to last block to be changed by an addition More... | |
size_t | max_item_size |
maximum size of an item (key-tag pair) More... | |
bool | Btree_modified |
Set to true the first time the B-tree is modified. More... | |
bool | full_compaction |
set to true when full compaction is to be achieved More... | |
bool | writable |
Set to true when the database is opened to write. More... | |
bool | cursor_created_since_last_modification |
Flag for tracking when cursors need to rebuild. More... | |
unsigned long | cursor_version |
Version count for tracking when cursors need to rebuild. More... | |
Cursor | C [BTREE_CURSOR_LEVELS] |
uint8_t * | split_p |
Buffer used when splitting a block. More... | |
int | compress_strategy |
DONT_COMPRESS or Z_DEFAULT_STRATEGY, Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE. More... | |
z_stream * | deflate_zstream |
Zlib state object for deflating. More... | |
z_stream * | inflate_zstream |
Zlib state object for inflating. More... | |
bool | lazy |
If true, don't create the table until it's needed. More... | |
uint4 | last_readahead |
Last block readahead_key() preread. More... | |
Definition at line 51 of file chert_postlist.h.
|
inline |
Create a new table object.
This does not create the table on disk - the create() method must be called before the table is created on disk
This also does not open the table - the open() method must be called before use is made of the table.
path_ | - Path at which the table is stored. |
readonly_ | - whether to open the table for read only access. |
Definition at line 68 of file chert_postlist.h.
bool ChertPostListTable::document_exists | ( | Xapian::docid | did, |
Xapian::Internal::intrusive_ptr< const ChertDatabase > | db | ||
) | const |
Check if document did exists.
Definition at line 69 of file chert_postlist.cc.
References doclen_pl.
Referenced by ChertWritableDatabase::replace_document().
Xapian::docid ChertPostListTable::get_chunk | ( | const string & | tname, |
Xapian::docid | did, | ||
bool | adding, | ||
Chert::PostlistChunkReader ** | from, | ||
Chert::PostlistChunkWriter ** | to | ||
) |
Definition at line 991 of file chert_postlist.cc.
References Assert, C_unpack_uint_preserving_sort(), check_tname_in_key(), ChertPostList::cursor, ChertPostList::end, ChertPostList::first_did_in_chunk, ChertPostList::is_last_chunk, ChertPostList::last_did_in_chunk, LOGCALL, LOGVALUE, make_key(), ChertPostList::pos, read_start_of_chunk(), read_start_of_first_chunk(), report_read_error(), and RETURN.
Xapian::termcount ChertPostListTable::get_doclength | ( | Xapian::docid | did, |
Xapian::Internal::intrusive_ptr< const ChertDatabase > | db | ||
) | const |
Returns the length of document did.
Definition at line 56 of file chert_postlist.cc.
References doclen_pl, and Xapian::Internal::str().
Referenced by ChertDatabase::get_doclength(), and ChertDatabase::get_unique_terms().
void ChertPostListTable::get_freqs | ( | const std::string & | term, |
Xapian::doccount * | termfreq_ptr, | ||
Xapian::termcount * | collfreq_ptr | ||
) | const |
Returns frequencies for a term.
term | The term to get frequencies for |
termfreq_ptr | Point to return number of docs indexed by term (or NULL not to return) |
collfreq_ptr | Point to return number of occurrences of term in the database (or NULL not to return) |
Definition at line 37 of file chert_postlist.cc.
References ChertTable::get_exact_entry(), make_key(), and ChertPostList::read_number_of_entries().
Referenced by ChertDatabase::get_freqs().
Xapian::termcount ChertPostListTable::get_unique_terms | ( | Xapian::docid | did, |
Xapian::Internal::intrusive_ptr< const ChertDatabase > | db | ||
) | const |
void ChertPostListTable::get_used_docid_range | ( | Xapian::docid & | first, |
Xapian::docid & | last | ||
) | const |
Definition at line 1261 of file chert_postlist.cc.
References Assert, C_unpack_uint_preserving_sort(), check_tname_in_key_lite(), CHERT_MAX_DOCID, dummy, LOGCALL, pack_chert_postlist_key(), pack_glass_postlist_key(), read_start_of_chunk(), read_start_of_first_chunk(), and report_read_error().
Referenced by ChertDatabase::get_used_docid_range().
|
inlinestatic |
Compose a key from a termname and docid.
Definition at line 90 of file chert_postlist.h.
References pack_chert_postlist_key().
Referenced by Chert::PostlistChunkWriter::append(), ChertPostList::ChertPostList(), Chert::PostlistChunkWriter::flush(), get_freqs(), ChertPostList::move_to_chunk_containing(), and ChertDatabase::readahead_for_query().
|
inlinestatic |
Compose a key from a termname.
Definition at line 95 of file chert_postlist.h.
References pack_chert_postlist_key().
void ChertPostListTable::merge_changes | ( | const map< string, map< Xapian::docid, pair< char, Xapian::termcount > > > & | mod_plists, |
const map< Xapian::docid, Xapian::termcount > & | doclens, | ||
const map< string, pair< Xapian::termcount_diff, Xapian::termcount_diff > > & | freq_deltas | ||
) |
Merge added, removed, and changed entries.
Definition at line 1072 of file chert_postlist.cc.
References Chert::PostlistChunkWriter::append(), Assert, check_tname_in_key_lite(), ChertCursor::current_key, ChertPostList::cursor, MutableChertCursor::del(), ChertPostList::did, ChertPostList::end, ChertCursor::find_entry(), Chert::PostlistChunkWriter::flush(), Chert::PostlistChunkReader::get_docid(), Chert::PostlistChunkReader::get_wdf(), Chert::PostlistChunkReader::is_at_end(), LOGCALL_VOID, LOGLINE, LOGVALUE, make_key(), make_start_of_chunk(), make_start_of_first_chunk(), Chert::PostlistChunkReader::next(), ChertPostList::next_chunk(), ChertPostList::pos, read_start_of_chunk(), and read_start_of_first_chunk().
Referenced by ChertWritableDatabase::flush_postlist_changes().
|
inline |
Definition at line 73 of file chert_postlist.h.
References ChertTable::open().
Referenced by ChertDatabase::open_tables(), and ChertDatabase::open_tables_consistent().
|
inline |
Definition at line 99 of file chert_postlist.h.
References make_key().
Referenced by ChertDatabase::term_exists().
|
mutableprivate |
PostList for looking up document lengths.
Definition at line 53 of file chert_postlist.h.
Referenced by document_exists(), and get_doclength().