1#ifndef CYCLUS_SRC_QUERY_BACKEND_H_
2#define CYCLUS_SRC_QUERY_BACKEND_H_
8#include <boost/version.hpp>
10#if BOOST_VERSION / 100 % 1000 <= 67
11 #include <boost/uuid/sha1.hpp>
13 #include <boost/uuid/detail/sha1.hpp>
20#define CYCLUS_UUID_SIZE 16
21#define CYCLUS_SHA1_SIZE 20
22#define CYCLUS_SHA1_NINT 5
406 throw ValueError(
"operation '" +
op +
"' not valid for field '" + \
423typedef std::vector<boost::spirit::hold_any>
QueryRow;
461 throw StateError(
"No rows found during query for field " + field);
464 throw KeyError(
"index larger than number of query rows for field "
469 for (
int i = 0; i <
fields.size(); ++i) {
476 throw KeyError(
"query result has no such field " + field);
508 virtual std::map<std::string, DbTypes>
ColumnTypes(std::string table) = 0;
511 virtual std::list<ColumnInfo>
Schema(std::string table) = 0;
514 virtual std::set<std::string>
Tables() = 0;
533 return b_->
Query(table, &to_inject_);
536 std::vector<Cond>
c = *
conds;
537 for (
int i = 0; i < to_inject_.size(); ++i) {
538 c.push_back(to_inject_[i]);
540 return b_->
Query(table, &
c);
543 virtual std::map<std::string, DbTypes>
ColumnTypes(std::string table) {
547 virtual std::list<ColumnInfo>
Schema(std::string table) {
555 std::vector<Cond> to_inject_;
572 virtual std::map<std::string, DbTypes>
ColumnTypes(std::string table) {
576 virtual std::list<ColumnInfo>
Schema(std::string table) {
591 switch (
cond->opcode) {
624 for (i = 0; i <
conds->size(); ++i)
651 template <
typename T>
652 inline std::vector<T>
cast()
const {
655 rtn[i] =
static_cast<T>(
val[i]);
661 return out <<
"[" <<
val[0] <<
", " <<
val[1] <<
", " <<
val[2] << \
662 ", " <<
val[3] <<
", " <<
val[4] <<
"]";
668 if (
val[i] <
rhs.val[i]) {
671 }
else if (
val[i] >
rhs.val[i]) {
694 if (
val[i] !=
rhs.val[i]) {
709 Sha1() { hash_ = boost::uuids::detail::sha1(); }
712 inline void Clear() { hash_.reset(); }
717 hash_.process_bytes(
s.c_str(),
s.size());
722 inline void Update(
const std::vector<int>&
x) {
723 hash_.process_bytes(&
x[0],
x.size() *
sizeof(
int));
726 inline void Update(
const std::vector<float>&
x) {
727 hash_.process_bytes(&
x[0],
x.size() *
sizeof(
float));
730 inline void Update(
const std::vector<double>&
x) {
731 hash_.process_bytes(&
x[0],
x.size() *
sizeof(
double));
734 inline void Update(
const std::vector<std::string>&
x) {
735 for (
unsigned int i = 0; i <
x.size(); ++i)
736 hash_.process_bytes(
x[i].c_str(),
x[i].size());
739 inline void Update(
const std::vector<cyclus::Blob>&
x) {
740 for (
unsigned int i = 0; i <
x.size(); ++i)
741 hash_.process_bytes(
x[i].str().c_str(),
x[i].str().size());
744 inline void Update(
const std::vector<boost::uuids::uuid>&
x) {
745 std::vector<boost::uuids::uuid>::const_iterator
it =
x.begin();
746 for (;
it !=
x.end(); ++
it)
751 std::set<int>::iterator
it =
x.begin();
752 for (;
it !=
x.end(); ++
it)
753 hash_.process_bytes(&(*
it),
sizeof(
int));
757 std::set<bool>::iterator
it =
x.begin();
758 for (;
it !=
x.end(); ++
it)
759 hash_.process_bytes(&(*
it),
sizeof(
bool));
762 inline void Update(
const std::set<double>&
x) {
763 std::set<double>::iterator
it =
x.begin();
764 for (;
it !=
x.end(); ++
it)
765 hash_.process_bytes(&(*
it),
sizeof(
double));
768 inline void Update(
const std::set<float>&
x) {
769 std::set<float>::iterator
it =
x.begin();
770 for (;
it !=
x.end(); ++
it)
771 hash_.process_bytes(&(*
it),
sizeof(
float));
774 inline void Update(
const std::set<cyclus::Blob>&
x) {
775 std::set<cyclus::Blob>::iterator
it =
x.begin();
776 for (;
it !=
x.end(); ++
it)
777 hash_.process_bytes(
it->str().c_str(),
it->str().size());
780 inline void Update(
const std::set<boost::uuids::uuid>&
x) {
781 std::set<boost::uuids::uuid>::iterator
it =
x.begin();
782 for (;
it !=
x.end(); ++
it)
786 inline void Update(
const std::set<std::string>&
x) {
787 std::set<std::string>::iterator
it =
x.begin();
788 for (;
it !=
x.end(); ++
it)
789 hash_.process_bytes(
it->c_str(),
it->size());
793 std::list<int>::const_iterator
it =
x.begin();
794 for (;
it !=
x.end(); ++
it)
795 hash_.process_bytes(&(*
it),
sizeof(
int));
798 inline void Update(
const std::list<bool>&
x) {
799 std::list<bool>::const_iterator
it =
x.begin();
800 for (;
it !=
x.end(); ++
it)
801 hash_.process_bytes(&(*
it),
sizeof(
bool));
804 inline void Update(
const std::list<double>&
x) {
805 std::list<double>::const_iterator
it =
x.begin();
806 for (;
it !=
x.end(); ++
it)
807 hash_.process_bytes(&(*
it),
sizeof(
double));
810 inline void Update(
const std::list<float>&
x) {
811 std::list<float>::const_iterator
it =
x.begin();
812 for (;
it !=
x.end(); ++
it)
813 hash_.process_bytes(&(*
it),
sizeof(
float));
816 inline void Update(
const std::list<std::string>&
x) {
817 std::list<std::string>::const_iterator
it =
x.begin();
818 for (;
it !=
x.end(); ++
it)
819 hash_.process_bytes(
it->c_str(),
it->size());
822 inline void Update(
const std::list<cyclus::Blob>&
x) {
823 std::list<cyclus::Blob>::const_iterator
it =
x.begin();
824 for (;
it !=
x.end(); ++
it)
825 hash_.process_bytes(
it->str().c_str(),
it->str().size());
828 inline void Update(
const std::list<boost::uuids::uuid>&
x) {
829 std::list<boost::uuids::uuid>::const_iterator
it =
x.begin();
830 for (;
it !=
x.end(); ++
it)
834 inline void Update(
const std::pair<int, int>&
x) {
835 hash_.process_bytes(&(
x.first),
sizeof(
int));
836 hash_.process_bytes(&(
x.second),
sizeof(
int));
839 inline void Update(
const std::pair<int, std::string>&
x) {
840 hash_.process_bytes(&(
x.first),
sizeof(
int));
841 hash_.process_bytes(
x.second.c_str(),
x.second.size());
844 inline void Update(
const std::map<int, int>&
x) {
845 std::map<int, int>::const_iterator
it =
x.begin();
846 for (;
it !=
x.end(); ++
it) {
847 hash_.process_bytes(&(
it->first),
sizeof(
int));
848 hash_.process_bytes(&(
it->second),
sizeof(
int));
852 inline void Update(
const std::map<int, bool>&
x) {
853 std::map<int, bool>::const_iterator
it =
x.begin();
854 for (;
it !=
x.end(); ++
it) {
855 hash_.process_bytes(&(
it->first),
sizeof(
int));
856 hash_.process_bytes(&(
it->second),
sizeof(
bool));
860 inline void Update(
const std::map<int, double>&
x) {
861 std::map<int, double>::const_iterator
it =
x.begin();
862 for (;
it !=
x.end(); ++
it) {
863 hash_.process_bytes(&(
it->first),
sizeof(
int));
864 hash_.process_bytes(&(
it->second),
sizeof(
double));
868 inline void Update(
const std::map<int, float>&
x) {
869 std::map<int, float>::const_iterator
it =
x.begin();
870 for (;
it !=
x.end(); ++
it) {
871 hash_.process_bytes(&(
it->first),
sizeof(
int));
872 hash_.process_bytes(&(
it->second),
sizeof(
float));
876 inline void Update(
const std::map<int, cyclus::Blob>&
x) {
877 std::map<int, cyclus::Blob>::const_iterator
it =
x.begin();
878 for (;
it !=
x.end(); ++
it) {
879 hash_.process_bytes(&(
it->first),
sizeof(
int));
880 hash_.process_bytes(
it->second.str().c_str(),
it->second.str().size());
884 inline void Update(
const std::map<int, boost::uuids::uuid>&
x) {
885 std::map<int, boost::uuids::uuid>::const_iterator
it =
x.begin();
886 for (;
it !=
x.end(); ++
it) {
887 hash_.process_bytes(&(
it->first),
sizeof(
int));
892 inline void Update(
const std::map<int, std::string>&
x) {
893 std::map<int, std::string>::const_iterator
it =
x.begin();
894 for (;
it !=
x.end(); ++
it) {
895 hash_.process_bytes(&(
it->first),
sizeof(
int));
896 hash_.process_bytes(
it->second.c_str(),
it->second.size());
900 inline void Update(
const std::map<std::string, int>&
x) {
901 std::map<std::string, int>::const_iterator
it =
x.begin();
902 for (;
it !=
x.end(); ++
it) {
903 hash_.process_bytes(
it->first.c_str(),
it->first.size());
904 hash_.process_bytes(&(
it->second),
sizeof(
int));
908 inline void Update(
const std::map<std::string, double>&
x) {
909 std::map<std::string, double>::const_iterator
it =
x.begin();
910 for (;
it !=
x.end(); ++
it) {
911 hash_.process_bytes(
it->first.c_str(),
it->first.size());
912 hash_.process_bytes(&(
it->second),
sizeof(
double));
916 inline void Update(
const std::map<std::string, float>&
x) {
917 std::map<std::string, float>::const_iterator
it =
x.begin();
918 for (;
it !=
x.end(); ++
it) {
919 hash_.process_bytes(
it->first.c_str(),
it->first.size());
920 hash_.process_bytes(&(
it->second),
sizeof(
float));
924 inline void Update(
const std::map<std::string, bool>&
x) {
925 std::map<std::string, bool>::const_iterator
it =
x.begin();
926 for (;
it !=
x.end(); ++
it) {
927 hash_.process_bytes(
it->first.c_str(),
it->first.size());
928 hash_.process_bytes(&(
it->second),
sizeof(
bool));
932 inline void Update(
const std::map<std::string, cyclus::Blob>&
x) {
933 std::map<std::string, cyclus::Blob>::const_iterator
it =
x.begin();
934 for (;
it !=
x.end(); ++
it) {
935 hash_.process_bytes(
it->first.c_str(),
it->first.size());
936 hash_.process_bytes(
it->second.str().c_str(),
it->second.str().size());
940 inline void Update(
const std::map<std::string, boost::uuids::uuid>&
x) {
941 std::map<std::string, boost::uuids::uuid>::const_iterator
it =
x.begin();
942 for (;
it !=
x.end(); ++
it) {
943 hash_.process_bytes(
it->first.c_str(),
it->first.size());
948 inline void Update(
const std::map<std::string, std::string>&
x) {
949 std::map<std::string, std::string>::const_iterator
it =
x.begin();
950 for (;
it !=
x.end(); ++
it) {
951 hash_.process_bytes(
it->first.c_str(),
it->first.size());
952 hash_.process_bytes(
it->second.c_str(),
it->second.size());
956 inline void Update(
const std::map<std::pair<int, std::string>,
double>&
x) {
957 std::map<std::pair<int, std::string>,
double>::const_iterator
it =
x.begin();
958 for (;
it !=
x.end(); ++
it) {
959 hash_.process_bytes(&(
it->first.first),
sizeof(
int));
960 hash_.process_bytes(
it->first.second.c_str(),
it->first.second.size());
961 hash_.process_bytes(&(
it->second),
sizeof(
double));
965 inline void Update(
const std::map<std::pair<std::string, std::string>,
int>&
x) {
966 std::map<std::pair<std::string, std::string>,
int>::const_iterator
it =
x.begin();
967 for (;
it !=
x.end(); ++
it) {
968 hash_.process_bytes(
it->first.first.c_str(),
it->first.first.size());
969 hash_.process_bytes(
it->first.second.c_str(),
it->first.second.size());
970 hash_.process_bytes(&(
it->second),
sizeof(
int));
974 inline void Update(
const std::map<std::string, std::vector<double>>&
x) {
975 std::map<std::string, std::vector<double>>::const_iterator
it =
x.begin();
976 for (;
it !=
x.end(); ++
it) {
977 hash_.process_bytes(
it->first.c_str(),
it->first.size());
982 inline void Update(
const std::map<std::string, std::map<int, double>>&
x) {
983 std::map<std::string, std::map<int, double>>::const_iterator
it =
x.begin();
984 for (;
it !=
x.end(); ++
it) {
985 hash_.process_bytes(
it->first.c_str(),
it->first.size());
990 inline void Update(
const std::map<
int, std::map<std::string, double>>&
x) {
991 std::map<int, std::map<std::string, double>>::const_iterator
it =
x.begin();
992 for (;
it !=
x.end(); ++
it) {
993 hash_.process_bytes(&(
it->first),
sizeof(
int));
998 inline void Update(
const std::pair<
double, std::map<int, double>>&
x) {
999 hash_.process_bytes(&(
x.first),
sizeof(
double));
1003 inline void Update(
const std::map<std::string, std::pair<
double, std::map<int, double>>>&
x) {
1004 std::map<std::string, std::pair<double, std::map<int, double>>>::const_iterator
it =
x.begin();
1005 for (;
it !=
x.end(); ++
it) {
1006 hash_.process_bytes(&(
it->first),
it->first.size());
1011 inline void Update(
const std::pair<
int, std::pair<std::string, std::string>>&
x) {
1012 hash_.process_bytes(&(
x.first),
sizeof(
int));
1013 hash_.process_bytes(
x.second.first.c_str(),
x.second.first.size());
1014 hash_.process_bytes(
x.second.second.c_str(),
x.second.second.size());
1017 inline void Update(
const std::vector<std::pair<
int, std::pair<std::string, std::string>>>&
x) {
1018 std::vector<std::pair<int, std::pair<std::string, std::string>>>::const_iterator
it =
x.begin();
1019 for (;
it !=
x.end(); ++
it) {
1024 inline void Update(
const std::map<std::string, std::vector<std::pair<
int, std::pair<std::string, std::string>>>>&
x) {
1025 std::map<std::string, std::vector<std::pair<int, std::pair<std::string, std::string>>>>::const_iterator
it =
x.begin();
1026 for (;
it !=
x.end(); ++
it) {
1027 hash_.process_bytes(
it->first.c_str(),
it->first.size());
1032 inline void Update(
const std::list<std::pair<int, int>>&
x){
1033 std::list<std::pair<int, int>>::const_iterator
it =
x.begin();
1034 for (;
it !=
x.end(); ++
it) {
1039 inline void Update(
const std::pair<std::string, std::vector<double>>&
x) {
1040 hash_.process_bytes(
x.first.c_str(),
x.first.size());
1044 inline void Update(
const std::map<std::string, std::pair<std::string, std::vector<double>>>&
x) {
1045 std::map<std::string, std::pair<std::string, std::vector<double>>>::const_iterator
it =
x.begin();
1046 for(;
it !=
x.end(); ++
it) {
1047 hash_.process_bytes(
it->first.c_str(),
it->first.size());
1052 inline void Update(
const std::map<std::string, std::map<std::string, int>>&
x) {
1053 std::map<std::string, std::map<std::string, int>>::const_iterator
it =
x.begin();
1054 for(;
it !=
x.end(); ++
it) {
1055 hash_.process_bytes(
it->first.c_str(),
it->first.size());
1060 inline void Update(
const std::pair<double, double>&
x) {
1061 hash_.process_bytes(&(
x.first),
sizeof(
double));
1062 hash_.process_bytes(&(
x.second),
sizeof(
double));
1065 inline void Update(
const std::pair<std::pair<double, double>, std::map<std::string, double>>&
x) {
1070 inline void Update(
const std::vector<std::pair<std::pair<double, double>, std::map<std::string, double>>>&
x) {
1071 std::vector<std::pair<std::pair<double, double>, std::map<std::string, double>>>::const_iterator
it =
x.begin();
1072 for(;
it !=
x.end(); ++
it) {
1077 inline void Update(
const std::map<std::string, std::map<std::string, double>>&
x) {
1078 std::map<std::string, std::map<std::string, double>>::const_iterator
it =
x.begin();
1079 for(;
it !=
x.end(); ++
it) {
1080 hash_.process_bytes(
it->first.c_str(),
it->first.size());
1089 hash_.get_digest(
d.val);
1094 boost::uuids::detail::sha1 hash_;
A type to represent variable-length array of bytes for dumping to a cyclus output database.
Wrapper class for QueryableBackends that injects a set of Cond's into every query before being execut...
virtual std::set< std::string > Tables()
Return a set of all table names currently in the database.
virtual std::map< std::string, DbTypes > ColumnTypes(std::string table)
Return a map of column names of the specified table to the associated database type.
CondInjector(QueryableBackend *b, std::vector< Cond > to_inject)
virtual QueryResult Query(std::string table, std::vector< Cond > *conds)
Return a set of rows from the specificed table that match all given conditions.
virtual std::list< ColumnInfo > Schema(std::string table)
Return information about all columns of a table.
Represents a condition used to filter rows returned by a query.
std::string op
One of: "<", ">", "<=", ">=", "==", "!=".
Cond(std::string field, std::string op, boost::spirit::hold_any val)
boost::spirit::hold_any val
value supported by backend(s) in use
CmpOpCode opcode
The CmpOpCode cooresponding to op.
std::string field
table column name
The digest type for SHA1s.
bool operator>=(const cyclus::Digest &rhs) const
bool operator!=(const cyclus::Digest &rhs) const
std::ostream & operator<<(std::ostream &out) const
std::vector< T > cast() const
Casts the value of this digest to a vector of the templated type.
bool operator>(const cyclus::Digest &rhs) const
bool operator<(const cyclus::Digest &rhs) const
bool operator<=(const cyclus::Digest &rhs) const
unsigned int val[CYCLUS_SHA1_NINT]
bool operator==(const cyclus::Digest &rhs) const
Interface implemented by backends that support recording and querying.
For failed retrieval/insertion of key-based data into/from data structures.
Wrapper class for QueryableBackends that injects prefix in front of the title/table for every query b...
virtual std::list< ColumnInfo > Schema(std::string table)
Return information about all columns of a table.
virtual QueryResult Query(std::string table, std::vector< Cond > *conds)
Return a set of rows from the specificed table that match all given conditions.
virtual std::map< std::string, DbTypes > ColumnTypes(std::string table)
Return a map of column names of the specified table to the associated database type.
PrefixInjector(QueryableBackend *b, std::string prefix)
virtual std::set< std::string > Tables()
Return a set of all table names currently in the database.
Meta data and results of a query.
std::vector< QueryRow > rows
ordered results of a query
std::vector< DbTypes > types
types of each field returned by a query.
std::vector< std::string > fields
names of each field returned by a query
T GetVal(std::string field, int row=0)
Convenience method for retrieving a value from a specific row and named field (column).
Interface implemented by backends that support rudimentary querying.
virtual std::map< std::string, DbTypes > ColumnTypes(std::string table)=0
Return a map of column names of the specified table to the associated database type.
virtual std::list< ColumnInfo > Schema(std::string table)=0
Return information about all columns of a table.
virtual ~QueryableBackend()
virtual QueryResult Query(std::string table, std::vector< Cond > *conds)=0
Return a set of rows from the specificed table that match all given conditions.
virtual std::set< std::string > Tables()=0
Return a set of all table names currently in the database.
An abstract base class for listeners (e.g.
void Update(const std::pair< std::string, std::vector< double > > &x)
void Update(const std::map< std::pair< std::string, std::string >, int > &x)
void Update(const std::map< int, std::map< std::string, double > > &x)
void Update(const std::map< std::string, cyclus::Blob > &x)
void Update(const std::map< std::string, double > &x)
void Update(const std::pair< double, std::map< int, double > > &x)
void Update(const Blob &b)
void Update(const std::set< std::string > &x)
void Update(const std::set< int > &x)
void Update(const std::list< cyclus::Blob > &x)
void Update(const std::set< double > &x)
void Update(const std::pair< double, double > &x)
void Update(const std::vector< int > &x)
void Update(const std::map< int, int > &x)
void Update(const std::list< std::pair< int, int > > &x)
void Update(const std::map< std::string, bool > &x)
void Update(const std::map< int, boost::uuids::uuid > &x)
void Update(const std::map< std::string, std::vector< std::pair< int, std::pair< std::string, std::string > > > > &x)
void Update(const std::pair< int, int > &x)
void Update(const std::pair< int, std::string > &x)
void Update(const std::set< float > &x)
void Update(const std::map< std::string, std::map< std::string, int > > &x)
void Update(const std::list< bool > &x)
void Update(const std::vector< double > &x)
void Update(const std::map< int, double > &x)
void Update(const std::map< int, float > &x)
void Update(const std::list< float > &x)
void Update(const std::vector< std::string > &x)
void Clear()
Clears the current hash value to its default state.
void Update(const std::map< std::string, float > &x)
void Update(const std::map< std::pair< int, std::string >, double > &x)
void Update(const std::map< std::string, std::map< int, double > > &x)
void Update(const std::list< std::string > &x)
void Update(const std::map< int, std::string > &x)
void Update(const std::list< boost::uuids::uuid > &x)
void Update(const std::map< std::string, std::vector< double > > &x)
void Update(const std::list< double > &x)
void Update(const std::map< int, bool > &x)
void Update(const std::list< int > &x)
void Update(const std::vector< boost::uuids::uuid > &x)
void Update(const std::pair< int, std::pair< std::string, std::string > > &x)
void Update(const std::vector< std::pair< std::pair< double, double >, std::map< std::string, double > > > &x)
void Update(const std::pair< std::pair< double, double >, std::map< std::string, double > > &x)
void Update(const std::vector< float > &x)
void Update(const std::set< cyclus::Blob > &x)
void Update(const std::map< std::string, std::map< std::string, double > > &x)
void Update(const std::map< std::string, int > &x)
void Update(const std::vector< cyclus::Blob > &x)
void Update(const std::set< bool > &x)
void Update(const std::map< int, cyclus::Blob > &x)
void Update(const std::set< boost::uuids::uuid > &x)
void Update(const std::map< std::string, std::pair< double, std::map< int, double > > > &x)
void Update(const std::map< std::string, std::pair< std::string, std::vector< double > > > &x)
void Update(const std::vector< std::pair< int, std::pair< std::string, std::string > > > &x)
void Update(const std::map< std::string, std::string > &x)
void Update(const std::string &s)
Updates the hash value in-place.
void Update(const std::map< std::string, boost::uuids::uuid > &x)
For failed object state expectations.
For values that are too big, too small, etc.
taken directly from OsiSolverInterface.cpp on 2/17/14 from https://projects.coin-or....
CmpOpCode
Represents operation codes for condition checking.
DbTypes
This is the primary list of all supported database types.
@ PAIR_VL_STRING_VL_STRING
@ VL_MAP_STRING_VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_MAP_STRING_INT
@ MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE
@ VL_MAP_STRING_MAP_INT_DOUBLE
@ VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_STRING_VECTOR_DOUBLE
@ VL_MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE
@ PAIR_STRING_VECTOR_DOUBLE
@ PAIR_STRING_VL_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_MAP_VL_STRING_DOUBLE
@ VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE
@ MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE
@ MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE
@ MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE
@ MAP_VL_STRING_VL_STRING
@ VL_MAP_VL_STRING_MAP_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_STRING
@ VL_MAP_STRING_VL_MAP_INT_DOUBLE
@ MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE
@ VL_MAP_STRING_VL_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE
@ PAIR_VL_STRING_VECTOR_DOUBLE
@ VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ PAIR_DOUBLE_VL_MAP_INT_DOUBLE
@ MAP_STRING_MAP_STRING_DOUBLE
@ VL_MAP_STRING_PAIR_VL_STRING_VECTOR_DOUBLE
@ VL_MAP_STRING_MAP_STRING_INT
@ MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE
@ MAP_INT_VL_MAP_STRING_DOUBLE
@ MAP_INT_MAP_STRING_DOUBLE
@ MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_VECTOR_DOUBLE
@ MAP_STRING_VECTOR_DOUBLE
@ PAIR_INT_PAIR_STRING_STRING
@ MAP_PAIR_STRING_VL_STRING_INT
@ VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_MAP_VL_STRING_INT
@ VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE
@ VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE
@ MAP_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE
@ VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ MAP_STRING_VL_MAP_STRING_INT
@ VL_MAP_INT_MAP_VL_STRING_DOUBLE
@ MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_VL_STRING_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_PAIR_STRING_VECTOR_DOUBLE
@ MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ MAP_VL_STRING_MAP_VL_STRING_INT
@ VL_MAP_STRING_VL_MAP_STRING_INT
@ VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ VL_MAP_PAIR_STRING_VL_STRING_INT
@ VL_MAP_STRING_MAP_VL_STRING_INT
@ VL_MAP_STRING_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_PAIR_VL_STRING_STRING_INT
@ VL_MAP_STRING_MAP_STRING_DOUBLE
@ VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE
@ MAP_STRING_MAP_STRING_INT
@ VL_MAP_INT_VL_MAP_VL_STRING_DOUBLE
@ VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ MAP_VL_STRING_VL_MAP_VL_STRING_DOUBLE
@ MAP_PAIR_INT_STRING_DOUBLE
@ VL_MAP_INT_MAP_STRING_DOUBLE
@ VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE
@ PAIR_INT_PAIR_VL_STRING_VL_STRING
@ MAP_STRING_VL_MAP_VL_STRING_INT
@ MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE
@ PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE
@ VL_MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE
@ MAP_VL_STRING_VL_MAP_VL_STRING_INT
@ MAP_VL_STRING_VL_MAP_STRING_INT
@ MAP_STRING_MAP_VL_STRING_DOUBLE
@ VL_MAP_STRING_VL_STRING
@ VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_PAIR_STRING_STRING_INT
@ MAP_PAIR_VL_STRING_VL_STRING_INT
@ MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_VL_STRING_MAP_VL_STRING_DOUBLE
@ MAP_STRING_VL_MAP_INT_DOUBLE
@ PAIR_INT_PAIR_VL_STRING_STRING
@ VL_MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_STRING_VL_MAP_STRING_DOUBLE
@ MAP_VL_STRING_VL_MAP_STRING_DOUBLE
@ VL_MAP_PAIR_INT_STRING_DOUBLE
@ VL_MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_INT_MAP_VL_STRING_DOUBLE
@ VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ RES_MAP_VL_STRING_PRODUCT
@ VL_MAP_STRING_PAIR_STRING_VECTOR_DOUBLE
@ MAP_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE
@ MAP_VL_STRING_MAP_STRING_DOUBLE
@ MAP_VL_STRING_VL_MAP_INT_DOUBLE
@ MAP_VL_STRING_PAIR_VL_STRING_VECTOR_DOUBLE
@ MAP_STRING_PAIR_STRING_VECTOR_DOUBLE
@ VL_MAP_VL_STRING_PAIR_STRING_VL_VECTOR_DOUBLE
@ MAP_STRING_VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ MAP_STRING_PAIR_STRING_VL_VECTOR_DOUBLE
@ MAP_PAIR_INT_VL_STRING_DOUBLE
@ MAP_STRING_PAIR_VL_STRING_VL_VECTOR_DOUBLE
@ MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_STRING
@ VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_VL_STRING_PAIR_DOUBLE_MAP_INT_DOUBLE
@ VL_MAP_VL_STRING_MAP_VL_STRING_INT
@ VL_MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ VL_MAP_VL_STRING_VL_MAP_STRING_DOUBLE
@ VL_MAP_VL_STRING_PAIR_DOUBLE_VL_MAP_INT_DOUBLE
@ MAP_STRING_MAP_INT_DOUBLE
@ MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_VL_STRING
@ VL_MAP_VL_STRING_VL_MAP_INT_DOUBLE
@ VL_MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_VL_STRING_STRING
@ VL_MAP_INT_VL_MAP_STRING_DOUBLE
@ VL_MAP_STRING_VL_MAP_VL_STRING_INT
@ VL_MAP_PAIR_VL_STRING_VL_STRING_INT
@ VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_PAIR_INT_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_VECTOR_DOUBLE
@ MAP_VL_STRING_MAP_STRING_INT
@ MAP_INT_VL_MAP_VL_STRING_DOUBLE
@ MAP_VL_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ RES_MAP_STRING_MATERIAL
@ VL_VECTOR_PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE
@ MAP_STRING_VL_MAP_STRING_DOUBLE
@ MAP_VL_STRING_VL_VECTOR_DOUBLE
@ VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ MAP_PAIR_VL_STRING_STRING_INT
@ PAIR_INT_PAIR_STRING_VL_STRING
@ VL_MAP_VL_STRING_VL_MAP_STRING_INT
@ MAP_STRING_VL_VECTOR_DOUBLE
@ PAIR_DOUBLE_MAP_INT_DOUBLE
@ MAP_STRING_MAP_VL_STRING_INT
@ VL_MAP_VL_STRING_MAP_INT_DOUBLE
@ MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ PAIR_PAIR_DOUBLE_DOUBLE_MAP_VL_STRING_DOUBLE
@ VL_MAP_VL_STRING_VL_MAP_VL_STRING_DOUBLE
@ VL_MAP_STRING_VECTOR_PAIR_INT_PAIR_STRING_VL_STRING
@ MAP_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ MAP_VL_STRING_MAP_INT_DOUBLE
@ MAP_VL_STRING_VL_VECTOR_PAIR_INT_PAIR_STRING_STRING
@ RES_MAP_VL_STRING_MATERIAL
@ PAIR_PAIR_DOUBLE_DOUBLE_MAP_STRING_DOUBLE
@ VL_MAP_PAIR_STRING_STRING_INT
@ PAIR_VL_STRING_VL_VECTOR_DOUBLE
std::vector< boost::spirit::hold_any > QueryRow
bool CmpCond(T *x, Cond *cond)
Compares a condiontion for a single value.
T OptionalQuery(InfileTree *tree, std::string query, T default_val)
a query method for optional parameters
bool CmpConds(T *x, std::vector< Cond * > *conds)
Compares all condiontions for a value.
Represents column information.
ColumnInfo(std::string default_table, std::string default_col, int default_index, DbTypes default_dbtype, std::vector< int > default_shape)