GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - JSQLParser/JSqlParser at manticore

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

2,718 Commits
2,718 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
config
config
 
 
gradle/wrapper
gradle/wrapper
 
 
src
src
 
 
.codacy.yml
.codacy.yml
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE_APACHEV2
LICENSE_APACHEV2
 
 
LICENSE_LGPLV21
LICENSE_LGPLV21
 
 
README.md
README.md
 
 
build.gradle
build.gradle
 
 
gradle.properties
gradle.properties
 
 
gradlew
gradlew
 
 
gradlew.bat
gradlew.bat
 
 
nb-configuration.xml
nb-configuration.xml
 
 
nbactions.xml
nbactions.xml
 
 
pom.xml
pom.xml
 
 
settings.gradle
settings.gradle
 
 

Repository files navigation

JSqlParser

Turn any SQL statement into a traversable tree of Java objects -- and back again.

An RDBMS-agnostic SQL parser for the JVM:
one grammar, twelve dialects, no native extensions.

JSqlParser

CI Coverage Status Codacy Badge Manticore Build Maven Central Javadocs GitHub Stars Gitter

Website · Samples · Syntax · Change Log · Contributing


What it does

Give it SQL. Get an AST you can walk, rewrite, and print back out.

SELECT 1 FROM dual WHERE a = b
SQL Text
 └─Statements: statement.select.PlainSelect
    ├─selectItems: statement.select.SelectItem
    │  └─LongValue: 1
    ├─Table: dual
    └─where: expression.operators.relational.EqualsTo
       ├─Column: a
       └─Column: b
String sqlStr = "select 1 from dual where a=b";

PlainSelect select = (PlainSelect) CCJSqlParserUtil.parse(sqlStr);

SelectItem selectItem = select.getSelectItems().get(0);
Assertions.assertEquals(new LongValue(1), selectItem.getExpression());

Table table = (Table) select.getFromItem();
Assertions.assertEquals("dual", table.getName());

EqualsTo equalsTo = (EqualsTo) select.getWhere();
Column a = (Column) equalsTo.getLeftExpression();
Column b = (Column) equalsTo.getRightExpression();
Assertions.assertEquals("a", a.getColumnName());
Assertions.assertEquals("b", b.getColumnName());

The tree is traversable with the Visitor pattern, and the same object model works in reverse: build statements from Java with a fluent API and render them as SQL text.

Install

Use the stable Manticore builds. They are released continuously from the current development line and carry all of the performance and grammar work described below. The upstream com.github.jsqlparser release on Maven Central is considerably older.

<dependency>
    <groupId>com.manticore-projects.jsqlformatter</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>[5.3.218,)</version>
</dependency>
implementation("com.manticore-projects.jsqlformatter:jsqlparser:+")
Upstream release and snapshots
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>5.3</version>
</dependency>

Snapshot coordinates and repository setup are on the build dependencies page.

Performance

11× faster than 5.3, and the fastest parser on real-world SQL of any of the parsers tested, in any language — 19× ahead of sqlglot[c] on JSqlParser's own SELECT test suite.

SQL parser benchmark score
Benchmark                               (version)  Mode  Cnt   Score   Error  Units
JSQLParserBenchmark.parseSQLStatements     latest  avgt   15   7.602 ± 0.135  ms/op
JSQLParserBenchmark.parseSQLStatements        5.3  avgt   15  84.687 ± 3.321  ms/op

Methodology and the full cross-parser comparison against SQLGlot, sqlglot[c] and polyglot-sql: jsqlparser-bench.

What it parses

JSqlParser targets the SQL standard plus all major RDBMS. One grammar covers all of them, and missing syntax gets added on demand — open an issue.

BigQuery · Snowflake · DuckDB · Redshift · Oracle · MS SQL Server · Sybase PostgreSQL · MySQL · MariaDB · DB2 · H2 · HSQLDB · Derby · SQLite

Statements
Queries SELECT · WITH … · Piped SQL
DML INSERT · UPDATE · UPSERT · MERGE · DELETE · TRUNCATE TABLE
DDL CREATE … · ALTER … · DROP …
PostgreSQL RLS CREATE POLICY · ALTER TABLE … ENABLE/DISABLE/FORCE/NO FORCE ROW LEVEL SECURITY
Salesforce SOQL INCLUDES · EXCLUDES

Beyond statement shapes, the grammar handles nested sub-selects, bind parameters (?, :name), window and analytic functions, Oracle hints, and the T-SQL square-bracket versus array-literal ambiguity. The complete reference is on the syntax page.

Piped SQL

Support is progressing for Piped SQL, which writes queries in the order they actually execute rather than the order SQL historically demanded.

FROM Produce
|> WHERE
    item != 'bananas'
    AND category IN ('fruit', 'nut')
|> AGGREGATE COUNT(*) AS num_items, SUM(sales) AS total_sales
   GROUP BY item
|> ORDER BY item DESC;

Background reading: the Google research paper, BigQuery pipe syntax and DuckDB FROM-first syntax.

Java version

JSqlParser Runtime Notes
4.9 JDK 8 last JDK 8 compatible release
5.0 and later JDK 11 breaking changes to the AST Visitors, see the Migration Guide
5.1 and later JDK 11 building requires a JDK 17 toolchain (plugin requirement)
5.4 and later JDK 11 parser generated with JavaCC 8

Sister projects

  • JSQLFormatter — pretty-printing and formatting of SQL text
  • JSQLTranspiler — dialect-specific rewriting, column resolution and lineage, by Starlake.ai

Alternatives

The dual-licensed JOOQ ships a hand-written parser with broad RDBMS support, cross-dialect translation, SQL transformation, and a JDBC proxy mode. Worth a look if translation between dialects is your primary need rather than AST access.

Sponsor

A huge thank you to Starlake.ai, who simplify data ingestion, transformation and orchestration for faster delivery of high-quality data. Starlake has been instrumental in providing Piped SQL support and a large number of test cases for BigQuery, Redshift, Databricks and DuckDB. If JSqlParser is useful to you, visit Starlake.ai and give them a star.

Documentation

  1. Samples
  2. Build instructions and Maven artifact
  3. Contribution guide
  4. Change log
  5. Issues

License

Dual licensed under LGPL 2.1 or the Apache License, Version 2.0. Take your pick.

About

JSqlParser parses an SQL statement and translate it into a hierarchy of Java classes. The generated hierarchy can be navigated using the Visitor Pattern

github.com/JSQLParser/JSqlParser/wiki

Topics

asthierarchyjavajsqlparsermysqloracleparserpaypalpostgresqlsqlsql-statementsqlserverstatement

Resources

Readme
Activity
Custom properties

Stars

6.0k stars

Watchers

210 watching

Forks

1.4k forks
Report repository

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.