Converter expressão ADVPL em Filtro SQL

Estou tendo que efetuar algumas manutenções em relatórios legados (que usam o RPTStatus ainda) e onde o usuário tem a possibilidade de customizar o filtro do relatório. Acontece que o retorno na variável aReturn vem na forma de uma expressão ADVPL. Também tenho outros fontes legados que fazem um tratamento semelhante e preciso converter para SQL por questões de performance.

Tem alguma função padrão que possamos utilizar para efetuar essa conversão ?

compartilhar
  • Cirilo, já vi funções que fazem isso, porém não sei se estão documentadas, vou pesquisar e dou um retorno melhor. Mas já adianto, que essas funções não fazem um parse, o correto é fazer um parse para depois efetuar a transformação, elas leem de forma simples e convertem, logo são bem limitadas, expressões complexas provavelmente não serão resolvidas.

    Daniel Mendes   22 de Nov de 2022
  • Daniel fico muito grato pela atenção. Não entendi bem o que você falou sobre o parse que seria o processo ideal. Se houver uma forma melhor de trabalhar (usando o parse) posso utilizar. Não sei se o que estou falando faz sentido porque não entendi bem.

    Cirilo Rocha   22 de Nov de 2022
  • Eu não sei internamente como faz mas a função BuildExpr() de algum modo converte a expressão de filtro dependendo de um parâmetro. Talvez ajude a achar alguma coisa.

    Cirilo Rocha   23 de Nov de 2022
  • Cirilo, não encontrei nenhuma função publicada que faça essa transformação. Basicamente as rotinas existentes procuram valores e trocam por outros, por exemplo, eu procuro ".And." e troco por " AND " etc... Claro, dependendo do filtro ADVPL a conversão é impossível, casos que usam funções ADVPL por exemplo.

    Daniel Mendes   23 de Nov de 2022
  • Daniel obrigado pelo apoio. E como as funções padrão BuildExpr() e dbSetFilter() fazem esse processo? São funções de uso exclusivo interno da Totvs?

    Cirilo Rocha   23 de Nov de 2022
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags adpvl sql ou faça a sua própria pergunta.