50 m_QualsChangedCount = 0;
52 _ASSERT(m_CmdComposite && m_DataIter);
55 if (!x_IsNestedFunctionReturnValid()) {
59 if (!x_ValidArguments()) {
74 for (; it != it_end; ++it) {
104 if (res_oi.empty()) {
114 while (elem.
Valid()) {
167 if (index <
m_Args.size()) {
182 remove_field =
false;
183 if (++index <
m_Args.size()) {
184 if (
m_Args[index]->IsString()) {
187 else if (
m_Args[index]->IsBool()) {
188 remove_field =
m_Args[index]->GetBool();
191 if (++index <
m_Args.size()) {
192 remove_field =
m_Args[index]->GetBool();
205 for (
const auto& other_it :
log.m_ChangedQuals) {
207 it->second += other_it.second;
233 msg +=
" fields during " + it.first +
"\n";
252 if (dbtag && dbtag->IsSetDb()) {
253 dbtag->GetLabel(&orig_value);
260 if (!db.empty() && !
tag.empty()) {
264 dbtag->SetTag().SetId(
id);
266 dbtag->SetTag().SetStr(
tag);
Subclass of the IQueryParseUserObject which is held as the user-defined object in each CQueryParseNod...
class CMacroExecException
definition of a Culling tree
Base class for any user function that performs editing operations on ASN.1 data.
IMacroBioDataIter - common interface of all iterators used in the editing macros The type of the iter...
const_iterator end() const
const_iterator find(const key_type &key) const
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
void x_AssignReturnValueFromContainer(const CObjectInfo &oi, const string &container, const string &field_name)
bool SetQualStringValue(CObjectInfo &oi, const string &value)
Functions make the action and collect statistics.
ENestedFunc m_Nested
flag indicating whether the function is nested within another function
list< SResolvedField > TObs
void AssignFromObjectInfo(const CObjectInfo &objinfo)
Assigns data from objinfo. It is used when storing evaluation result.
void Dereference()
If it is a reference it is resolved to the first non reference type in the hierarchy.
const TObs & GetObjects() const
bool ResolveIdentToObjects(const CObjectInfo &oi, const string &identifier, CMQueryNodeValue &v)
Resolve name to the list of objects.
void SetDataType(EType dt)
virtual string x_Print() const
void x_AssignReturnValue(const CObjectInfo &oi, const string &field_name)
Assigns value to m_Result. It is mostly useful for functions used in the WHERE clause.
EType GetDataType() const
void x_GetOptionalArgs(string &delimiter, bool &remove_field, size_t &index)
Int4 m_QualsChangedCount
Number of changed qualifiers during the function call.
bool GetFieldsByName(CMQueryNodeValue::TObs *results, const CObjectInfo &oi_i, const string &field_name)
Resolve existing dot qualified ASN.1 name (field_name) starting from the object information instance ...
void x_GetObjectsFromRef(CMQueryNodeValue::TObs &objects, const size_t &index)
virtual void x_SetUserObjects(CQueryParseTree::TNode &qnode) override
Extracts the function arguments and initializes m_Result member.
CRef< CMQueryNodeValue > m_Result
TChangedQuals m_ChangedQuals
#define DEFINE_MACRO_FUNCNAME(CL_NAME, FN_NAME)
virtual string x_Print() const
string m_FuncName
Name of the function as it's been used in the script.
IFunctionLog(const TChangedQuals &quals)
void SetObjects(const TObs &obs)
virtual bool x_ValidArguments() const
Tests the number and the type of function arguments.
bool Merge(const IFunctionLog &log)
size_t TMemberIndex
Type used for indexing class members and choice variants.
static const TObjectType * SafeCast(TTypeInfo type)
@ ePrimitiveValueString
string|char*|const char*
@ ePrimitiveValueEnum
enum
CElementIterator BeginElements(void) const
Create container elements iterator.
CObjectInfo GetPointedObject(void) const
Get data and type information of object to which this type refers.
CObjectInfo GetElement(void) const
Get element data and type information.
TObjectPtr GetObjectPtr(void) const
Get pointer to object.
void SetPrimitiveValueString(const string &value)
bool Valid(void) const
Is iterator valid.
CMemberIterator GetClassMemberIterator(TMemberIndex index) const
Create class member iterator that initially points to specified member.
ETypeFamily GetTypeFamily(void) const
Get data type family.
void GetPrimitiveValueString(string &value) const
Get string data.
Int4 GetPrimitiveValueInt4(void) const
Get data as Int4.
const string & GetName(void) const
Get type name.
EPrimitiveValueType GetPrimitiveValueType(void) const
Get type of primitive value.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
TObjectType * GetPointerOrNull(void) THROWS_NONE
Get pointer value.
TObjectType & GetNCObject(void) const
Get object.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
static string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)
Convert size_t to string.
static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
static bool EqualCase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-sensitive equality of a substring with another string.
static bool SplitInTwo(const CTempString str, const CTempString delim, string &str1, string &str2, TSplitFlags flags=0)
Split a string into two pieces using the specified delimiters.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
@ fConvErr_NoThrow
Do not throw an exception on error.
TNodeList::iterator TNodeList_I
TNodeList_CI SubNodeBegin(void) const
Return first const iterator on subnode list.
TNodeList_CI SubNodeEnd(void) const
Return last const iterator on subnode list.
Macro engine for macro execution.
Functions that resolve field names described in asn format.
static const char delimiter[]