Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
Descrição:
Classe com métodos estáticos que faz a execução de uma query no DBAccess utilizando do cache de queries.
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.
Disponível a partir da lib label 20200908. Para saber o label de uma lib via advpl : FwLibVersion
Métodos:
OpenQuery
Descrição:
Executa uma query no banco de dados e faz o cache da mesma
Sintaxe:
FwExecCachedQuery():OpenQuery( <cQuery> , <cAlias>, <aSetField> , <cDriver> , <cLifeTime> , <cTimeOut> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cQuery | Caractere | Query a ser executada | X | |
cAlias | Caractere | Alias no qual a query será aberta | X | |
aSetField | Array | Array com os campos para execução de TCSetField com a estrutura | ||
cDriver | Caractere | Driver de abertura da tabela | ||
cLifeTime | Caractere | Define se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundos | X | |
cTimeOut | Caractere | Define se a query vai ficar no cache do DBAccess e qual o timeout dela em segundos | X |
Retorno:
cAlias → Alias no qual a query foi aberta
ExecScalar
Descrição:
Executa uma query no banco de dados, fazendo cache da mesma e retornando apenas a primeira coluna da primeira linha
Sintaxe:
FwExecCachedQuery():ExecScalar( <cQuery> , <cColumn> , <cLifeTime> , <cTimeOut> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cQuery | Caractere | Query a ser executada | X | |
cColumn | Caractere | Nome da coluna a ser retornada | X | |
cLifeTime | Caractere | Define se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundos | X | |
cTimeOut | Caractere | Define se a query vai ficar no cache do DBAccess e qual o timeout dela em segundos | X |
Exemplo de utilização:
Bloco de código | ||||
---|---|---|---|---|
| ||||
#include "protheus.ch" #define C_GRUPO "99" #define C_FILIAL "01" //------------------------------------------------------------------- /*{Protheus.doc} QryCached Exemplo de utilização da classe FwExecCachedQuery, classe responsável por abrir queries já efetuando cache de seu retorno @author Daniel Mendes @since 28/08/2020 @version 1.0 */ //------------------------------------------------------------------- user function QryCached() local cAlias as char local cQuery as char RpcSetEnv(C_GRUPO, C_FILIAL) cQuery := "SELECT ED_CODIGO FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' '" cAlias := FwExecCachedQuery():OpenQuery(cQuery,/*cAlias*/, /*aSetField*/, /*cDriver*/, "120", "60") while !(cAlias)->(Eof()) ConOut((cAlias)->ED_CODIGO) (cAlias)->(DBSkip()) enddo (cAlias)->(DBCloseArea()) cQuery := "SELECT ED_DESCRIC FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' ' AND ED_CODIGO = 'XISTO'" ConOut("ED_DESCRIC = " + FwExecCachedQuery():ExecScalar(cQuery, "ED_DESCRIC", "120", "60")) RpcClearEnv() return |
Templatedocumentos |
---|
HTML |
---|
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } .aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { background: #FF9900; !important } .menu-item.active-tab { border-bottom: none !important; } </style> |