LCOV - code coverage report
Current view: top level - api - document.cc (source / functions) Hit Total Coverage
Test: Test Coverage for xapian-core 7028d852e609 Lines: 70 86 81.4 %
Date: 2019-02-17 14:59:59 Functions: 23 23 100.0 %
Branches: 20 68 29.4 %

           Branch data     Line data    Source code
       1                 :            : /** @file document.cc
       2                 :            :  * @brief Class representing a document
       3                 :            :  */
       4                 :            : /* Copyright 2008,2017,2018 Olly Betts
       5                 :            :  *
       6                 :            :  * This program is free software; you can redistribute it and/or
       7                 :            :  * modify it under the terms of the GNU General Public License as
       8                 :            :  * published by the Free Software Foundation; either version 2 of the
       9                 :            :  * License, or (at your option) any later version.
      10                 :            :  *
      11                 :            :  * This program is distributed in the hope that it will be useful,
      12                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 :            :  * GNU General Public License for more details.
      15                 :            :  *
      16                 :            :  * You should have received a copy of the GNU General Public License
      17                 :            :  * along with this program; if not, write to the Free Software
      18                 :            :  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
      19                 :            :  */
      20                 :            : 
      21                 :            : #include <config.h>
      22                 :            : 
      23                 :            : #include "xapian/document.h"
      24                 :            : 
      25                 :            : #include <string>
      26                 :            : 
      27                 :            : #include "backends/documentinternal.h"
      28                 :            : #include "net/serialise.h"
      29                 :            : #include "str.h"
      30                 :            : 
      31                 :            : #include "xapian/error.h"
      32                 :            : 
      33                 :            : using namespace std;
      34                 :            : 
      35                 :            : [[noreturn]]
      36                 :            : static void
      37                 :          9 : throw_invalid_arg_empty_term()
      38                 :            : {
      39 [ +  - ][ +  - ]:          9 :     throw Xapian::InvalidArgumentError("Empty termnames are invalid");
                 [ +  - ]
      40                 :            : }
      41                 :            : 
      42                 :            : namespace Xapian {
      43                 :            : 
      44                 :     908333 : Document::Document(Document::Internal* internal_)
      45                 :     908333 :     : internal(internal_)
      46                 :            : {
      47                 :     908333 : }
      48                 :            : 
      49                 :            : Document::Document(const Document&) = default;
      50                 :            : 
      51                 :            : Document&
      52                 :            : Document::operator=(const Document&) = default;
      53                 :            : 
      54                 :            : Document::Document(Document&&) = default;
      55                 :            : 
      56                 :            : Document&
      57                 :            : Document::operator=(Document&&) = default;
      58                 :            : 
      59         [ +  - ]:     230328 : Document::Document() : internal(new Xapian::Document::Internal)
      60                 :            : {
      61                 :     115164 : }
      62                 :            : 
      63                 :    2047860 : Document::~Document()
      64                 :            : {
      65                 :    1023930 : }
      66                 :            : 
      67                 :            : Xapian::docid
      68                 :      12278 : Document::get_docid() const
      69                 :            : {
      70                 :      12278 :     return internal->get_docid();
      71                 :            : }
      72                 :            : 
      73                 :            : string
      74                 :     427278 : Document::get_data() const
      75                 :            : {
      76                 :     427278 :     return internal->get_data();
      77                 :            : }
      78                 :            : 
      79                 :            : void
      80                 :      81266 : Document::set_data(const string& data)
      81                 :            : {
      82                 :      81266 :     internal->set_data(data);
      83                 :      81266 : }
      84                 :            : 
      85                 :            : void
      86                 :     534075 : Document::add_term(const string& term, Xapian::termcount wdf_inc)
      87                 :            : {
      88         [ +  + ]:     534075 :     if (term.empty()) {
      89                 :          2 :         throw_invalid_arg_empty_term();
      90                 :            :     }
      91                 :     534073 :     internal->add_term(term, wdf_inc);
      92                 :     534073 : }
      93                 :            : 
      94                 :            : void
      95                 :         88 : Document::remove_term(const string& term)
      96                 :            : {
      97         [ +  + ]:         88 :     if (term.empty()) {
      98                 :          1 :         throw_invalid_arg_empty_term();
      99                 :            :     }
     100         [ -  + ]:         87 :     if (!internal->remove_term(term)) {
     101         [ #  # ]:          0 :         string m;
     102         [ #  # ]:          0 :         m = "Document::remove_term() failed - term '";
     103         [ #  # ]:          0 :         m += term;
     104         [ #  # ]:          0 :         m + "' not present";
     105 [ #  # ][ #  # ]:          0 :         throw Xapian::InvalidArgumentError(m);
     106                 :            :     }
     107                 :         87 : }
     108                 :            : 
     109                 :            : void
     110                 :    4014719 : Document::add_posting(const string& term,
     111                 :            :                       Xapian::termpos term_pos,
     112                 :            :                       Xapian::termcount wdf_inc)
     113                 :            : {
     114         [ +  + ]:    4014719 :     if (term.empty()) {
     115                 :          2 :         throw_invalid_arg_empty_term();
     116                 :            :     }
     117                 :    4014717 :     internal->add_posting(term, term_pos, wdf_inc);
     118                 :    4014717 : }
     119                 :            : 
     120                 :            : void
     121                 :         11 : Document::remove_posting(const string& term,
     122                 :            :                          Xapian::termpos term_pos,
     123                 :            :                          Xapian::termcount wdf_dec)
     124                 :            : {
     125         [ +  + ]:         11 :     if (term.empty()) {
     126                 :          2 :         throw_invalid_arg_empty_term();
     127                 :            :     }
     128                 :          9 :     auto res = internal->remove_posting(term, term_pos, wdf_dec);
     129         [ -  + ]:          9 :     if (res != Document::Internal::OK) {
     130         [ #  # ]:          0 :         string m = "Document::remove_posting() failed - term '";
     131         [ #  # ]:          0 :         m += term;
     132         [ #  # ]:          0 :         if (res == Document::Internal::NO_TERM) {
     133         [ #  # ]:          0 :             m += "' not present";
     134                 :            :         } else {
     135         [ #  # ]:          0 :             m += "' not present at position ";
     136 [ #  # ][ #  # ]:          0 :             m += str(term_pos);
     137                 :            :         }
     138 [ #  # ][ #  # ]:          0 :         throw Xapian::InvalidArgumentError(m);
     139                 :            :     }
     140                 :          9 : }
     141                 :            : 
     142                 :            : Xapian::termpos
     143                 :          8 : Document::remove_postings(const string& term,
     144                 :            :                           Xapian::termpos term_pos_first,
     145                 :            :                           Xapian::termpos term_pos_last,
     146                 :            :                           Xapian::termcount wdf_dec)
     147                 :            : {
     148         [ +  + ]:          8 :     if (term.empty()) {
     149                 :          2 :         throw_invalid_arg_empty_term();
     150                 :            :     }
     151         [ +  + ]:          6 :     if (rare(term_pos_first > term_pos_last)) {
     152                 :          1 :         return 0;
     153                 :            :     }
     154                 :            :     Xapian::termpos n_removed;
     155                 :            :     auto res = internal->remove_postings(term, term_pos_first, term_pos_last,
     156         [ +  - ]:          5 :                                          wdf_dec, n_removed);
     157         [ -  + ]:          5 :     if (res != Document::Internal::OK) {
     158         [ #  # ]:          0 :         string m = "Document::remove_postings() failed - term '";
     159         [ #  # ]:          0 :         m += term;
     160         [ #  # ]:          0 :         m += "' not present";
     161 [ #  # ][ #  # ]:          0 :         throw Xapian::InvalidArgumentError(m);
     162                 :            :     }
     163                 :          6 :     return n_removed;
     164                 :            : }
     165                 :            : 
     166                 :            : void
     167                 :          3 : Document::clear_terms()
     168                 :            : {
     169                 :          3 :     internal->clear_terms();
     170                 :          3 : }
     171                 :            : 
     172                 :            : Xapian::termcount
     173                 :     185227 : Document::termlist_count() const {
     174                 :     185227 :     return internal->termlist_count();
     175                 :            : }
     176                 :            : 
     177                 :            : TermIterator
     178                 :     286187 : Document::termlist_begin() const
     179                 :            : {
     180                 :     286187 :     return TermIterator(internal->open_term_list());
     181                 :            : }
     182                 :            : 
     183                 :            : string
     184                 :     488038 : Document::get_value(Xapian::valueno slot) const
     185                 :            : {
     186                 :     488038 :     return internal->get_value(slot);
     187                 :            : }
     188                 :            : 
     189                 :            : void
     190                 :     899304 : Document::add_value(Xapian::valueno slot, const string& value)
     191                 :            : {
     192                 :     899304 :     internal->add_value(slot, value);
     193                 :     899304 : }
     194                 :            : 
     195                 :            : void
     196                 :          3 : Document::clear_values()
     197                 :            : {
     198                 :          3 :     internal->clear_values();
     199                 :          3 : }
     200                 :            : 
     201                 :            : Xapian::termcount
     202                 :     124061 : Document::values_count() const {
     203                 :     124061 :     return internal->values_count();
     204                 :            : }
     205                 :            : 
     206                 :            : ValueIterator
     207                 :     501337 : Document::values_begin() const
     208                 :            : {
     209                 :     501337 :     return internal->values_begin();
     210                 :            : }
     211                 :            : 
     212                 :            : string
     213                 :          7 : Document::serialise() const
     214                 :            : {
     215                 :          7 :     return serialise_document(*this);
     216                 :            : }
     217                 :            : 
     218                 :            : Document
     219                 :          7 : Document::unserialise(const string& serialised)
     220                 :            : {
     221                 :          7 :     return unserialise_document(serialised);
     222                 :            : }
     223                 :            : 
     224                 :            : string
     225                 :         13 : Document::get_description() const
     226                 :            : {
     227                 :         13 :     return internal->get_description();
     228                 :            : }
     229                 :            : 
     230                 :            : }

Generated by: LCOV version 1.11