Esempio n. 1
0
//-----------------------------------------------------------
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));
}
Esempio n. 2
0
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));
}