xapian-core  1.4.27
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
ChertDatabase Class Reference

A backend designed for efficient indexing and retrieval, using compressed posting lists and a btree storage scheme. More...

#include <chert_database.h>

+ Inheritance diagram for ChertDatabase:
+ Collaboration diagram for ChertDatabase:

Public Member Functions

 ChertDatabase (const string &db_dir_, int action=Xapian::DB_READONLY_, unsigned int block_size=0u)
 Create and open a chert database. More...
 
 ~ChertDatabase ()
 
ChertCursorget_postlist_cursor () const
 Get a postlist table cursor (used by ChertValueList). More...
 
chert_revision_number_t get_revision_number () const
 Get an object holding the revision number which the tables are opened at. More...
 
void throw_termlist_table_close_exception () const
 
int get_backend_info (string *path) const
 Get backend information about this database. More...
 
void get_used_docid_range (Xapian::docid &first, Xapian::docid &last) const
 Find lowest and highest docids actually in use. More...
 
bool locked () const
 Return true if the database is open for writing. More...
 
virtual bool has_uncommitted_changes () const
 Return true if there are uncommitted changes. More...
 
Xapian::doccount get_doccount () const
 Virtual methods of Database::Internal. More...
 
Xapian::docid get_lastdocid () const
 Virtual methods of Database::Internal. More...
 
Xapian::totallength get_total_length () const
 Virtual methods of Database::Internal. More...
 
Xapian::termcount get_doclength (Xapian::docid did) const
 Virtual methods of Database::Internal. More...
 
Xapian::termcount get_unique_terms (Xapian::docid did) const
 Virtual methods of Database::Internal. More...
 
void get_freqs (const string &term, Xapian::doccount *termfreq_ptr, Xapian::termcount *collfreq_ptr) const
 Virtual methods of Database::Internal. More...
 
Xapian::doccount get_value_freq (Xapian::valueno slot) const
 Virtual methods of Database::Internal. More...
 
std::string get_value_lower_bound (Xapian::valueno slot) const
 Virtual methods of Database::Internal. More...
 
std::string get_value_upper_bound (Xapian::valueno slot) const
 Virtual methods of Database::Internal. More...
 
Xapian::termcount get_doclength_lower_bound () const
 Virtual methods of Database::Internal. More...
 
Xapian::termcount get_doclength_upper_bound () const
 Virtual methods of Database::Internal. More...
 
Xapian::termcount get_wdf_upper_bound (const string &term) const
 Virtual methods of Database::Internal. More...
 
bool term_exists (const string &tname) const
 Virtual methods of Database::Internal. More...
 
bool has_positions () const
 Virtual methods of Database::Internal. More...
 
LeafPostListopen_post_list (const string &tname) const
 Virtual methods of Database::Internal. More...
 
ValueListopen_value_list (Xapian::valueno slot) const
 Virtual methods of Database::Internal. More...
 
Xapian::Document::Internalopen_document (Xapian::docid did, bool lazy) const
 Virtual methods of Database::Internal. More...
 
PositionListopen_position_list (Xapian::docid did, const string &term) const
 Virtual methods of Database::Internal. More...
 
TermListopen_term_list (Xapian::docid did) const
 Virtual methods of Database::Internal. More...
 
TermListopen_allterms (const string &prefix) const
 Virtual methods of Database::Internal. More...
 
TermListopen_spelling_termlist (const string &word) const
 Virtual methods of Database::Internal. More...
 
TermListopen_spelling_wordlist () const
 Virtual methods of Database::Internal. More...
 
Xapian::doccount get_spelling_frequency (const string &word) const
 Virtual methods of Database::Internal. More...
 
TermListopen_synonym_termlist (const string &term) const
 Virtual methods of Database::Internal. More...
 
TermListopen_synonym_keylist (const string &prefix) const
 Virtual methods of Database::Internal. More...
 
string get_metadata (const string &key) const
 Virtual methods of Database::Internal. More...
 
TermListopen_metadata_keylist (const std::string &prefix) const
 Virtual methods of Database::Internal. More...
 
void write_changesets_to_fd (int fd, const string &start_revision, bool need_whole_db, Xapian::ReplicationInfo *info)
 Virtual methods of Database::Internal. More...
 
string get_revision_info () const
 Virtual methods of Database::Internal. More...
 
string get_uuid () const
 Virtual methods of Database::Internal. More...
 
void request_document (Xapian::docid) const
 Virtual methods of Database::Internal. More...
 
void readahead_for_query (const Xapian::Query &query)
 Virtual methods of Database::Internal. More...
 
- Public Member Functions inherited from Xapian::Database::Internal
virtual ~Internal ()
 Destroy the database. More...
 
virtual void keep_alive ()
 Send a keep-alive signal to a remote database, to stop it from timing out. More...
 
virtual void add_spelling (const string &word, Xapian::termcount freqinc) const
 Add a word to the spelling dictionary. More...
 
virtual void remove_spelling (const string &word, Xapian::termcount freqdec) const
 Remove a word from the spelling dictionary. More...
 
virtual void add_synonym (const string &term, const string &synonym) const
 Add a synonym for a term. More...
 
virtual void remove_synonym (const string &term, const string &synonym) const
 Remove a synonym for a term. More...
 
virtual void clear_synonyms (const string &term) const
 Clear all synonyms for a term. More...
 
virtual void set_metadata (const string &key, const string &value)
 Set the metadata associated with a given key. More...
 
virtual void commit ()
 Commit pending modifications to the database. More...
 
void begin_transaction (bool flushed)
 Begin a transaction. More...
 
void commit_transaction ()
 Commit a transaction. More...
 
void cancel_transaction ()
 Cancel a transaction. More...
 
virtual Xapian::docid add_document (const Xapian::Document &document)
 Add a new document to the database. More...
 
virtual void delete_document (Xapian::docid did)
 Delete a document in the database. More...
 
virtual void delete_document (const string &unique_term)
 Delete any documents indexed by a term from the database. More...
 
virtual void replace_document (Xapian::docid did, const Xapian::Document &document)
 Replace a given document in the database. More...
 
virtual Xapian::docid replace_document (const string &unique_term, const Xapian::Document &document)
 Replace any documents matching a term. More...
 
virtual void invalidate_doc_object (Xapian::Document::Internal *obj) const
 Notify the database that document is no longer valid. More...
 
virtual Xapian::Document::Internalcollect_document (Xapian::docid did) const
 Request and later collect a document from the database. More...
 
- Public Member Functions inherited from Xapian::Internal::intrusive_base
 intrusive_base ()
 Construct with no references. More...
 

Static Public Member Functions

static void compact (Xapian::Compactor *compactor, const char *destdir, const std::vector< Xapian::Database::Internal *> &sources, const std::vector< Xapian::docid > &offset, size_t block_size, Xapian::Compactor::compaction_level compaction, unsigned flags, Xapian::docid last_docid)
 

Private Member Functions

bool database_exists ()
 Return true if a database exists at the path specified for this database. More...
 
void create_and_open_tables (unsigned int blocksize)
 Create new tables, and open them. More...
 
bool open_tables_consistent ()
 Open all tables at most recent consistent revision. More...
 
void get_database_write_lock (int flags, bool creating)
 Get a write lock on the database, or throw an Xapian::DatabaseLockError if failure. More...
 
void open_tables (chert_revision_number_t revision)
 Open tables at specified revision number. More...
 
chert_revision_number_t get_next_revision_number () const
 Get an object holding the next revision number which should be used in the tables. More...
 
void set_revision_number (chert_revision_number_t new_revision)
 Set the revision number in the tables. More...
 
bool reopen ()
 Re-open tables to recover from an overwritten condition, or just get most up-to-date version. More...
 
void close ()
 Close all the tables permanently. More...
 
void modifications_failed (chert_revision_number_t old_revision, chert_revision_number_t new_revision, const std::string &msg)
 Called if a modifications fail. More...
 
void apply ()
 Apply any outstanding changes to the tables. More...
 
void cancel ()
 Cancel any outstanding changes to the tables. More...
 
void send_whole_database (RemoteConnection &conn, double end_time)
 Send a set of messages which transfer the whole database. More...
 
void get_changeset_revisions (const string &path, chert_revision_number_t *startrev, chert_revision_number_t *endrev) const
 Get the revision stored in a changeset. More...
 

Private Attributes

std::string db_dir
 Directory to store databases in. More...
 
bool readonly
 Whether the database is readonly. More...
 
ChertVersion version_file
 The file describing the Chert database. More...
 
ChertPostListTable postlist_table
 Table storing posting lists. More...
 
ChertPositionListTable position_table
 Table storing position lists. More...
 
ChertTermListTable termlist_table
 Table storing term lists. More...
 
ChertValueManager value_manager
 Value manager. More...
 
ChertSynonymTable synonym_table
 Table storing synonym data. More...
 
ChertSpellingTable spelling_table
 Table storing spelling correction data. More...
 
ChertRecordTable record_table
 Table storing records. More...
 
FlintLock lock
 Lock object. More...
 
unsigned int max_changesets
 The maximum number of changesets which should be kept in the database. More...
 
ChertDatabaseStats stats
 Database statistics. More...
 

Friends

class ChertWritableDatabase
 
class ChertTermList
 
class ChertPostList
 
class ChertAllTermsList
 
class ChertAllDocsPostList
 

Additional Inherited Members

- Public Attributes inherited from Xapian::Internal::intrusive_base
unsigned _refs
 Reference count. More...
 
- Protected Types inherited from Xapian::Database::Internal
enum  { TRANSACTION_UNIMPLEMENTED = -1, TRANSACTION_NONE = 0, TRANSACTION_UNFLUSHED = 1, TRANSACTION_FLUSHED = 2 }
 Transaction state. More...
 
- Protected Member Functions inherited from Xapian::Database::Internal
bool transaction_active () const
 
 Internal ()
 Create a database - called only by derived classes. More...
 
void dtor_called ()
 Internal method to perform cleanup when a writable database is destroyed with uncommitted changes. More...
 
- Protected Attributes inherited from Xapian::Database::Internal
enum Xapian::Database::Internal:: { ... }  transaction_state
 Transaction state. More...
 

Detailed Description

A backend designed for efficient indexing and retrieval, using compressed posting lists and a btree storage scheme.

Definition at line 59 of file chert_database.h.

Constructor & Destructor Documentation

◆ ChertDatabase()

ChertDatabase::ChertDatabase ( const string &  db_dir_,
int  action = Xapian::DB_READONLY_,
unsigned int  block_size = 0u 
)

Create and open a chert database.

Exceptions
Xapian::DatabaseCorruptErroris thrown if there is no consistent revision available.
Xapian::DatabaseOpeningErrorthrown if database can't be opened.
Xapian::DatabaseVersionErrorthrown if database is in an unsupported format. This implies that the database was created by an older or newer version of Xapian.
Parameters
dbdirdirectory holding chert tables
block_sizeBlock size, in bytes, to use when creating tables. This is only important, and has the correct value, when the database is being created.

Definition at line 105 of file chert_database.cc.

References create_and_open_tables(), database_exists(), Xapian::DB_CREATE, Xapian::DB_CREATE_OR_OVERWRITE, db_dir, Xapian::DB_OPEN, get_database_write_lock(), ChertTable::get_latest_revision_number(), get_next_revision_number(), ChertTable::get_open_revision_number(), LOGCALL_CTOR, open_tables_consistent(), postlist_table, readonly, record_table, S_ISDIR, and set_revision_number().

◆ ~ChertDatabase()

ChertDatabase::~ChertDatabase ( )

Definition at line 176 of file chert_database.cc.

References LOGCALL_DTOR.

Member Function Documentation

◆ apply()

void ChertDatabase::apply ( )
private

Apply any outstanding changes to the tables.

If an error occurs during this operation, this will be signalled by an exception being thrown. In this case the contents of the tables on disk will be left in an unmodified state (though possibly with increased revision numbers), and the outstanding changes will be lost.

Definition at line 729 of file chert_database.cc.

References Xapian::Error::get_description(), get_next_revision_number(), get_revision_number(), ChertSynonymTable::is_modified(), ChertSpellingTable::is_modified(), ChertValueManager::is_modified(), ChertTable::is_modified(), LOGCALL_VOID, modifications_failed(), position_table, postlist_table, record_table, set_revision_number(), spelling_table, synonym_table, termlist_table, and value_manager.

Referenced by ChertWritableDatabase::apply().

◆ cancel()

void ChertDatabase::cancel ( )
privatevirtual

◆ close()

void ChertDatabase::close ( )
privatevirtual

◆ compact()

void ChertDatabase::compact ( Xapian::Compactor compactor,
const char *  destdir,
const std::vector< Xapian::Database::Internal *> &  sources,
const std::vector< Xapian::docid > &  offset,
size_t  block_size,
Xapian::Compactor::compaction_level  compaction,
unsigned  flags,
Xapian::docid  last_docid 
)
static

◆ create_and_open_tables()

void ChertDatabase::create_and_open_tables ( unsigned int  blocksize)
private

◆ database_exists()

bool ChertDatabase::database_exists ( )
private

Return true if a database exists at the path specified for this database.

Definition at line 182 of file chert_database.cc.

References ChertTable::exists(), LOGCALL, postlist_table, record_table, and RETURN.

Referenced by ChertDatabase(), create_and_open_tables(), and get_database_write_lock().

◆ get_backend_info()

int ChertDatabase::get_backend_info ( string *  path) const
inlinevirtual

Get backend information about this database.

Parameters
pathIf non-NULL, and set the pointed to string to the file path of this database (or if to some string describing the database in a backend-specified format if "path" isn't a concept which make sense).
Returns
A constant indicating the backend type.

Implements Xapian::Database::Internal.

Definition at line 311 of file chert_database.h.

References BACKEND_CHERT, compact(), db_dir, get_used_docid_range(), has_uncommitted_changes(), and locked().

◆ get_changeset_revisions()

void ChertDatabase::get_changeset_revisions ( const string &  path,
chert_revision_number_t startrev,
chert_revision_number_t endrev 
) const
private

Get the revision stored in a changeset.

Definition at line 338 of file chert_database.cc.

References CHANGES_MAGIC_STRING, CHANGES_VERSION, CONST_STRLEN, io_read(), O_CLOEXEC, posixy_open, REASONABLE_CHANGESET_SIZE, and unpack_uint().

Referenced by write_changesets_to_fd().

◆ get_database_write_lock()

void ChertDatabase::get_database_write_lock ( int  flags,
bool  creating 
)
private

Get a write lock on the database, or throw an Xapian::DatabaseLockError if failure.

Parameters
flagsBit-wise or of zero or more Xapian::DB_* constants
creatingtrue if the database is in the process of being created - if false, will throw a DatabaseOpening error if the lock can't be acquired and the database doesn't exist.

Definition at line 512 of file chert_database.cc.

References database_exists(), db_dir, Xapian::DB_RETRY_LOCK, FlintLock::lock(), lock, LOGCALL_VOID, FlintLock::SUCCESS, FlintLock::throw_databaselockerror(), and FlintLock::UNKNOWN.

Referenced by ChertDatabase().

◆ get_doccount()

Xapian::doccount ChertDatabase::get_doccount ( ) const
virtual

◆ get_doclength()

Xapian::termcount ChertDatabase::get_doclength ( Xapian::docid  did) const
virtual

◆ get_doclength_lower_bound()

Xapian::termcount ChertDatabase::get_doclength_lower_bound ( ) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 847 of file chert_database.cc.

References ChertDatabaseStats::get_doclength_lower_bound(), and stats.

Referenced by get_postlist_cursor().

◆ get_doclength_upper_bound()

Xapian::termcount ChertDatabase::get_doclength_upper_bound ( ) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 853 of file chert_database.cc.

References ChertDatabaseStats::get_doclength_upper_bound(), and stats.

Referenced by get_postlist_cursor().

◆ get_freqs()

void ChertDatabase::get_freqs ( const string &  term,
Xapian::doccount termfreq_ptr,
Xapian::termcount collfreq_ptr 
) const
virtual

◆ get_lastdocid()

Xapian::docid ChertDatabase::get_lastdocid ( ) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Definition at line 777 of file chert_database.cc.

References ChertDatabaseStats::get_last_docid(), LOGCALL, RETURN, and stats.

Referenced by check_db_dir(), and get_postlist_cursor().

◆ get_metadata()

string ChertDatabase::get_metadata ( const string &  key) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 990 of file chert_database.cc.

References ChertTable::get_exact_entry(), LOGCALL, postlist_table, and RETURN.

Referenced by get_postlist_cursor().

◆ get_next_revision_number()

chert_revision_number_t ChertDatabase::get_next_revision_number ( ) const
private

Get an object holding the next revision number which should be used in the tables.

Returns
the next revision number.

Definition at line 324 of file chert_database.cc.

References ChertTable::get_latest_revision_number(), LOGCALL, postlist_table, and RETURN.

Referenced by apply(), and ChertDatabase().

◆ get_postlist_cursor()

ChertCursor* ChertDatabase::get_postlist_cursor ( ) const
inline

◆ get_revision_info()

string ChertDatabase::get_revision_info ( ) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 1011 of file chert_database.cc.

References get_revision_number(), LOGCALL, pack_uint(), and RETURN.

Referenced by get_postlist_cursor().

◆ get_revision_number()

chert_revision_number_t ChertDatabase::get_revision_number ( ) const

Get an object holding the revision number which the tables are opened at.

Returns
the current revision number.

Definition at line 316 of file chert_database.cc.

References ChertTable::get_open_revision_number(), LOGCALL, postlist_table, and RETURN.

Referenced by apply(), check_db_dir(), get_postlist_cursor(), get_revision_info(), send_whole_database(), set_revision_number(), and write_changesets_to_fd().

◆ get_spelling_frequency()

Xapian::doccount ChertDatabase::get_spelling_frequency ( const string &  word) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 969 of file chert_database.cc.

References ChertSpellingTable::get_word_frequency(), and spelling_table.

Referenced by get_postlist_cursor().

◆ get_total_length()

Xapian::totallength ChertDatabase::get_total_length ( ) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Definition at line 784 of file chert_database.cc.

References ChertDatabaseStats::get_total_doclen(), LOGCALL, RETURN, and stats.

Referenced by get_postlist_cursor().

◆ get_unique_terms()

Xapian::termcount ChertDatabase::get_unique_terms ( Xapian::docid  did) const
virtual

◆ get_used_docid_range()

void ChertDatabase::get_used_docid_range ( Xapian::docid first,
Xapian::docid last 
) const
virtual

Find lowest and highest docids actually in use.

Only used by compaction, so only needs to be implemented by backends which support compaction.

Reimplemented from Xapian::Database::Internal.

Definition at line 1037 of file chert_database.cc.

References ChertRecordTable::get_doccount(), ChertDatabaseStats::get_last_docid(), ChertPostListTable::get_used_docid_range(), postlist_table, record_table, and stats.

Referenced by get_backend_info().

◆ get_uuid()

string ChertDatabase::get_uuid ( ) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 1020 of file chert_database.cc.

References ChertVersion::get_uuid_string(), LOGCALL, RETURN, and version_file.

Referenced by get_postlist_cursor(), send_whole_database(), and write_changesets_to_fd().

◆ get_value_freq()

Xapian::doccount ChertDatabase::get_value_freq ( Xapian::valueno  slot) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 826 of file chert_database.cc.

References ChertValueManager::get_value_freq(), LOGCALL, RETURN, and value_manager.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::get_value_freq().

◆ get_value_lower_bound()

std::string ChertDatabase::get_value_lower_bound ( Xapian::valueno  slot) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 833 of file chert_database.cc.

References ChertValueManager::get_value_lower_bound(), LOGCALL, RETURN, and value_manager.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::get_value_lower_bound().

◆ get_value_upper_bound()

std::string ChertDatabase::get_value_upper_bound ( Xapian::valueno  slot) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 840 of file chert_database.cc.

References ChertValueManager::get_value_upper_bound(), LOGCALL, RETURN, and value_manager.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::get_value_upper_bound().

◆ get_wdf_upper_bound()

Xapian::termcount ChertDatabase::get_wdf_upper_bound ( const string &  term) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 859 of file chert_database.cc.

References get_freqs(), ChertDatabaseStats::get_wdf_upper_bound(), and stats.

Referenced by get_postlist_cursor().

◆ has_positions()

bool ChertDatabase::has_positions ( ) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Definition at line 875 of file chert_database.cc.

References ChertTable::empty(), and position_table.

Referenced by get_postlist_cursor().

◆ has_uncommitted_changes()

bool ChertDatabase::has_uncommitted_changes ( ) const
virtual

Return true if there are uncommitted changes.

Reimplemented in ChertWritableDatabase.

Definition at line 1056 of file chert_database.cc.

Referenced by compact(), and get_backend_info().

◆ locked()

bool ChertDatabase::locked ( ) const
virtual

Return true if the database is open for writing.

If this is a WritableDatabase, always returns true.

For a Database, test if there's a writer holding the lock (or if we can't test for a lock without taking it on the current platform, throw Xapian::UnimplementedError).

Reimplemented from Xapian::Database::Internal.

Definition at line 1050 of file chert_database.cc.

References lock, and FlintLock::test().

Referenced by get_backend_info().

◆ modifications_failed()

void ChertDatabase::modifications_failed ( chert_revision_number_t  old_revision,
chert_revision_number_t  new_revision,
const std::string &  msg 
)
private

Called if a modifications fail.

Parameters
msgis a string description of the exception that was raised when the modifications failed.

Definition at line 701 of file chert_database.cc.

References cancel(), close(), Xapian::Error::get_msg(), open_tables(), and set_revision_number().

Referenced by apply().

◆ open_allterms()

TermList * ChertDatabase::open_allterms ( const string &  prefix) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 946 of file chert_database.cc.

References ChertAllTermsList, LOGCALL, and RETURN.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::open_allterms().

◆ open_document()

Xapian::Document::Internal * ChertDatabase::open_document ( Xapian::docid  did,
bool  lazy 
) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 917 of file chert_database.cc.

References Assert, get_doclength(), LOGCALL, record_table, RETURN, and value_manager.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::open_document().

◆ open_metadata_keylist()

TermList * ChertDatabase::open_metadata_keylist ( const std::string &  prefix) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 1001 of file chert_database.cc.

References ChertTable::cursor_get(), LOGCALL, postlist_table, and RETURN.

Referenced by get_postlist_cursor().

◆ open_position_list()

PositionList * ChertDatabase::open_position_list ( Xapian::docid  did,
const string &  term 
) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Definition at line 931 of file chert_database.cc.

References Assert, and position_table.

Referenced by get_postlist_cursor(), ChertModifiedPostList::open_position_list(), and ChertModifiedPostList::read_position_list().

◆ open_post_list()

LeafPostList * ChertDatabase::open_post_list ( const string &  tname) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 881 of file chert_database.cc.

References ChertAllDocsPostList, ChertPostList, get_doccount(), ChertDatabaseStats::get_last_docid(), LOGCALL, RETURN, and stats.

Referenced by get_postlist_cursor().

◆ open_spelling_termlist()

TermList * ChertDatabase::open_spelling_termlist ( const string &  word) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 954 of file chert_database.cc.

References ChertSpellingTable::open_termlist(), and spelling_table.

Referenced by get_postlist_cursor().

◆ open_spelling_wordlist()

TermList * ChertDatabase::open_spelling_wordlist ( ) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 960 of file chert_database.cc.

References ChertTable::cursor_get(), and spelling_table.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::open_spelling_wordlist().

◆ open_synonym_keylist()

TermList * ChertDatabase::open_synonym_keylist ( const string &  prefix) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 981 of file chert_database.cc.

References ChertTable::cursor_get(), and synonym_table.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::open_synonym_keylist().

◆ open_synonym_termlist()

TermList * ChertDatabase::open_synonym_termlist ( const string &  term) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 975 of file chert_database.cc.

References ChertSynonymTable::open_termlist(), and synonym_table.

Referenced by get_postlist_cursor().

◆ open_tables()

void ChertDatabase::open_tables ( chert_revision_number_t  revision)
private

◆ open_tables_consistent()

bool ChertDatabase::open_tables_consistent ( )
private

Open all tables at most recent consistent revision.

Returns
true if the tables were reopened; false if we could tell they were already open at the latest revision.
Exceptions
Xapian::DatabaseCorruptErroris thrown if there is no consistent revision available.

Definition at line 216 of file chert_database.cc.

References ChertTable::get_block_size(), ChertTable::get_open_revision_number(), LOGCALL, MAX_OPEN_RETRIES, ChertPostListTable::open(), ChertTable::open(), position_table, postlist_table, ChertDatabaseStats::read(), ChertVersion::read_and_check(), record_table, ChertValueManager::reset(), RETURN, Xapian::revision(), ChertTable::set_block_size(), spelling_table, stats, synonym_table, termlist_table, value_manager, and version_file.

Referenced by ChertDatabase(), and reopen().

◆ open_term_list()

TermList * ChertDatabase::open_term_list ( Xapian::docid  did) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Definition at line 906 of file chert_database.cc.

References Assert, ChertTermList, ChertTable::is_open(), LOGCALL, RETURN, termlist_table, and throw_termlist_table_close_exception().

Referenced by get_postlist_cursor().

◆ open_value_list()

ValueList * ChertDatabase::open_value_list ( Xapian::valueno  slot) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 898 of file chert_database.cc.

References LOGCALL, and RETURN.

Referenced by get_postlist_cursor(), and ChertWritableDatabase::open_value_list().

◆ readahead_for_query()

void ChertDatabase::readahead_for_query ( const Xapian::Query query)
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 480 of file chert_database.cc.

References Xapian::Query::get_unique_terms_begin(), ChertPostListTable::make_key(), postlist_table, and ChertTable::readahead_key().

Referenced by get_postlist_cursor().

◆ reopen()

bool ChertDatabase::reopen ( )
privatevirtual

Re-open tables to recover from an overwritten condition, or just get most up-to-date version.

Reimplemented from Xapian::Database::Internal.

Definition at line 491 of file chert_database.cc.

References LOGCALL, open_tables_consistent(), readonly, and RETURN.

Referenced by write_changesets_to_fd().

◆ request_document()

void ChertDatabase::request_document ( Xapian::docid  did) const
virtual

Virtual methods of Database::Internal.

Reimplemented from Xapian::Database::Internal.

Definition at line 474 of file chert_database.cc.

References ChertRecordTable::readahead_for_record(), and record_table.

Referenced by get_postlist_cursor().

◆ send_whole_database()

void ChertDatabase::send_whole_database ( RemoteConnection conn,
double  end_time 
)
private

◆ set_revision_number()

void ChertDatabase::set_revision_number ( chert_revision_number_t  new_revision)
private

Set the revision number in the tables.

This updates the disk tables so that the currently open revision becomes the specified revision number.

Parameters
new_revisionThe new revision number to store. This must be greater than the latest revision number (see get_latest_revision_number()), or undefined behaviour will result.

Definition at line 380 of file chert_database.cc.

References CHANGES_MAGIC_STRING, CHANGES_VERSION, ChertTable::commit(), create_changeset_file(), db_dir, ChertSynonymTable::flush_db(), ChertSpellingTable::flush_db(), ChertTable::flush_db(), get_revision_number(), io_unlink(), io_write(), LOGCALL_VOID, max_changesets, ChertValueManager::merge_changes(), pack_uint(), position_table, postlist_table, record_table, spelling_table, Xapian::Internal::str(), synonym_table, termlist_table, value_manager, and ChertTable::write_changed_blocks().

Referenced by apply(), ChertDatabase(), and modifications_failed().

◆ term_exists()

bool ChertDatabase::term_exists ( const string &  tname) const
virtual

Virtual methods of Database::Internal.

Implements Xapian::Database::Internal.

Reimplemented in ChertWritableDatabase.

Definition at line 867 of file chert_database.cc.

References Assert, LOGCALL, postlist_table, RETURN, and ChertPostListTable::term_exists().

Referenced by get_postlist_cursor().

◆ throw_termlist_table_close_exception()

void ChertDatabase::throw_termlist_table_close_exception ( ) const

◆ write_changesets_to_fd()

void ChertDatabase::write_changesets_to_fd ( int  fd,
const string &  start_revision,
bool  need_whole_db,
Xapian::ReplicationInfo info 
)
virtual

Friends And Related Function Documentation

◆ ChertAllDocsPostList

friend class ChertAllDocsPostList
friend

Definition at line 64 of file chert_database.h.

Referenced by open_post_list(), and ChertWritableDatabase::open_post_list().

◆ ChertAllTermsList

friend class ChertAllTermsList
friend

Definition at line 63 of file chert_database.h.

Referenced by open_allterms().

◆ ChertPostList

friend class ChertPostList
friend

Definition at line 62 of file chert_database.h.

Referenced by open_post_list(), and ChertWritableDatabase::open_post_list().

◆ ChertTermList

friend class ChertTermList
friend

Definition at line 61 of file chert_database.h.

Referenced by open_term_list().

◆ ChertWritableDatabase

friend class ChertWritableDatabase
friend

Definition at line 60 of file chert_database.h.

Member Data Documentation

◆ db_dir

std::string ChertDatabase::db_dir
private

◆ lock

FlintLock ChertDatabase::lock
private

Lock object.

Definition at line 118 of file chert_database.h.

Referenced by close(), get_database_write_lock(), and locked().

◆ max_changesets

unsigned int ChertDatabase::max_changesets
private

The maximum number of changesets which should be kept in the database.

Definition at line 122 of file chert_database.h.

Referenced by set_revision_number().

◆ position_table

ChertPositionListTable ChertDatabase::position_table
private

◆ postlist_table

ChertPostListTable ChertDatabase::postlist_table
mutableprivate

◆ readonly

bool ChertDatabase::readonly
private

Whether the database is readonly.

Definition at line 72 of file chert_database.h.

Referenced by ChertDatabase(), and reopen().

◆ record_table

ChertRecordTable ChertDatabase::record_table
private

Table storing records.

Whenever an update is performed, this table is the last to be updated: therefore, its most recent revision number is the most recent consistent revision available. If this table's most recent revision number is not available for all tables, there is no consistent revision available, and the database is corrupt.

Definition at line 115 of file chert_database.h.

Referenced by ChertWritableDatabase::add_document_(), apply(), cancel(), ChertDatabase(), close(), compact(), create_and_open_tables(), database_exists(), ChertWritableDatabase::delete_document(), get_doccount(), get_used_docid_range(), ChertWritableDatabase::has_uncommitted_changes(), open_document(), open_tables(), open_tables_consistent(), ChertWritableDatabase::replace_document(), request_document(), and set_revision_number().

◆ spelling_table

ChertSpellingTable ChertDatabase::spelling_table
mutableprivate

◆ stats

ChertDatabaseStats ChertDatabase::stats
private

◆ synonym_table

ChertSynonymTable ChertDatabase::synonym_table
mutableprivate

◆ termlist_table

ChertTermListTable ChertDatabase::termlist_table
private

◆ value_manager

ChertValueManager ChertDatabase::value_manager
mutableprivate

◆ version_file

ChertVersion ChertDatabase::version_file
private

The file describing the Chert database.

This file has information about the format of the database which can't easily be stored in any of the individual tables.

Definition at line 78 of file chert_database.h.

Referenced by create_and_open_tables(), get_uuid(), open_tables(), and open_tables_consistent().


The documentation for this class was generated from the following files: