Apakah ada perpustakaan Java open-source untuk parsing pernyataan SQL?
Jika mungkin, itu harus disesuaikan atau cukup fleksibel untuk juga dapat mengurai (atau setidaknya mengabaikan) sintaksis khusus vendor (seperti definisi tablespace Oracle atau klausa LIMIT MySQL).
Jika tidak, kepatuhan ketat terhadap standar SQL juga baik-baik saja.
Pembaruan: Saya memerlukan ini untuk dua hal:
- menyediakan antarmuka SQL ke basis data non-SQL (pemetaan ke panggilan API internal)
- menulis ulang SQL sebelum masuk ke database aktual (mis. Oracle)
Jawaban:
ANTLR3 memiliki tata bahasa SQL ANSI yang tersedia. Anda dapat menggunakannya untuk membuat parser Anda sendiri.
ANTLR4 memiliki tata bahasa SQL .
sumber
sumber
Parser
Jika Anda membutuhkan parser, harus ada parser di basis kode Apache Derby .
Berurusan dengan SQL khusus vendor
Anda mungkin ingin melihat metode .native () pada objek Koneksi jdbc yang dapat Anda berikan kepada vendor query netral yang akan mendapatkan postprocessed ke dalam query spesifik vendor.
sumber
SQL Parser Umum untuk Java bukan open source, tetapi persis apa yang Anda cari.
sumber
Coba Zql
sumber
Hibernate menggunakan ANTLR untuk parsing sql dan hql.
JSqlParser juga merupakan pilihan yang baik. Meskipun memiliki beberapa bug (atau beberapa fitur tidak diimplementasikan) saat mengurai oracle pl / sql. lihat forumnya untuk detail.
jadi jika Anda parsing oracle pl / sql, ANTLR disarankan.
sumber
Apa yang ingin Anda lakukan dengan SQL yang diuraikan? Saya dapat merekomendasikan beberapa implementasi Java dari Lex / Yacc ( BYACC / J , Java Cup ) agar Anda dapat menggunakan tata bahasa SQL yang sudah ada.
Jika Anda ingin benar-benar melakukan sesuatu dengan tata bahasa parsing yang dihasilkan, saya mungkin menyarankan untuk melihat Derby , sumber SQL database terbuka yang ditulis dalam Java.
sumber