REST-DataWare icon indicating copy to clipboard operation
REST-DataWare copied to clipboard

Parâmetros do tipo Bytes (representando um GUID) dá erro em relacionamento Master/Detail.

Open EvertonGarcia opened this issue 3 years ago • 3 comments

Descrição do bug Parâmetros do tipo Bytes (representando um GUID) dá erro em relacionamento Master/Detail.

Criei um campo CHAR(16) com charset OCTETS no Firebird para armazenar as PKs em formato GUID. No Delphi, estes campos são do tipo TBytesField.

Ao adicioná-los como parâmetros ou em RelationsFields, o parâmetro, por padrão, fica como TBytes.

Na hora de dar um Post no Mestre, ocorre o erro abaixo.

image

Mesmo modificando o tipo do parâmetro para TGuid, o erro ainda ocorre. Debugando, identifiquei que o problema está na unit uRESTDWPoolerDB, na validação feita em CloneDetails (linhas 10413 a 10416 e 10444 e 10448) (TRESTDWClientSQL.PrepareDetails). Retirando estas linhas, o erro não ocorre.

Esta mesma validação também é feita na CloneDetails de TRESTDWTable.PrepareDetails. (Aqui não fiz o teste).

Comportamento esperado

Informações técnicas:

  • OS: Windows 10
  • Versão do RDW: 1.4.3-2923 SVN
  • Plataforma de destino de compilação: Windows 10 32 bits

EvertonGarcia avatar Apr 04 '22 21:04 EvertonGarcia

ByteArray e Integer não são compatíveis porque o ByteArray pode ser maior que o Integer. Se for uma sequência numérica de 16 dígitos como você especificou com CHAR(16), daí isso daí teria que ser Int64 porque o integer só aceita 10 dígitos.

Se tratando de um GUID, considerando que ele tem um formato próprio alfanumérico, o correto seria usar o tipo String e não TBytes.

Confere esses passos e se ainda sim persistir o problema a gente dá uma analisada no código e modifica as validações se precisar.

mobius1qwe avatar Apr 04 '22 21:04 mobius1qwe

A escolha por CHAR(16) e charset OCTETS seguiu a orientação do próprio Firebird de armazenamento de GUIDs. E quando adicionado os fields nos DataSets, automaticamente eles vêm como TBytesField.

O problema, como mencionei, ocorre numa validação que é feita apenas para verificar se os parâmetros possuem o mesmo valor e caso possuam, sair da rotina.

EvertonGarcia avatar Apr 04 '22 21:04 EvertonGarcia

Poderia confirmar se o erro persiste na versão nova por gentileza?

mobius1qwe avatar Aug 22 '22 12:08 mobius1qwe

Tarefa encerrada por falta de interação, caso problema persista abrir novamente.

mobius1qwe avatar Sep 04 '22 01:09 mobius1qwe