00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef OM_HGUARD_DATABASE_H
00025 #define OM_HGUARD_DATABASE_H
00026
00027 #include <string>
00028
00029 #include "internaltypes.h"
00030
00031 #include <xapian/base.h>
00032 #include <xapian/types.h>
00033 #include <xapian/database.h>
00034 #include <xapian/document.h>
00035 #include <xapian/positioniterator.h>
00036 #include <xapian/termiterator.h>
00037 #include <xapian/valueiterator.h>
00038
00039 using namespace std;
00040
00041 class LeafPostList;
00042 class RemoteDatabase;
00043
00044 typedef Xapian::TermIterator::Internal TermList;
00045 typedef Xapian::PositionIterator::Internal PositionList;
00046 typedef Xapian::ValueIterator::Internal ValueList;
00047
00048
00049 const int XAPIAN_DB_READONLY = 0;
00050
00051 namespace Xapian {
00052
00053 struct ReplicationInfo;
00054
00057 class Database::Internal : public Xapian::Internal::RefCntBase {
00058 private:
00060 Internal(const Internal &);
00061
00063 void operator=(const Internal &);
00064
00065 protected:
00067 enum {
00068 TRANSACTION_UNIMPLEMENTED = -1,
00069 TRANSACTION_NONE = 0,
00070 TRANSACTION_UNFLUSHED = 1,
00071 TRANSACTION_FLUSHED = 2
00072 } transaction_state;
00073
00074 bool transaction_active() const { return int(transaction_state) > 0; }
00075
00077 Internal() : transaction_state(TRANSACTION_NONE) { }
00078
00089 void dtor_called();
00090
00091 public:
00103 virtual ~Internal();
00104
00108 virtual void keep_alive();
00109
00111
00112
00113
00116 virtual Xapian::doccount get_doccount() const = 0;
00117
00120 virtual Xapian::docid get_lastdocid() const = 0;
00121
00123 virtual totlen_t get_total_length() const = 0;
00124
00130 virtual Xapian::doclength get_avlength() const = 0;
00131
00142 virtual Xapian::termcount get_doclength(Xapian::docid did) const = 0;
00143
00151 virtual Xapian::doccount get_termfreq(const string & tname) const = 0;
00152
00161 virtual Xapian::termcount get_collection_freq(const string & tname) const = 0;
00162
00173 virtual Xapian::doccount get_value_freq(Xapian::valueno slot) const;
00174
00182 virtual std::string get_value_lower_bound(Xapian::valueno slot) const;
00183
00191 virtual std::string get_value_upper_bound(Xapian::valueno slot) const;
00192
00194 virtual Xapian::termcount get_doclength_lower_bound() const;
00195
00197 virtual Xapian::termcount get_doclength_upper_bound() const;
00198
00200 virtual Xapian::termcount get_wdf_upper_bound(const std::string & term) const;
00201
00206 virtual bool term_exists(const string & tname) const = 0;
00207
00210 virtual bool has_positions() const = 0;
00211
00213
00214
00215
00230 virtual LeafPostList * open_post_list(const string & tname) const = 0;
00231
00241 virtual ValueList * open_value_list(Xapian::valueno slot) const;
00242
00253 virtual TermList * open_term_list(Xapian::docid did) const = 0;
00254
00264 virtual TermList * open_allterms(const string & prefix) const = 0;
00265
00277 virtual PositionList * open_position_list(Xapian::docid did,
00278 const string & tname) const = 0;
00279
00295 virtual Xapian::Document::Internal *
00296 open_document(Xapian::docid did, bool lazy) const = 0;
00297
00304 virtual TermList * open_spelling_termlist(const string & word) const;
00305
00311 virtual TermList * open_spelling_wordlist() const;
00312
00314 virtual Xapian::doccount get_spelling_frequency(const string & word) const;
00315
00323 virtual void add_spelling(const string & word,
00324 Xapian::termcount freqinc) const;
00325
00334 virtual void remove_spelling(const string & word,
00335 Xapian::termcount freqdec) const;
00336
00341 virtual TermList * open_synonym_termlist(const string & term) const;
00342
00348 virtual TermList * open_synonym_keylist(const string & prefix) const;
00349
00355 virtual void add_synonym(const string & term, const string & synonym) const;
00356
00361 virtual void remove_synonym(const string & term, const string & synonym) const;
00362
00367 virtual void clear_synonyms(const string & term) const;
00368
00373 virtual string get_metadata(const string & key) const;
00374
00383 virtual TermList * open_metadata_keylist(const std::string &prefix) const;
00384
00389 virtual void set_metadata(const string & key, const string & value);
00390
00396 virtual void reopen();
00397
00400 virtual void close() = 0;
00401
00403
00404
00405
00410 virtual void commit();
00411
00413 virtual void cancel();
00414
00419 void begin_transaction(bool flushed);
00420
00425 void commit_transaction();
00426
00431 void cancel_transaction();
00432
00437 virtual Xapian::docid add_document(const Xapian::Document & document);
00438
00443 virtual void delete_document(Xapian::docid did);
00444
00449 virtual void delete_document(const string & unique_term);
00450
00455 virtual void replace_document(Xapian::docid did,
00456 const Xapian::Document & document);
00457
00462 virtual Xapian::docid replace_document(const string & unique_term,
00463 const Xapian::Document & document);
00464
00475 virtual void request_document(Xapian::docid ) const;
00476
00477 virtual Xapian::Document::Internal * collect_document(Xapian::docid did) const;
00479
00485 virtual void write_changesets_to_fd(int fd,
00486 const std::string & start_revision,
00487 bool need_whole_db,
00488 Xapian::ReplicationInfo * info);
00489
00491 virtual string get_revision_info() const;
00492
00503 virtual string get_uuid() const;
00504
00512 virtual void invalidate_doc_object(Xapian::Document::Internal * obj) const;
00513
00515
00516
00517
00524 virtual RemoteDatabase * as_remotedatabase();
00525 };
00526
00527 }
00528
00529 #endif