Olá Armin,
Realmente é isso que está acontecendo, minha aplicação é .NET, ADO.
Observei no código gerado e está com 10 ao invés de 1:
new GeneXus.Data.NTier.ADO.CursorDef("P000I5", "scmdbuf",false,
GxErrorMask.GX_NOMASK | GxErrorMask.GX_MASKLOOPLOCK, false,
this,prmP000I5,10,0,true,false ) // lembrando que foi na string
scmdbuf que eu concatenei o limit depois, e funcionou
Eu suspeitava que o exit direto no for each realmente colocava o
limit, acabei ficando confuso hoje com esse caso, mas então estou numa
situação específica de bug. De qualquer forma seria interessante a
cláusula limit no genexus, já que apenas o exit imediatamente antes do
endfor gera o limit, o que na minha situação, forçaria a leitura de um
a um (até achar o desejado claro) e controle do while para continuar
no que parou, sendo que se eu pudesse especificar o limit (500 por
exemplo) eu poderia ler um range maior, assim como no exemplo que eu
fiz, alterando o código fonte.
Abraços e obrigado!
Pedro C.
On 30 jun, 16:33, "Armin Bachmann" <
ar...@artech.com.uy> wrote:
> Pedro y todos, disculpen las confusiones.
> Hay 2 temas aquí.
> 1) lo específicamente reportado por Pedro:
> Si se tiene trn1 con A* B y se hace un
> For each
> Where B = 1
> &A = A
> exit
> Endfor
> Esto A partir de GX 9.0 y la implementación dehttp://
wiki.gxtechnical.com/commwiki/servlet/hwiki?For+Each+Exit, debería generar un
> SELECT B, A FROM TRN01 WHERE B = 1 ORDER BY A LIMIT 1
>
> Hay un BUG que solamente sucede con .NET y
ADO.NET. En este caso está generando
> new GeneXus.Data.NTier.ADO.CursorDef("P00012", "SELECT B, A FROM TRN01 WHERE B = 1 ORDER BY A ",false, GxErrorMask.GX_NOMASK | GxErrorMask.GX_MASKLOOPLOCK, false, this,prmP00012,10,0,false,true )
> Esta bien que no genere el limit 1 en la sentencia porque el dataprovider de postgresql tiene un bug que hace que cuando es una sentencia single row le agrega automáticamente el limit 1.
> Lo que sí esta mal es el 10 ese que esta ahí al final, antes del "0, false, true", deberia ser 1 (que es el blocksize, porque solo cuando es 1 hace que se ejecute como single row y por tanto el driver le agregue el limit 1).
>
> En .NET con ODBC y en JAVA lo esta generando OK, con LIMIT.
>
> Agregué un SAC 26688 y les pido que vean por las vías oficiales de soporte (
www.gxtechnical.com/tracking) de obtener un fix si es necesario.