void PyProblem::setMeshType(const std::string &meshType) { if (meshTypeStringKeys().contains(QString::fromStdString(meshType))) Agros2D::problem()->config()->setMeshType(meshTypeFromStringKey(QString::fromStdString(meshType))); else throw invalid_argument(QObject::tr("Invalid argument. Valid keys: %1").arg(stringListToString(meshTypeStringKeys())).toStdString()); }
void PyProblem::setTimeStepMethod(const std::string &timeStepMethod) { if (timeStepMethodStringKeys().contains(QString::fromStdString(timeStepMethod))) Agros2D::problem()->config()->setValue(ProblemConfig::TimeMethod, (TimeStepMethod) timeStepMethodFromStringKey(QString::fromStdString(timeStepMethod))); else throw invalid_argument(QObject::tr("Invalid argument. Valid keys: %1").arg(stringListToString(timeStepMethodStringKeys())).toStdString()); }
List * postgresGetAttributeNames (char *tableName) { List *attrs = NIL; PGresult *res = NULL; ASSERT(postgresCatalogTableExists(tableName)); if (MAP_HAS_STRING_KEY(plugin->plugin.cache->tableAttrs, tableName)) return (List *) MAP_GET_STRING(plugin->plugin.cache->tableAttrs,tableName); // do query ACQUIRE_MEM_CONTEXT(memContext); res = execPrepared(NAME_TABLE_GET_ATTRS, singleton(createConstString(tableName))); // loop through results for(int i = 0; i < PQntuples(res); i++) attrs = appendToTailOfList(attrs, strdup(PQgetvalue(res,i,0))); // clear result PQclear(res); MAP_ADD_STRING_KEY(plugin->plugin.cache->tableAttrs, tableName, attrs); DEBUG_LOG("table %s attributes are <%s>", tableName, stringListToString(attrs)); RELEASE_MEM_CONTEXT(); return attrs; }
void PyParticleTracing::setButcherTableType(const std::string &tableType) { if (!butcherTableTypeStringKeys().contains(QString::fromStdString(tableType))) throw invalid_argument(QObject::tr("Invalid argument. Valid keys: %1").arg(stringListToString(butcherTableTypeStringKeys())).toStdString()); Agros2D::problem()->setting()->setValue(ProblemSetting::View_ParticleButcherTableType, butcherTableTypeFromStringKey(QString::fromStdString(tableType))); }
void PyProblem::setCouplingType(const std::string &sourceField, const std::string &targetField, const std::string &type) { QString source = QString::fromStdString(sourceField); QString target = QString::fromStdString(targetField); checkExistingFields(source, target); if (Agros2D::problem()->hasCoupling(source, target)) { CouplingInfo *couplingInfo = Agros2D::problem()->couplingInfo(source, target); if (couplingTypeStringKeys().contains(QString::fromStdString(type))) couplingInfo->setCouplingType(couplingTypeFromStringKey(QString::fromStdString(type))); else throw invalid_argument(QObject::tr("Invalid coupling type key. Valid keys: %1").arg(stringListToString(couplingTypeStringKeys())).toStdString()); } else throw logic_error(QObject::tr("Coupling '%1' + '%2' doesn't exists.").arg(source).arg(target).toStdString()); }
/*! * \brief Add message to messagelog * \param message StringList */ void MainWindow::logMessage(QStringList message) { messageLog.append(message); MessageLogText->setText(stringListToString(messageLog)); MessageLogText->verticalScrollBar()->setValue(MessageLogText->verticalScrollBar()->maximum()); }
//TODO keylist should be a list/set of string sets, because an operator may have more than one candidate key each of which may consist of multiple attributes void computeKeyProp (QueryOperator *root) { List *keyList = NIL; List *rKeyList = NIL; if (root == NULL) return; // compute key properties of children first if(root->inputs != NULL) FOREACH(QueryOperator, op, root->inputs) computeKeyProp(op); // table acces operator or constant relation operators have predetermined keys if(isA(root, TableAccessOperator)) { TableAccessOperator *rel = (TableAccessOperator *) root; keyList = getKeyInformation(rel->tableName); setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)keyList); DEBUG_LOG("operator %s keys are {%s}", root->schema->name, stringListToString(keyList)); return; } else if (isA(root, ConstRelOperator)) { FOREACH(AttributeDef, a, root->schema->attrDefs) keyList = appendToTailOfList(keyList, strdup(a->attrName)); setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)keyList); DEBUG_LOG("operator %s keys are {%s}", root->schema->name, stringListToString(keyList)); return; } // get keys of children keyList = (List *) getStringProperty(OP_LCHILD(root), PROP_STORE_LIST_KEY); if (IS_BINARY_OP(root)) { List *newKeyList = NIL; rKeyList = (List *) getStringProperty(OP_RCHILD(root), PROP_STORE_LIST_KEY); newKeyList = concatTwoLists(keyList, rKeyList); setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)newKeyList); } // deal with different operator types // here we could use the ECs to determine new keys, e.g., if input has keys {{A}, {C}} and we have selection condition B = C, then we have a new key {{A}, {B}, {C}} if (isA(root, SelectionOperator)) setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)keyList); if (isA(root, ProjectionOperator)) { List *l1 = ((ProjectionOperator *)root)->projExprs; List *l2 = NIL; FOREACH(AttributeReference, op1, l1) l2 = appendToTailOfList(l2, op1->name); FOREACH(char, op, keyList) { if(!searchListString(l2, op)) { setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, NULL); break; } setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)keyList); } } // dup removal operator has a key {all attributes} if the input does not have a key if (isA(root, DuplicateRemoval)) { //List *l1 = getQueryOperatorAttrNames(OP_LCHILD(root)); //TODO Get the child's key property and Append it to above list and set it as property of duplicate operator setStringProperty((QueryOperator *)root, PROP_STORE_LIST_KEY, (Node *)keyList); } DEBUG_LOG("operator %s keys are {%s}", root->schema->name, stringListToString(keyList)); }