void TypeWidget::showAttributeData(TypeAttribute attrib, int row) { attributes_tab->setCellText(attrib.getName(), row, 0); attributes_tab->setCellText(*attrib.getType(), row, 1); if(attrib.getCollation()) attributes_tab->setCellText(attrib.getCollation()->getName(true), row, 2); else attributes_tab->clearCellText(row,2); attributes_tab->setRowData(QVariant::fromValue<TypeAttribute>(attrib), row); }
void Type::addAttribute(TypeAttribute attrib) { //Raises an error if the attribute has an empty name or null type if(attrib.getName().isEmpty() || attrib.getType()==PgSQLType::null) throw Exception(ERR_INS_INV_TYPE_ATTRIB,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error if the passed attribute has the same type as the defining type (this) else if(PgSQLType::getUserTypeIndex(this->getName(true), this) == !attrib.getType()) throw Exception(Exception::getErrorMessage(ERR_USER_TYPE_SELF_REFERENCE).arg(this->getName(true)), ERR_USER_TYPE_SELF_REFERENCE,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Raises an error when the attribute already exists else if(getAttributeIndex(attrib.getName()) >= 0) throw Exception(ERR_INS_DUPLIC_ITEMS,__PRETTY_FUNCTION__,__FILE__,__LINE__); type_attribs.push_back(attrib); setCodeInvalidated(true); }
void TypeWidget::handleAttribute(int row) { try { TypeAttribute attrib; attrib.setName(attrib_name_edt->text().toUtf8()); attrib.setType(attrib_type_wgt->getPgSQLType()); attrib.setCollation(attrib_collation_sel->getSelectedObject()); showAttributeData(attrib, row); attrib_name_edt->clear(); attrib_collation_sel->clearSelector(); } catch(Exception &e) { if(attributes_tab->getCellText(row,0).isEmpty()) attributes_tab->removeRow(row); throw Exception(e.getErrorMessage(), e.getErrorType(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e); } }