Xmipp  v3.23.11-Nereus
metadata_db.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: J.M. de la Rosa Trevin (jmdelarosa@cnb.csic.es)
4  * Jan Horacek (xhorace4@fi.muni.cz)
5  *
6  * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21  * 02111-1307 USA
22  *
23  * All comments concerning this program package may be sent to the
24  * e-mail address 'xmipp@cnb.csic.es'
25  ***************************************************************************/
26 
27 #ifndef CORE_METADATA_DB_H
28 #define CORE_METADATA_DB_H
29 
30 #include <regex.h>
31 #include <cmath>
32 #include "utils/memory_utils.h"
33 #include "metadata_base.h"
34 #include "metadata_label.h"
35 #include "metadata_object.h"
36 #include "metadata_row_base.h"
37 #include "metadata_static.h"
38 #include "metadata_sql.h"
40 #include "utils/sql_utils.h"
41 #include "xmipp_error.h"
42 #include "xmipp_filename.h"
43 #include "metadata_writemode.h"
44 
45 
55 class MetaDataDb : public MetaData {
56 protected:
61  friend class MDSql;
63 
68  std::vector<MDLabel> _activeLabels;
69 
73  void init(const std::vector<MDLabel> &labelsVector);
74 
78  void copyMetadata(const MetaDataDb &md, bool copyObjects = true);
79 
83  void _selectSplitPart(const MetaDataDb &mdIn,
84  int n, int part, size_t mdSize,
85  const MDLabel sortLabel);
86 
87  void _selectSplitPart(const MetaDataDb &mdIn,
88  size_t n, size_t part,
89  const MDLabel sortLabel=MDL_OBJID);
90 
91  void _selectRandomSubset(const MetaDataDb &mdIn, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID);
92 
93  void _selectPart(const MetaDataDb &mdIn, size_t startPosition, size_t numberOfObjects,
94  const MDLabel sortLabel=MDL_OBJID);
95 
101  void _setOperates(const MetaDataDb &mdIn, const MDLabel label, SetOperation operation);
102  void _setOperates(const MetaDataDb &mdIn, const std::vector<MDLabel> &labels, SetOperation operation);
103  void _setOperates(const MetaDataDb &mdInLeft,
104  const MetaDataDb &mdInRight,
105  const std::vector<MDLabel> &labelsLeft,
106  const std::vector<MDLabel> &labelsRight,
107  SetOperation operation);
112  void _setOperatesLabel(const MetaDataDb &mdIn, const MDLabel label, SetOperation operation);
114  void _clear(bool onlyData=false);
115 
116  void _readRowsStar(mdBlock &block, std::vector<MDObject*> & columnValues,
117  const std::vector<MDLabel> *desiredLabels) override;
118 
120  void _readRowFormat(std::istream& is);
121 
122  void _parseObjects(std::istream &is, std::vector<MDObject*> & columnValues,
123  const std::vector<MDLabel> *desiredLabels, bool firstTime) override;
124 
128  std::vector<MDObject> getObjectsForActiveLabels() const;
129 
130  void _importObjectsDb(const MetaDataDb &md, const MDQuery &query, bool doClear=true);
131  void _importObjectsGeneral(const MetaData &md, const MDQuery &query, bool doClear=true);
132 
133 public:
144  MetaDataDb();
145  MetaDataDb(const std::vector<MDLabel> &labelsVector);
146  MetaDataDb(const MetaData &md);
147 
153  MetaDataDb(const FileName &fileName, const std::vector<MDLabel> &desiredLabels = {});
154 
159  MetaDataDb(const MetaDataDb &md);
160 
165  MetaDataDb& operator=(const MetaDataDb &md);
166 
171  virtual ~MetaDataDb();
172 
175  void clear() override;
182  MDSql * getDatabase() { return myMDSql; }
183 
187  void writeXML(const FileName fn, const FileName blockname, WriteModeMetaData mode) const override;
188 
192  void writeDB(const FileName fn, const FileName blockname, WriteModeMetaData mode) const;
193 
197  void writeText(const FileName fn, const std::vector<MDLabel>* desiredLabels) const override;
198 
201  int getMaxStringLength( const MDLabel thisLabel) const override;
202 
212  bool setValueCol(const MDObject &mdValueIn) override;
213 
214  template<class T>
215  bool setValueCol(const MDLabel label, const T &valueIn) {
216  return MetaData::setValueCol(label, valueIn);
217  }
218 
219  //private:
226  bool setValue(const MDObject &mdValueIn, size_t id) override;
227 
228 
229  template<class T>
230  bool setValue(const MDLabel label, const T &valueIn, size_t id) {
231  return MetaData::setValue(label, valueIn, id);
232  }
233 
234  bool getValue(MDObject &mdValueOut, size_t id) const override;
235  bool getRowValues(size_t id, std::vector<MDObject> &values) const override;
236 
237  template<class T>
238  bool getValue(const MDLabel label, T &valueOut, size_t id) const {
239  return MetaData::getValue(label, valueOut, id);
240  }
241 
244  void getColumnValues(const MDLabel label, std::vector<MDObject> &valuesOut) const override;
245 
246  template<class T>
247  std::vector<T> getColumnValues(const MDLabel label) const {
248  return MetaData::getColumnValues<T>(label);
249  }
250 
251  template<class T>
252  void getColumnValues(const MDLabel label, std::vector<T> &valuesOut) const {
253  return MetaData::getColumnValues(label, valuesOut);
254  }
255 
258  template<typename T>
259  bool getColumnValuesOpt(const MDLabel label, std::vector<T> &values) const;
260 
263  void setColumnValues(const std::vector<MDObject> &valuesIn) override;
264 
265  template<class T>
266  void setColumnValues(const MDLabel label, const std::vector<T> &valuesIn) {
267  return MetaData::setColumnValues(label, valuesIn);
268  }
269 
271  bool bindValue(size_t id) const;
272 
273  bool initGetRow(bool addWhereClause) const;
274  bool execGetRow(MDRow &row) const;
275  void finalizeGetRow(void) const;
276 
277  std::unique_ptr<MDRow> getRow(size_t id) override;
278  std::unique_ptr<const MDRow> getRow(size_t id) const override;
279 
280  MDRowSql getRowSql(size_t id);
281  const MDRowSql getRowSql(size_t id) const;
282 
283  bool getRow(MDRowSql &row, size_t id) const; // FIXME: deprecated, use getRow above
284 
285  bool getAllRows(std::vector<MDRowSql> &rows) const;
286  bool getRow2(MDRow &row, size_t id) const;
287 
289  bool setRow(const MDRow &row, size_t id);
290 
292  bool initAddRow(const MDRow &row);
293  bool execAddRow(const MDRow &row);
294  void finalizeAddRow(void);
295  size_t addRow(const MDRow &row) override;
296  void addRowOpt(const MDRowSql &row);
297  void addRows(const std::vector<MDRowSql> &rows);
298  void addMissingLabels(const MDRow &row);
299  size_t addRow2(const MDRow &row);
300 
303  size_t size() const override;
304 
305  bool containsLabel(const MDLabel label) const override {
306  return vectorContainsLabel(this->_activeLabels, label);
307  }
308 
309  std::vector<MDLabel> getActiveLabels() const override {
310  return this->_activeLabels;
311  }
312 
318  bool addLabel(const MDLabel label, int pos = -1) override;
319 
324  bool removeLabel(const MDLabel label) override;
325 
332  size_t addObject() override;
333 
344  void importObject(const MetaData &md, const size_t id, bool doClear=true) override;
345  void importObjects(const MetaData &md, const std::vector<size_t> &objectsToAdd, bool doClear=true) override;
346  void importObjects(const MetaData &md, const MDQuery &query, bool doClear=true) override;
347 
352  bool removeObject(size_t id) override;
353 
358  void removeObjects(const std::vector<size_t> &toRemove) override;
359 
366  int removeObjects(const MDQuery &query) override;
367  int removeObjects() override;
368 
372  void addIndex(MDLabel label) const;
373  void addIndex(const std::vector<MDLabel> &desiredLabels) const;
374  void removeIndex(MDLabel label);
375  void removeIndex(const std::vector<MDLabel> &desiredLabels);
376 
380  void addItemId();
381 
383  void removeItemId();
384 
391  size_t firstRowId() const override;
392  size_t firstObject(const MDQuery&) const override;
393  size_t lastRowId() const override;
394 
403  void findObjects(std::vector<size_t> &objectsOut, const MDQuery &query) const override;
404  void findObjects(std::vector<size_t> &objectsOut, int limit = -1) const override;
405 
406  size_t countObjects(const MDQuery &query) const override;
407  bool containsObject(size_t objectId) const override;
408  bool containsObject(const MDQuery &query) const override;
409 
417  void _writeRows(std::ostream &os) const override;
418 
424  void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const override;
425  void write(std::ostream &os, const String & blockName="",WriteModeMetaData mode=MD_OVERWRITE) const override;
426 
431  bool existsBlock(const FileName &_inFile);
432 
436  void readXML(const FileName &inFile,
437  const std::vector<MDLabel> *desiredLabels= NULL,
438  const String & blockRegExp=DEFAULT_BLOCK_NAME,
439  bool decomposeStack=true);
440 
444  void readDB(const FileName &inFile,
445  const std::vector<MDLabel> *desiredLabels= NULL,
446  const String & blockRegExp=DEFAULT_BLOCK_NAME,
447  bool decomposeStack=true);
448 
454  void read(const FileName &inFile, const std::vector<MDLabel> *desiredLabels = NULL, bool decomposeStack=true) override;
461  void readPlain(const FileName &inFile, const String &labelsString, const String &separator = " ");
466  void addPlain(const FileName &inFile, const String &labelsString, const String &separator=" ");
467 
493  void aggregate(const MetaDataDb &mdIn, AggregateOperation op,
494  MDLabel aggregateLabel, MDLabel operateLabel, MDLabel resultLabel);
495  void aggregate(const MetaDataDb &mdIn, const std::vector<AggregateOperation> &ops,
496  const std::vector<MDLabel> &operateLabels, const std::vector<MDLabel> &resultLabels);
497  void aggregateGroupBy(const MetaDataDb &mdIn,
499  const std::vector<MDLabel> &groupByLabels,
500  MDLabel operateLabel,
501  MDLabel resultLabel);
506  void aggregateSingle(MDObject &mdValueOut, AggregateOperation op,
507  MDLabel aggregateLabel);
512  void aggregateSingleInt(MDObject &mdValueOut, AggregateOperation op,
513  MDLabel aggregateLabel);
518  void aggregateSingleSizeT(MDObject &mdValueOut, AggregateOperation op,
519  MDLabel aggregateLabel);
520 
521 
522 
526  double getColumnMax(MDLabel column);
527 
528  double getColumnMin(MDLabel column);
529 
530 
535  void unionDistinct(const MetaDataDb &mdIn, const MDLabel label=MDL_OBJID);
536 
541  void unionAll(const MetaDataDb &mdIn);
542 
548  void merge(const MetaData &md2);
549 
553  void intersection(const MetaDataDb &mdIn, const MDLabel label);
554 
558  void subtraction(const MetaDataDb &mdIn, const MDLabel label);
559 
563  void distinct(MetaDataDb &MDin, MDLabel label);
564 
568  void join1(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const MDLabel label, JoinType type=LEFT);
569 
573  void join2(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const MDLabel labelLeft, const MDLabel labelRight , JoinType type=LEFT);
574 
578  void join1(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const std::vector<MDLabel> &labels, JoinType type=LEFT);
579 
583  void join2(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const std::vector<MDLabel> &labelsLeft, const std::vector<MDLabel> &labelsRight,
584  JoinType type=LEFT);
585 
588  void joinNatural(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight);
589 
594  void operate(const String &expression);
595 
600  void replace(const MDLabel label, const String &oldStr, const String &newStr);
601 
606  void randomize(const MetaDataDb &MDin);
607 
611 
612  /*
613  * Sort a Metadata by a label.
614  * Sort the content of MDin comparing
615  * the label supplied, the result will
616  * be in the "calling" MetaData.
617  * Limit fixes the maximum number of returned rows
618  * Offset skips the first N rows
619  */
620  void sort(MetaDataDb &MDin,
621  const MDLabel sortLabel,
622  bool asc=true,
623  int limit=-1,
624  int offset=0);
625 
626 
627  /*
628  * Sort a Metadata by a label.
629  * Sort the content of MDin comparing
630  * the label supplied, the result will
631  * be in the "calling" MetaData.
632  * If the input label is a vector field,
633  * you may supply label:col, to sort by that column,
634  * e.g., NMADisplacements:0
635  * Limit fixes the maximum number of returned rows
636  * Offset skips the first N rows
637  *
638  */
639  void sort(MetaDataDb &MDin, const String &sortLabel, bool asc=true, int limit=-1, int offset=0);
640 
652  void split(size_t n, std::vector<MetaDataDb> &results,
653  const MDLabel sortLabel=MDL_OBJID);
654 
660  void selectSplitPart(const MetaData &mdIn,
661  size_t n, size_t part,
662  const MDLabel sortLabel=MDL_OBJID);
663 
665  void selectRandomSubset(const MetaData &mdIn, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID) override;
666 
673  void selectPart(const MetaData &mdIn, size_t startPosition, size_t numberOfObjects,
674  const MDLabel sortLabel=MDL_OBJID) override;
675 
679  void makeAbsPath(const MDLabel label=MDL_IMAGE);
680 
683  template <bool IsConst>
684  struct MDDbRowIterator : public MDBaseRowIterator<IsConst> {
685  private:
688  std::vector<size_t> _ids;
689  size_t _i;
690  bool _finalized = false;
691 
692  public:
694  : _mdd(mdd), _i(_i) {
695  mdd.myMDSql->selectObjects(_ids);
696  if (this->_i >= _ids.size())
697  return;
698 
699  _mdd.initGetRow(false);
700 
701  _mdd.execGetRow(this->_row);
702  this->_row.set_id(this->_ids[this->_i]);
703  if (this->_i+1 == _ids.size()) {
704  _mdd.finalizeGetRow();
705  _finalized = true;
706  }
707  }
708 
709  virtual ~MDDbRowIterator() {
710  if (!_finalized)
711  _mdd.finalizeGetRow();
712  }
713 
714  std::unique_ptr<MDBaseRowIterator<IsConst>> clone() override {
715  return memoryUtils::make_unique<MDDbRowIterator<IsConst>>(_mdd, _i);
716  }
717 
718  void increment() override {
719  if (this->_i >= _ids.size())
720  return;
721 
722  this->_i++;
723 
724  if (this->_i >= _ids.size())
725  return;
726 
727  this->_mdd.execGetRow(this->_row);
728  this->_row.set_id(this->_ids[this->_i]);
729 
730  if (this->_i == _ids.size()) {
731  _mdd.finalizeGetRow();
732  _finalized = true;
733  }
734  }
735 
736  bool operator==(const MDBaseRowIterator<IsConst>& other) const override {
737  const MDDbRowIterator<IsConst>* dri = dynamic_cast<const MDDbRowIterator<IsConst>*>(&other);
738  if (dri != nullptr)
739  return this->_i == dri->_i;
740  return false;
741  }
742 
744  };
745 
746  iterator begin() override {
747  return {memoryUtils::make_unique<MDDbRowIterator<false>>(*this, 0)};
748  }
749  iterator end() override {
750  return {memoryUtils::make_unique<MDDbRowIterator<false>>(*this, this->size())};
751  }
752 
753  const_iterator begin() const override {
754  return {memoryUtils::make_unique<MDDbRowIterator<true>>(*this, 0)};
755  }
756  const_iterator end() const override {
757  return {memoryUtils::make_unique<MDDbRowIterator<true>>(*this, this->size())};
758  }
759 
760 
761  template <bool IsConst>
762  struct MDDbIdIterator : public MDBaseIdIterator<IsConst> {
763  private:
764  const MetaDataDb& _mdd;
765  bool _last;
766  const MDQuery* _pQuery;
767  std::vector<size_t> _ids;
768  size_t _i;
769 
770  public:
771  MDDbIdIterator(const MetaDataDb& mdd, bool last = false, const MDQuery* pQuery = nullptr)
772  : _mdd(mdd), _last(last), _pQuery(pQuery) {
773  mdd.myMDSql->selectObjects(_ids, pQuery);
774  _i = last ? this->_ids.size() : 0;
775  }
776 
777  bool operator==(const MDBaseIdIterator<IsConst>& other) const override {
778  const MDDbIdIterator<IsConst>* dri = dynamic_cast<const MDDbIdIterator<IsConst>*>(&other);
779  if (dri != nullptr)
780  return this->_i == dri->_i;
781  return false;
782  }
783 
784  size_t operator*() override { return _ids[_i]; }
785 
786  void increment() override { this->_i++; }
787 
788  std::unique_ptr<MDBaseIdIterator<IsConst>> clone() override {
789  return memoryUtils::make_unique<MDDbIdIterator<IsConst>>(_mdd, _last, _pQuery);
790  }
791  };
792 
793  id_iterator id_begin() override {
794  return {memoryUtils::make_unique<MDDbIdIterator<false>>(*this)};
795  }
796 
797  id_iterator id_end() override {
798  return {memoryUtils::make_unique<MDDbIdIterator<false>>(*this, true)};
799  }
800 
801  id_const_iterator id_begin() const override {
802  return {memoryUtils::make_unique<MDDbIdIterator<true>>(*this)};
803  }
804 
805  id_const_iterator id_end() const override {
806  return {memoryUtils::make_unique<MDDbIdIterator<true>>(*this, true)};
807  }
808 
813  void fillExpand(MDLabel label);
814 
815  void fillConstant(MDLabel label, const String &value) override;
816  void fillRandom(MDLabel label, const String &mode, double op1, double op2, double op3=0.) override;
817  void fillLinear(MDLabel label, double initial, double step) override;
818 
819  void copyColumn(MDLabel labelDest, MDLabel labelSrc) override;
820  void copyColumnTo(MetaData& md, MDLabel labelDest, MDLabel labelSrc) override;
821 
822  void renameColumn(MDLabel oldLabel, MDLabel newLabel) override;
823  void renameColumn(const std::vector<MDLabel> &oldLabel,
824  const std::vector<MDLabel> &newLabel) override;
825 
826  void metadataToVec(std::vector<MDRowSql> &vd);
827  void vecToMetadata(const std::vector<MDRow> &rowMetadata);
828 
830  bool operator==(const MetaDataDb& op) const;
831 }
832 ;//class MetaData
833 
837 std::ostream& operator<<(std::ostream& o, const MetaData & mD);
838 
843 
844 template<typename T>
845 bool MetaDataDb::getColumnValuesOpt(const MDLabel label, std::vector<T> &values) const {
846  if (!containsLabel(label))
847  return false;
848  return sqlUtils::select(label,
849  myMDSql->db,
850  myMDSql->tableName(myMDSql->tableId),
851  values);
852 }
853 
856 #endif
object id (int), NOTE: This label is special and shouldn&#39;t be used
void selectRandomSubset(const MetaData &mdIn, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID) override
void _selectSplitPart(const MetaDataDb &mdIn, int n, int part, size_t mdSize, const MDLabel sortLabel)
void addRows(const std::vector< MDRowSql > &rows)
void subtraction(const MetaDataDb &mdIn, const MDLabel label)
virtual bool setValueCol(const MDObject &mdValueIn)=0
void _importObjectsDb(const MetaDataDb &md, const MDQuery &query, bool doClear=true)
void addPlain(const FileName &inFile, const String &labelsString, const String &separator=" ")
void _selectRandomSubset(const MetaDataDb &mdIn, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID)
std::vector< MDLabel > getActiveLabels() const override
Definition: metadata_db.h:309
id_const_iterator id_end() const override
Definition: metadata_db.h:805
bool bindValue(size_t id) const
TypeHelpers::choose< IsConst, const MDRowSql &, MDRowSql & >::type operator*() override
Definition: metadata_db.h:743
void selectSplitPart(const MetaData &mdIn, size_t n, size_t part, const MDLabel sortLabel=MDL_OBJID)
void increment() override
Definition: metadata_db.h:786
bool getRowValues(size_t id, std::vector< MDObject > &values) const override
void intersection(const MetaDataDb &mdIn, const MDLabel label)
void _writeRows(std::ostream &os) const override
void _setOperatesLabel(const MetaDataDb &mdIn, const MDLabel label, SetOperation operation)
void _readRowFormat(std::istream &is)
void findObjects(std::vector< size_t > &objectsOut, const MDQuery &query) const override
size_t addRow2(const MDRow &row)
void writeXML(const FileName fn, const FileName blockname, WriteModeMetaData mode) const override
void distinct(MetaDataDb &MDin, MDLabel label)
bool getValue(MDObject &mdValueOut, size_t id) const override
void fillExpand(MDLabel label)
std::vector< T > getColumnValues(const MDLabel label) const
Definition: metadata_db.h:247
size_t firstObject(const MDQuery &) const override
void unionDistinct(const MetaDataDb &mdIn, const MDLabel label=MDL_OBJID)
void finalizeAddRow(void)
size_t operator*() override
Definition: metadata_db.h:784
void aggregateSingleInt(MDObject &mdValueOut, AggregateOperation op, MDLabel aggregateLabel)
void vecToMetadata(const std::vector< MDRow > &rowMetadata)
std::ostream & operator<<(std::ostream &o, const MetaData &mD)
void aggregateSingle(MDObject &mdValueOut, AggregateOperation op, MDLabel aggregateLabel)
bool initGetRow(bool addWhereClause) const
void copyMetadata(const MetaDataDb &md, bool copyObjects=true)
Definition: metadata_db.cpp:71
MDSql * myMDSql
Definition: metadata_db.h:62
bool getValue(const MDLabel label, T &valueOut, size_t id) const
Definition: metadata_db.h:238
bool execGetRow(MDRow &row) const
FileName _inFile
void aggregateGroupBy(const MetaDataDb &mdIn, AggregateOperation op, const std::vector< MDLabel > &groupByLabels, MDLabel operateLabel, MDLabel resultLabel)
virtual bool getValue(MDObject &mdValueOut, size_t id) const =0
id_iterator id_begin() override
Definition: metadata_db.h:793
bool removeLabel(const MDLabel label) override
id_iterator id_end() override
Definition: metadata_db.h:797
void makeAbsPath(const MDLabel label=MDL_IMAGE)
std::unique_ptr< MDBaseIdIterator< IsConst > > clone() override
Definition: metadata_db.h:788
void aggregate(const MetaDataDb &mdIn, AggregateOperation op, MDLabel aggregateLabel, MDLabel operateLabel, MDLabel resultLabel)
void readPlain(const FileName &inFile, const String &labelsString, const String &separator=" ")
void fillConstant(MDLabel label, const String &value) override
void copyColumnTo(MetaData &md, MDLabel labelDest, MDLabel labelSrc) override
void importObject(const MetaData &md, const size_t id, bool doClear=true) override
std::unique_ptr< MDRow > getRow(size_t id) override
bool existsBlock(const FileName &_inFile)
double getColumnMin(MDLabel column)
void joinNatural(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight)
void join2(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const MDLabel labelLeft, const MDLabel labelRight, JoinType type=LEFT)
iterator end() override
Definition: metadata_db.h:749
void readXML(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=NULL, const String &blockRegExp=DEFAULT_BLOCK_NAME, bool decomposeStack=true)
const_iterator begin() const override
Definition: metadata_db.h:753
size_t countObjects(const MDQuery &query) const override
void randomize(const MetaDataDb &MDin)
int removeObjects() override
void aggregateSingleSizeT(MDObject &mdValueOut, AggregateOperation op, MDLabel aggregateLabel)
int getMaxStringLength(const MDLabel thisLabel) const override
const_iterator end() const override
Definition: metadata_db.h:756
void _clear(bool onlyData=false)
Definition: metadata_db.cpp:40
viol type
bool initAddRow(const MDRow &row)
void getColumnValues(const MDLabel label, std::vector< MDObject > &valuesOut) const override
size_t addObject() override
size_t addRow(const MDRow &row) override
void addRowOpt(const MDRowSql &row)
bool operator==(const MDBaseRowIterator< IsConst > &other) const override
Definition: metadata_db.h:736
void _parseObjects(std::istream &is, std::vector< MDObject *> &columnValues, const std::vector< MDLabel > *desiredLabels, bool firstTime) override
void addMissingLabels(const MDRow &row)
MetaDataDb & operator=(const MetaDataDb &md)
void _setOperates(const MetaDataDb &mdIn, const MDLabel label, SetOperation operation)
void operate(const String &expression)
void setColumnValues(const MDLabel label, const std::vector< T > &valuesIn)
Definition: metadata_db.h:266
iterator begin() override
Definition: metadata_db.h:746
bool operator==(const MDBaseIdIterator< IsConst > &other) const override
Definition: metadata_db.h:777
void readDB(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=NULL, const String &blockRegExp=DEFAULT_BLOCK_NAME, bool decomposeStack=true)
bool getAllRows(std::vector< MDRowSql > &rows) const
MDDbIdIterator(const MetaDataDb &mdd, bool last=false, const MDQuery *pQuery=nullptr)
Definition: metadata_db.h:771
void finalizeGetRow(void) const
void fillLinear(MDLabel label, double initial, double step) override
bool getColumnValuesOpt(const MDLabel label, std::vector< T > &values) const
Definition: metadata_db.h:845
void clear() override
Definition: metadata_db.cpp:54
MDSql * getDatabase()
Definition: metadata_db.h:182
void getColumnValues(const MDLabel label, std::vector< T > &valuesOut) const
Definition: metadata_db.h:252
bool getRow2(MDRow &row, size_t id) const
void removeItemId()
void addItemId()
bool vectorContainsLabel(const std::vector< MDLabel > &labelsVector, const MDLabel label)
std::unique_ptr< MDBaseRowIterator< IsConst > > clone() override
Definition: metadata_db.h:714
void removeDuplicates(MetaDataDb &MDin, MDLabel label=MDL_UNDEFINED)
bool containsObject(size_t objectId) const override
void mode
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const override
bool setValue(const MDLabel label, const T &valueIn, size_t id)
Definition: metadata_db.h:230
basic_istream< char, std::char_traits< char > > istream
Definition: utilities.cpp:815
std::vector< MDObject > getObjectsForActiveLabels() const
void replace(const MDLabel label, const String &oldStr, const String &newStr)
void init(const std::vector< MDLabel > &labelsVector)
Definition: metadata_db.cpp:59
size_t size() const override
std::vector< T > getColumnValues(const MDLabel label) const
void addIndex(MDLabel label) const
void selectPart(const MetaData &mdIn, size_t startPosition, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID) override
void setColumnValues(const std::vector< MDObject > &valuesIn) override
std::vector< MDLabel > _activeLabels
Definition: metadata_db.h:68
bool setRow(const MDRow &row, size_t id)
bool addLabel(const MDLabel label, int pos=-1) override
void importObjects(const MetaData &md, const std::vector< size_t > &objectsToAdd, bool doClear=true) override
size_t firstRowId() const override
virtual ~MetaDataDb()
bool setValue(const MDLabel label, const T &valueIn, size_t id)
void sort(MetaDataDb &MDin, const MDLabel sortLabel, bool asc=true, int limit=-1, int offset=0)
bool setValue(const MDObject &mdValueIn, size_t id) override
Definition: metadata_db.cpp:90
void merge(const MetaData &md2)
size_t lastRowId() const override
std::string String
Definition: xmipp_strings.h:34
void copyColumn(MDLabel labelDest, MDLabel labelSrc) override
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=NULL, bool decomposeStack=true) override
MDDbRowIterator(typename TypeHelpers::choose< IsConst, const MetaDataDb &, MetaDataDb &>::type &mdd, size_t _i)
Definition: metadata_db.h:693
void join1(const MetaDataDb &mdInLeft, const MetaDataDb &mdInRight, const MDLabel label, JoinType type=LEFT)
void removeIndex(MDLabel label)
void unionAll(const MetaDataDb &mdIn)
void writeDB(const FileName fn, const FileName blockname, WriteModeMetaData mode) const
void setColumnValues(const MDLabel label, const std::vector< T > &valuesIn)
bool execAddRow(const MDRow &row)
WriteModeMetaData metadataModeConvert(String mode)
void _selectPart(const MetaDataDb &mdIn, size_t startPosition, size_t numberOfObjects, const MDLabel sortLabel=MDL_OBJID)
bool setValueCol(const MDObject &mdValueIn) override
static bool select(size_t rowId, sqlite3 *db, const std::string &table, std::vector< MDObject > &values)
Definition: sql_utils.cpp:87
void renameColumn(MDLabel oldLabel, MDLabel newLabel) override
id_const_iterator id_begin() const override
Definition: metadata_db.h:801
MDRowSql getRowSql(size_t id)
bool setValueCol(const MDLabel label, const T &valueIn)
Definition: metadata_db.h:215
#define DEFAULT_BLOCK_NAME
Definition: metadata_base.h:60
WriteModeMetaData
int * n
Name of an image (std::string)
void fillRandom(MDLabel label, const String &mode, double op1, double op2, double op3=0.) override
MDLabel
bool removeObject(size_t id) override
void _readRowsStar(mdBlock &block, std::vector< MDObject *> &columnValues, const std::vector< MDLabel > *desiredLabels) override
void increment() override
Definition: metadata_db.h:718
void metadataToVec(std::vector< MDRowSql > &vd)
void writeText(const FileName fn, const std::vector< MDLabel > *desiredLabels) const override
void split(size_t n, std::vector< MetaDataDb > &results, const MDLabel sortLabel=MDL_OBJID)
bool containsLabel(const MDLabel label) const override
Definition: metadata_db.h:305
double getColumnMax(MDLabel column)
void _importObjectsGeneral(const MetaData &md, const MDQuery &query, bool doClear=true)