//----------------------------------------------------------- QString Gatilho::obterDefinicaoObjeto(unsigned tipo_def) { definirAtributosBasicosGatilho(tipo_def); /* Caso o gatilho não esteja referenciando alguma coluna incluída por relacionamento a mesma será declarada dentro do código da tabela pai e para tanto existe um atributo específico na definição SQL/XML do objeto chamado 'decl-in-table' que é usado para indicar ao parser quando a declaração do gatilho está dentro da declaração da tabela pai. Este atributo é usado apenas para ajudar na formatação do código SQL e não tem nenhuma outra utilidade. */ if(!referenciaColunaIncRelacao()) atributos[AtributosParsers::DECL_DENTRO_TABELA]="1"; if(this->tabela_pai) atributos[AtributosParsers::TABELA]=this->tabela_pai->obterNome(true); atributos[AtributosParsers::TIPO_DISPARO]=(~tipo_disparo); //** Gatilhos Restrições SEMPRE devem executar por linha (FOR EACH ROW) ** atributos[AtributosParsers::POR_LINHA]=((por_linha && !tabela_ref) || tabela_ref ? "1" : ""); atributos[AtributosParsers::CONDICAO]=condicao; if(tabela_ref) { atributos[AtributosParsers::TABELA_REF]=tabela_ref->obterNome(true); atributos[AtributosParsers::POSTERGAVEL]=(postergavel ? "1" : ""); atributos[AtributosParsers::TIPO_POSTERGACAO]=(~tipo_postergacao); } return(ObjetoBase::obterDefinicaoObjeto(tipo_def)); }
QString Restricao::obterDefinicaoObjeto(unsigned tipo_def, bool inc_insporrelacao) { QString atrib; atributos[AtributosParsers::REST_PK]=""; atributos[AtributosParsers::REST_FK]=""; atributos[AtributosParsers::REST_CK]=""; atributos[AtributosParsers::REST_UQ]=""; switch(!tipo) { case TipoRestricao::check: atrib=AtributosParsers::REST_CK; break; case TipoRestricao::primary_key: atrib=AtributosParsers::REST_PK; break; case TipoRestricao::foreign_key: atrib=AtributosParsers::REST_FK; break; case TipoRestricao::unique: atrib=AtributosParsers::REST_UQ; break; } atributos[atrib]="1"; atributos[AtributosParsers::TIPO]=atrib; atributos[AtributosParsers::ACAO_UPDATE]=(~acao_upd); atributos[AtributosParsers::ACAO_DELETE]=(~acao_del); atributos[AtributosParsers::EXPRESSAO]=exp_checagem; if(tipo!=TipoRestricao::check) { definirAtributoColunas(COLUNA_ORIGEM, tipo_def, inc_insporrelacao); /* Só gera a definição das colunas referenciadas da chave estrangeira caso o número de colunas da origem e destino sejam iguais, isso significa que a chave está configurada corretamente, caso contrário não gera o atributo forçando o parser de esquemas a retornar um erro pois a chave estrangeira está mal configurada. */ if(tipo==TipoRestricao::foreign_key && colunas.size() == colunas_ref.size()) definirAtributoColunas(COLUNA_REFER, tipo_def, inc_insporrelacao); } atributos[AtributosParsers::TABELA_REF]=(tabela_ref ? tabela_ref->obterNome(true) : ""); atributos[AtributosParsers::POSTERGAVEL]=(postergavel ? "1" : ""); atributos[AtributosParsers::TIPO_COMPARACAO]=(~tipo_comp); atributos[AtributosParsers::TIPO_POSTERGACAO]=(~tipo_postergacao); if(this->tabela_pai) atributos[AtributosParsers::TABELA]=this->tabela_pai->obterNome(true); /* Caso a restrição não esteja referenciando alguma coluna incluída por relacionamento a mesma será declarada dentro do código da tabela pai e para tanto existe um atributo específico na definição SQL/XML do objeto chamado 'decl-in-table' que é usado para indicar ao parser quando a declaração da restrição está dentro da declaração da tabela pai. Este atributo é usado apenas para ajudar na formatação do código SQL e não tem nenhuma outra utilidade. */ if(!referenciaColunaIncRelacao() || tipo==TipoRestricao::primary_key) atributos[AtributosParsers::DECL_DENTRO_TABELA]="1"; if(tipo==TipoRestricao::primary_key || tipo==TipoRestricao::unique) atributos[AtributosParsers::FATOR]=QString("%1").arg(fator_preenc); else atributos[AtributosParsers::FATOR]=""; return(ObjetoBase::obterDefinicaoObjeto(tipo_def)); }