Descrição:

Classe com métodos estáticos que permitem ligar e desligar o cache de query do DBAccess.

O cache é mantido na DBAPI e consome uma quantidade de memória proporcional ao retorno da query.

Caso EXATAMENTE a mesma query seja executada, o retorno será diretamente do cache da DBAPI, tendo assim uma performance muito superior a uma nova consulta no banco de dados.

Importante:

É necessário sempre ligar o cache antes de executar a query e depois de executada desligar o mesmo.

Disponível a partir da lib label 20200908. Para saber o label de uma lib via advpl : FwLibVersion



Métodos:



TurnOnCache

Descrição:
Liga o cache para as queries


Sintaxe:

FwQueryCache():TurnOnCache( <cLifeTime> , <cTimeOut> )


Parâmetros

NomeTipoDescriçãoObrigatórioReferência
cLifeTimeCaractereDefine se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundosX
cTimeOutCaractereDefine se a query vai ficar no cache do DBAccess e qual o timeout dela em segundosX


TurnOffCache

Descrição:
Desliga o cache para as queries


Sintaxe:

FwQueryCache():TurnOffCache()



Exemplo de utilização:


#include "protheus.ch"
 
#define C_GRUPO  "99"
#define C_FILIAL "01"
 
//-------------------------------------------------------------------
/*{Protheus.doc} cacheQry
Exemplo de utilização da classe FWQueryCache, classe responsável
por criar um cache na DBAPI da query aberta
 
@author Daniel Mendes
@since 28/08/2020
@version 1.0
*/
//-------------------------------------------------------------------
user function cacheQry()
local cAlias as char
local cQuery as char

RpcSetEnv(C_GRUPO, C_FILIAL)

cAlias := GetNextAlias()
cQuery := "SELECT ED_CODIGO FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' '"

FwQueryCache():TurnOnCache("120", "60")

DBUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), cAlias, .T., .T.)

FwQueryCache():TurnOffCache()

while !(cAlias)->(Eof())
    ConOut((cAlias)->ED_CODIGO)
    (cAlias)->(DBSkip())
enddo

(cAlias)->(DBCloseArea())

RpcClearEnv()

return