Versão 61

Melhorias

Desenvolvimento

Engine

  • A propriedade DetailedError.prototype.errorCode foi renomeada para code e passa a aceitar códigos alfanuméricos. O uso de códigos textuais passa a ser recomendado, pois simplifica a criação de erros sem colisão dos seus códigos de identificação. Na versão atual do sistema os códigos de erro não podem conter os caracteres “.”, “(”, “/” e " " (espaço), e devem ser informados por meio do quarto parâmetro do construtor DetailedError. Em versões antigas do Engine esse parâmetro também era utilizado para informar a propriedade sourceLocation. Essa propriedade não deveria estar sendo mais utilizada em códigos JavaScript e essa recomendação passa a ser reforçada devido a possibilidade de conflitar o seu uso com os códigos de erro textuais. A leitura da propriedade errorCode foi mantida para fins de compatibilidade. Mais detalhes na documentação da classe DetailedError.
  • Foi criada a propriedade QueryUtilities.prototype.maxInOperatorListLength com o objetivo de determinar a quantidade máxima de elementos testados pelo operador IN nas cláusulas SQL geradas pelo QueryUtilities, sendo o seu valor padrão 900 em todos os SGBDs suportados pelo sistema. Em versões anteriores, o sistema adotava uma quantidade dinâmica de acordo com o SGBD utilizado e a quantidade de valores a serem filtrados. Esse comportamento dinâmico se devia a falhas dos otimizadores de planos de execução que não se observam mais nos SGBDs em suas versões atuais e, que em algumas situações, acabava por gerar planos ineficientes de execução.

Extensão VS Code

  • Ao tentar efetuar uma alteração na Virtual File System em uma base que não seja de desenvolvimento e que não esteja com a opção de alterações de produtos habilitada, o usuário passa a ser perguntado se deseja habilitar essa opção e tentar novamente.
  • A extensão passa a contar com o comando Update To, utilizado para enviar alterações em um arquivo da Virtual File System para outra base de dados. O comando cria uma alteração pendente no Source Control da base de destino.

Defeitos corrigidos

Desenvolvimento

  • A atualização do sistema falhava caso houvesse um registro na VFS sem o nome preenchido. O processo de atualização passa a renomear o arquivo para “unnamed_<chave>” para dar visibilidade a inconsistência.

Engine

  • O registro dos erros na tabela de log transacional falhava no Oracle caso o tamanho da mensagem de erro fosse superior a 4000 caracteres.
  • Conexões entre Engines nem sempre eram interrompidas ao abortar a execução de uma sessão Javascript.
  • O uso do módulo assert como função (assert(value)) não validava corretamente se o valor informado era verdadeiro. Apesar dessa forma de uso ser incomum, testes unitários podem ser afetados por essa correção e passarão a validar corretamente o valor informado, sendo necessária a revisão desses testes caso o valor não seja verdadeiro. A chamada assert() é equivalente a assert.ok(), sendo essa última a forma preferível de uso. Mais detalhes em assert.ok.
  • A criação de chaves poderia ser lenta caso o Engine estivesse offline, mesmo quando existiam chaves disponíveis no cache.

Extensão VS Code

  • A reordenação das bases de dados falhava em workspaces criados após a atualização para a versão 59 da extensão.
  • Ao executar um script utilizando o runtime JavaScript V8 não era exibida a pilha de chamadas dos erros.
  • A exibição do resultado de um script falhava com o erro “Cannot read properties of undefined” caso fosse lançado um objeto diferente de um erro via operador throw.

Web Framework

  • Ao alterar o campo “Apenas para agrupamento” no Classes Explorer não era verificado se a classe configurada para agrupamento já tinha registros associados a ela, nem se o usuário tinha permissão de modificar a classe, no caso de classes de chave negativa, definidas pelos produtos do sistema.
  • Ao alterar uma configuração geral por meio da grade criada pela função newSettingsGrid poderia ocorrer a perda da configuração caso o valor informado fosse igual ao valor inicial apresentado pela grade.
  • Ao solicitar a redefinição da senha de um usuário sem política de segurança associada ocorria o erro “dbkey is not a function”.

Outras alterações

Engine

  • Ao retornar um DetailedError em uma rota HTTP o valor da propriedade error estava sendo retornado na propriedade message. Agora a propriedade error do objeto retornado passa a ser preservada e a propriedade message passa a conter uma mensagem contendo todas as propriedades do erro, comportamento similar ao da classe DetailedError.
  • O módulo @nginstack/engine/lib/testing/AssertionError foi removido. A classe de erro definida por esse módulo continua acessível via propriedade assert.AssertionError.
  • O parâmetro legado dbType da função QueryUtilities.prototype.clauseWhereOfKeys foi eliminado, pois o seu uso não altera mais o resultado da função.

Extensão VS Code

  • As opções de movimentação e reordenação no menu de contexto das bases de dados passam a ser agrupadas no submenu “Move”.

Web Framework

  • Os parâmetros de construção da página de login padrão do sistema enviados pela URL passam a ser codificados de maneira a reduzir sua previsibilidade. Essa mudança é necessária, pois algumas ferramentas automatizadas poderiam detectar o comportamento antigo como vulnerável a Cross-site Request Forgery.