Página 1 de 1
LetoDb - Bug com Temporary Additive
Enviado: 17 Fev 2016 11:36
por asimoes
Pessoal,
Gostaria de uma confirmação sobre um bug com indices temporários usando a clausula Temporary ou Memory Additive com o rdd Leto
A situação é esta:
Em uma rotina eu faço isto:
O indice real da tabela APC01 é APC01.CDX
Código: Selecionar todos
APC01->(ordListClear()) //Remove o indice APC01.CDX da área de trabalho.
Até aqui tudo bem, não há indice na área de trabalho.
Só para confirmar que não há nenhum indice na área de trabalho, faço o For..Next OrdCont() que é zero
Código: Selecionar todos
FOR I:=1 TO APC01->(OrdCount())
? APC01->(OrdName(i))
? APC01->(OrdKey(i))
? APC01->(OrdFor(i))
inkey(0)
NEXT
Agora é criado o indice temporário:
Código: Selecionar todos
INDEX ON CODIGO TAG TEMPIND01 FOR !Deleted() TEMPORARY ADDITIVE //Aparentemente cria o indice temporário.
O Problema que eu verifiquei é que o aquivo APC01.CDX foi atualizado!!!???
Então temos um bug na criação de indices temporários com LetoDb?
Fiz o mesmo teste em um programa sem letodb usando somente o rdd dbfcdx
O resultado do teste foi sem erro, o indice temporário foi criado e o indice fisico apc01.cdx não foi modificado.
Código: Selecionar todos
USE APC01 ALIAS APC01 SHARED NEW VIA "DBFCDX"
INDEX ON CODIGO TAG CODIGO TO APC01
APC01->(DbCloseArea())
USE APC01 ALIAS APC01 SHARED NEW VIA "DBFCDX"
SET INDEX TO APC01.CDX
FOR I:=1 TO APC01->(OrdCount())
? APC01->(OrdName(i))
? APC01->(OrdKey(i))
? APC01->(OrdFor(i))
inkey(0)
NEXT
APC01->(OrdListClear())
FOR I:=1 TO APC01->(OrdCount()) //verifica se há algum indice
? APC01->(OrdName(i))
? APC01->(OrdKey(i))
? APC01->(OrdFor(i))
inkey(0)
NEXT
INDEX ON UTI+CODIGO TAG TEMPIND01 FOR UTI="S" .AND. !Left(Classe_Pg,2) $ "06,08,10,11,12" .AND. Empty(D_Faleci) .AND. Empty(D_Deslig) .AND. !Deleted() TEMPORAY ADDITIVE
FOR I:=1 TO APC01->(OrdCount())
? APC01->(OrdName(i))
? APC01->(OrdKey(i))
? APC01->(OrdFor(i))
inkey(0)
NEXT
LetoDb - Bug com Temporary Additive
Enviado: 17 Fev 2016 13:03
por asimoes
Informação complementar:
Fiz o teste com HBNETIO e não houve o erro, o bug é no LetoDb
LetoDb - Bug com Temporary Additive
Enviado: 17 Fev 2016 14:21
por asimoes
Caraca,
Esse bug tá fazendo o indice inflar mais que balão de circo.
Vou ter voltar pro hbnetio.
LetoDb - Bug com Temporary Additive
Enviado: 17 Fev 2016 20:01
por JoséQuintas
Mas encontrou algum problema com hbnetio, ou apenas quis testar lettodb?
Só lembrando:
O servidor hbnetio vém pronto pra uso no Harbour.
Sinceramente... nem sei como instalar. Acho que faz mais de um ano que instalei e nunca precisei mexer.
Continua rodando até hoje.
LetoDb - Bug com Temporary Additive
Enviado: 17 Fev 2016 20:46
por asimoes
Quintas,
Mas encontrou algum problema com hbnetio, ou apenas quis testar lettodb?
Com hbnetio, está funcionando, da mesma forma se usar somente o rdd dbfcdx
O problema é com o letodb, mesmo usando ordlistclear() o letodb atualiza o indice fisico, para indices criados com temporary ou memory.
cada vez que faço uso do temporário ele bagunça o indice fisico como eu disse "inflando" erro critico! espero que alguém aqui confirme este bug que eu estou informando.
LetoDb - Bug com Temporary Additive
Enviado: 03 Mar 2017 02:16
por fladimir
Fiquei na dúvida, mas como o assunto é relativo a LetoDB e Additive Temporary vou postar aki...
Só um detalhe estou testando o
LetoDB FORK (conforme tópico)
nas chamadas q tem Additive Temporary esta dando problema... exemplo:
Código: Selecionar todos
********************************************************************************
PROCEDURE Consulta()
********************************************************************************
private dDt1, dDt2
dDt1 := date()
dDt2 := date()
Abre('Vendas')
INDEX ON RIGHT(Vendas->NrVenda,4) TO (temporario) ;
FOR Vendas->Data >= dDt1 .and. Vendas->Data <= dDt2 ADDITIVE TEMPORARY // Aki da erro no Log esta: Error Base/1003 Variable does not exist: dDt1 (sendo q tem)
...
return
LetoDb - Bug com Temporary Additive
Enviado: 03 Mar 2017 09:08
por Itamar M. Lins Jr.
Ola!
Já tinha passado por este problema com o LetoDBf.
Código: Selecionar todos
2016-12-28 11:11 UTC+0100 Rolf 'elch' Beckmann (elchs users.noreply.github.com)
* include/letocl.h
* source/client/leto1.c
* source/client/letocl.c
+ fExlusive flag for creating index
! fix LetoDbSkip() skipbuffer use
; Thanks! to Itamar for pointig to it
* source/server/letofunc.c
+ fExlusive flag for creating index
! fix filename verification for fTemporary index
* Readme.txt
* source/server/leto_lnx.c
* source/server/server.prg
+ adding UID and GID for Linux server to run as daemon
Tem que ativar isso, no letodb.ini "No_Save_WA = 1"
# Using temporary index orders [ created in Server OS temporary path ] are only possible in
mode: NO_Save_Wa = 1.
Leia o readme.txt tem mais coisas lá.
Saudações,
Itamar M. Lins Jr.
LetoDb - Bug com Temporary Additive
Enviado: 03 Mar 2017 09:12
por Itamar M. Lins Jr.
Ola!
Quanto ao outro problema com o Letodb... vem a mesma resposta que estamos acostumados:
Tem que criar um programinha simples que demonstre o problema para que todos possam testar.
Saudações,
Itamar M. Lins Jr.
LetoDb - Bug com Temporary Additive
Enviado: 03 Mar 2017 21:37
por fladimir
A propriedade q vc citou no letodb.ini já estava setada igual ao mencionado.
Segue exemplo q independente se é Temporario (preciso tb) ou não o erro ocorre, então pra isolar fiz um exemplo sem o temporário pra após contornado ver se o temporário vai funcionar.
Código: Selecionar todos
#include 'rddleto.ch'
func erro()
LOCAL cPath, nConnect
PRIVATE dt1 := Date()-30,; //----> Pensei q pudesse ser visibilidade tentei LOCAL, PRIVATE, STATIC, PUBLIC
dt2 := Date()
cPath := "//AKI_VAI_O_IP:2812/"
RDDSETDEFAULT( 'LETO' )
nConnect := leto_Connect(cPath)
if nConnect == -1
nRes := leto_Connect_Err()
if nRes == LETO_ERR_LOGIN
alert( "Falha ao Logar" )
elseif nRes == LETO_ERR_RECV
alert( "Error ao conectar" )
elseif nRes == LETO_ERR_SEND
alert( "Erro de envio" )
else
alert( "Nao connectado ao servidor: " + cPath )
endif
return .F.
endif
DBCLOSEALL()
DbUseArea( .T., 'LETO', 'VENDAS', 'VENDAS', .T.)
DBSETINDEX('VENDAS')
INDEX ON RIGHT(VENDAS->NrVenda,4) TO Teste1 FOR VENDAS->DtVenda >= dt1 .and. VENDAS->DtVenda <= dt2 //--> Tentei trocar o nome das variáveis, tirar a referencia do alias VENDAS->
RETURN //--> Aki o original ‚ TEMPORARY (no letodb.ini esta setado akela sugestao) mas tirei pq tb nao deu certo
O Erro permanece dizendo q a variavel não é encontrada (segue imagem)
LetoDb - Bug com Temporary Additive
Enviado: 03 Mar 2017 23:27
por cl@udio
Boa noite a todos.
Fladimir
Tem algum problema com as clausulas FOR e WHILE.
Tenho este problema algumas vezes.
Apago todos os indices temporarios, e volta ao normal.
Mas ainda nao consegui identificar o erro.
Pois a TAG e totalmente diferente.
Trabalho com CDX.
[]s
Claudio
LetoDb - Bug com Temporary Additive
Enviado: 04 Mar 2017 00:35
por fladimir
Claudio obrigado pela atenção, mas se observar no código, estou testando sem ser indice temporário e ocorre o problema
LetoDb - Bug com Temporary Additive
Enviado: 04 Mar 2017 09:49
por fladimir
Se no exemplo postado eu trocar a condição do FOR para texto conforme abaixo, funciona, tanto pra indice normal ou temporario.
Código: Selecionar todos
cCondicao := "VENDAS->DtVenda >= " + DTOC(dt1) + " .and. VENDAS->DtVenda <= " + DTOC(dt2) //--> fazendo assim da certo
INDEX ON RIGHT(VENDAS->NrVenda,4) TO Teste1 FOR &cCondicao TEMPORARY // Ai funciona das 2 formas sem TEMPORARY e com.
Não sei se pode ser alguma configuração ou se é questão de avisar o pessoal da LETODB, se mais alguém pudesse testar o código exemplo e comprovar se a hipótese esta correta.
De qualquer forma vou continuar os testes aki pra ver como se comporta.
Agora, caso os testes dos colegas e a hipótese acima se confirme, pra não ter q mudar os meus INDEX.... vou ver pra fazer um
Mas isso seria um assunto para depois de avaliarmos as opções disponíveis.
[] 's
LetoDb - Bug com Temporary Additive
Enviado: 04 Mar 2017 10:05
por Itamar M. Lins Jr.
Ola!
O erro está correto.
A variável DT1 não existe do lado do servidor. Assim como não funcionará em qualquer sentença SQL. Tem que expandir mesmo
Código: Selecionar todos
cQuery := " dtos(vencimento) >= '"+dtos(dIni)+"' .and. dtos(vencimento) <= '"+dtos(dFim)+"' "
cOrdBy := " dtos(vencimento) + cod_banco + numero " //conta + dtos(vencimento) "
dbSelectArea('ch')
IF ch->(ordNumber("CH100")) > 0
ch->(ordDestroy("CH100"))
EndIf
Index on &cOrdBy TAG ch100 FOR &cQuery temporary additive
Saudações,
Itamar M. Lins Jr.
LetoDb - Bug com Temporary Additive
Enviado: 04 Mar 2017 10:17
por fladimir
Obrigado Itamar por confirmar minha avaliação e prestar um esclarecimento do pq não achar a variavel q é pq do lado do Servidor não tem. Ok.
[] 's