quint64 CommandHandler::findOperationId(const OperationExpression& expr) const { QSqlQuery db(kernel()->database()); QSqlQuery db2(kernel()->database()); QString query = QString("select * from mastercatalog where resource like '%1%' ").arg(expr.metaUrl().toString()); if (db.exec(query)) { while ( db.next()){ quint64 itemid = db.value("itemid").toLongLong(); query = QString("select * from catalogitemproperties where itemid=%1").arg(itemid); if (db2.exec(query)) { std::map<QString, QString> values; while ( db2.next()){ QSqlRecord rec = db2.record(); values[rec.value("propertyname").toString()] = rec.value("propertyvalue").toString(); } QString parmcount = values["inparameters"]; if ( !expr.matchesParameterCount(parmcount)) continue; bool found = true; long index; if ( (index = parmcount.indexOf('+')) != -1) { index = parmcount.left(index).toUInt(); } else index = 10000; for(long i=0; i < expr.parameterCount(); ++i) { int n = min(i+1, index); QString key = QString("pin_%1_type").arg(n); IlwisTypes tpExpr = expr.parm(i).valuetype(); auto iter = values.find(key); if ( iter == values.end()){ found = false; break; } IlwisTypes tpMeta = (*iter).second.toULongLong(); if ( (tpMeta & tpExpr) == 0 && tpExpr != i64UNDEF) { found = false; break; } } if ( found) return itemid; } } } ERROR2(ERR_NO_INITIALIZED_2,"metadata",expr.name()); return i64UNDEF; }