Existe uma biblioteca Java de código aberto para analisar instruções SQL?
Se possível, ele deve ser personalizável ou flexível o suficiente para também ser capaz de analisar (ou pelo menos ignorar) sintaxe específica do fornecedor (como definições de espaço de tabela Oracle ou cláusula LIMIT do MySQL).
Caso contrário, a adesão estrita ao padrão SQL também é adequada.
Atualização: preciso disso para duas coisas:
- fornecendo uma interface SQL para um banco de dados não-SQL (mapeamento para chamadas de API internas)
- reescrevendo o SQL antes de ir para o banco de dados real (por exemplo, Oracle)
Respostas:
O ANTLR3 tem uma gramática SQL ANSI disponível. Você pode usar isso para criar seu próprio analisador.
O ANTLR4 possui uma gramática SQL .
fonte
fonte
Analisador
Se você precisar de um analisador, deve haver um analisador na base de código do Apache Derby .
Lidando com SQL específico do fornecedor
Você pode querer examinar o método .native () no objeto Connection do jdbc, que pode ser transmitido a consultas neutras do fornecedor que serão processadas posteriormente em consultas específicas do fornecedor.
fonte
O SQL Parser geral para Java não é de código aberto, mas é exatamente o que você está procurando.
fonte
Experimente o Zql
fonte
O Hibernate usa ANTLR para análise de sql e hql.
O JSqlParser também é uma boa opção. Embora tenha alguns bugs (ou alguns recursos não implementados) ao analisar o oracle pl / sql. consulte o fórum para obter detalhes.
portanto, se você estiver analisando o oracle pl / sql, o ANTLR é recomendado.
fonte
O que você deseja fazer com o SQL analisado? Posso recomendar algumas implementações Java do Lex / Yacc ( BYACC / J , Java Cup ) com as quais você pode usar uma gramática SQL existente.
Se você realmente deseja fazer algo com a gramática analisada resultante, sugiro examinar o Derby , um banco de dados SQL de código aberto escrito em Java.
fonte