Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception parsing show statement #1702

Closed
jayant-kumar-yadav opened this issue Dec 26, 2022 · 6 comments · Fixed by #1778
Closed

Exception parsing show statement #1702

jayant-kumar-yadav opened this issue Dec 26, 2022 · 6 comments · Fixed by #1778

Comments

@jayant-kumar-yadav
Copy link
Contributor

I am trying to parse "show indexes from my_table" and it is throwing ParseException :

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "from" "FROM"
at line 1, column 14.

Was expecting one of:

";"
<EOF>

at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:31234)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:31067)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:163)
@manticore-projects
Copy link
Contributor

manticore-projects commented Dec 26, 2022

Greetings.

Your syntax show indexes from my_table is not supported, since it does not apply to any SQL Standard or major RDBMS (as far as I know).

Supported syntax are shown here.

You may want to provide or sponsor an implementation of this unsupported feature.

Please don't cross-post though.

@jayant-kumar-yadav
Copy link
Contributor Author

MySql family DBs support this so I thought it would be there.

@manticore-projects
Copy link
Contributor

Let me put it like this: We are mostly interested in parsing and understanding the actual logic of a SQL statement in order to find out about tables, columns, expressions, joins, where clauses etc.

Your statement does not yield any of such information (except maybe the table name). It is RDBMS specific syntax for analysis.

For that reason, it is not implemented yet. Nobody has had an interest so far, because its easier to just skip it.

However, you can provide a PR when this statement is important for you.

@jayant-kumar-yadav
Copy link
Contributor Author

Added PR #1704

manticore-projects added a commit to manticore-projects/JSqlParser that referenced this issue May 16, 2023
- returns any RDBMS specific implementation as `UnsupportedStatement`
- fixes JSQLParser#1702
@manticore-projects
Copy link
Contributor

Solved via commit daa56ed with PR #1778

It does not make sense to implement all the various RDBMS specific syntax since the SHOW statement does not bear any value or interesting content. Although throwing exceptions is also annoying, so UnsupportedStatement is the way to go.

If you are really interested in the content of the UnsupportedStatement then please use Regular Expressions on it.

@manticore-projects
Copy link
Contributor

Solved with PR #1704 and PR #1778

manticore-projects added a commit that referenced this issue Jun 1, 2023
* Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH

Support parsing create view statements in Redshift with AUTO REFRESH
option.

* Reduce cyclomatic complexity in CreateView.toString

Extract adding the force option into a dedicated method resulting in the
cyclomatic complexity reduction of the CreateView.toString method.

* Enhanced Keywords

Add Keywords and document, which keywords are allowed for what purpose

* Fix incorrect tests

* Define Reserved Keywords explicitly
Derive All Keywords from Grammar directly
Generate production for Object Names (semi-) automatically
Add parametrized Keyword Tests

* Fix test resources

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Sphinx Documentation

Update the MANTICORE Sphinx Theme, but ignore it in GIT
Add the content to the Sphinx sites
Add a Gradle function to derive Stable and Snapshot version from GIT Tags
Add a Gradle GIT change task
Add a Gradle sphinx task
Add a special Test case for illustrating the use of JSQLParser

* doc: request for `Conventional Commit` messages

* feat: make important Classes Serializable

Implement Serializable for persisting via ObjectOutputStream

* chore: Make Serializable

* doc: Better integration of the RR diagrams

- apply neutral Sphinx theme
- insert the RR diagrams into the sphinx sources
- better documentation on Gradle dependencies
- link GitHub repository

* Merge

* feat: Oracle Alternative Quoting

- add support for Oracle Alternative Quoting e.g. `q'(...)'`
- fixes #1718
- add a Logo and FavIcon to the Website
- document recent changes on Quoting/Escaping
- add an example on building SQL from Java
- rework the README.md, promote the Website
- add Spotless Formatter, using Google Java Style (with Tab=4 Spaces)

* style: Appease PMD/Codacy

* doc: fix the issue template

- fix the issue template
- fix the -SNAPSHOT version number

* Update issue templates

* Update issue templates

* feat: Support more Statement Separators

- `GO`
- Slash `/`
- Two empty lines

* feat: FETCH uses EXPRESSION

- `FETCH` uses `EXPRESSION` instead of SimpleJDBCParameter only
- Visit/Accept `FETCH` `EXPRESSION` instead of `append` to String
- Visit/Accept `OFFSET` `EXPRESSION` instead of `append` to String
- Gradle: remove obsolete/incompatible `jvmArgs` from Test()

* style: apply Spotless

* test: commit missing test

* feat: Lateral View

Implement Lateral View according to https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-lateral-view.html#syntax
Add proper tests

Fixes #1777
Fixes #239
Fixes #1723

* feat: Oracle `HAVING` before `GROUP BY`

Basic support for Oracle's `HAVING` before `GROUP BY` option.
It will be parsed without any special consideration for the order.
Special Oracle Test groupby07.sql gets parsed, but fails when the deparser reorders the clauses.

Fixes #1774

* feat: Multi-Part Names for Variables and Parameters

Fixes #1771
Fixes #1768

* feat: ClickHouse `Select...` ``FINAL` modifier

Fixes #1774

BREAKING-CHANGE: introduces reserved keyword `FINAL`

* feat: Test if a JOIN is an INNER JOIN according to the SQL:2016

An `INNER JOIN` is a qualified `JOIN` with the `INNER` qualifier or without any `LEFT` or `RIGHT` qualifier.

Fixes #1775

* feat: Switch off contradicting `JOIN` qualifiers, when setting a qualifier

* feat: implement SQL:2016 Convert() and Trim()

- Fixes #868
- Fixes #1767
- Fixes Special Oracle Test `function03.sql`

* feat: ClickHouse `LIMIT ... BY ...` clause

- LimitDeparser accepts ExpressionVisitor
- `SELECT` can have optional `LIMIT ... BY ...` clause
- Fixes #1436

* test: add specific tests for closed issues

* test: add specific tests for closed issues

* refactor: remove `SelectExpressionItem` in favor of `SelectItem`

BREAKING-CHANGE: `SelectExpressionItem` removed

* doc: Update examples

* build: Add missing import

* doc: Update the README.md

* fix: assign Enum case insensitive

Fixes #1779

* fix: assign Enum case insensitive

Remove redundant `DateTime` enum
Fixes #1779

* Revert "fix: assign Enum case insensitive"

This reverts commit 86d0ace.

* feat: Consolidate the `ExpressionList`, removing many redundant List alike Classes and Productions

- `ExpressionList` extends a `List<Expression>` directly and implements `Expression`
- `ExpressionList` has no Brackets
- introduce `ParenthesedExpressionList` which extends `ExpressionList` and has Brackets
- refactor `MultiExpressionList` to extend `List<ExpressionList>`
- replace any occurrence of `List<Expression>` with `ExpressionList` and remove lots of redundant Productions
- `RowConstructor` extends `ExpressionList`
- remove redundant `ValueExpressionList` (it was just an `ExpressionList`
- get rid of any `useBrackets` flags
- consolidate the `Cast` Functions
- use `ExpressionListDeparser` as much as possible

BREAKING-CHANGE: All `List<Expression>` and `List<Column>` related methods have changed. No `useBrackets` flags, instead use `ParenthesedExpressionList` when brackets are needed.

* fix: Remove tests for `()`, since `ParenthesedExpressionList` will catch those too

* refactor: UpdateSets for `Update` and `InsertConflictTarget`

- remove redundant code
- add license headers
- register `function06.sql` success

* build: Increase TimeOut for the GitHub CI

* style: Appease Codacy

* style: Checkstyle

* refactor: Remove `ItemsList`, `MultiExpressionList`, `Replace`

Since we have proper `ExpressionList` implementing `Expression` we can narrow down the API:

- remove `ItemsList`, `ItemsListVisitor`, `ItemsListValidator` in favor of `ExpressionList`
- remove `MultiExpressionList` in favor of `ExpressionList`
- refactor `NamedExpressionList` so it extends `ExpressionList` and uses `ExpressionListDeparser`
- simplify `InExpression` and `AnyComparisionExpression`

BREAKING-CHANGE: many Classes and Methods removed

* style: Appease Codacy

* style: Rework all the ENUMs

- assign Value only when really needed
- implement `from()` method for getting the case-insensitive Enum

* doc: Better Sphinx Tabs

Addresses issue #1784 item 2

* doc: RR chart colors cater for Dark Mode

Addresses issue #1784 item 3

* refactor: remove SimpleFunction

Remove the production `SimpleFunction`
Clean-up `InternalFunction`

* build: improve Gradle Build

- fix Version/Snapshot
- add XML Doclet (for generating API Website via XSLT later)
- fix the publishing task and add GitHub package

* refactor: `Insert` uses `ExpressionList` and `UpdateSet`

* test: Disable API Sanitation for the moment

* style: Appease Checkstyle

* style: Appease PMD

* fix: find the correct position when field belongs to an internal class

* style: replace all List<Expression> with ExpressionList<> and enforce policy via Acceptance Test

- refactor `Merge`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Upsert`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Set` Statement
- refactor `Limit`, `Pivot`, `Unpivot`

** Breaking Changes ** Getters/Setters of `Merge`, `Upsert`, `Set` have changed

* refactor: generify `SelectItem` and remove `FunctionItem` and `ExpressionListItem`

- generify `SelectItem<T extends Expression>`
- replace `FunctionItem` with `SelectItem<Function>`
- replace `ExpressionListItem` with `SelectItem<ExpressionList>`
- appease PMD/Codacy

** Breaking Changes ** Getters/Setters of `Pivot`, `UnPivot`, `PivotXML` have changed

* fix: Java Version 8

* feat: JdbcNamedParameter allows "&" (instead of ":")

- fixes #1785

* feat: access Elements of Array Columns
- Example `update utilisateur set listes[0] = 1`
- fixes #1083

* feat: `MEMBER OF` condition as shown at https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of

- fixes #1631

* style: appease PMD/Codacy

* style: appease PMD/Codacy

* test: add unit test for issue #1778

* feat: Write API documentation to the WebSite via XMLDoclet

* Update sphinx.yml

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: improve the GIT Snapshot detection

* fix: issue #1791

- Allow `START` keyword as table `CreateParameter`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* refactor: simplify production `CreateParameter()`

* refactor: SHOW statement, supporting any RDBMS specific implementation

- returns any RDBMS specific implementation as `UnsupportedStatement`
- fixes #1702

* refactor: RETURNING clause

- supports Oracle's `RETURN ... INTO ...`
- fixes #1780
- fixes #686
- Special Oracle tests `insert11.sql` and `insert12.sql`

* refactor: CREATE and ALTER productions

- avoid LOOKAHEADs
- simplify the SimpleStatement() production
- use UnsupportedStatements() for any RDBMS specific syntax
- fixes #1515
- fixes #1453

* fix: Complex Parsing Approach

- optionally provide a global Executor, instead spawning one for each parse
- run into Complex Parsing only, when Complex Parsing was allowed
- provide a Logger
- fixes #1792

* style: Quieten the logger

* style: Cosmetic improvements

* feat: chaining JSON Expressions

- supports chains like '{"obj":{"field": "value"}}'::JSON -> 'obj'::TEXT ->> 'field'::TEXT
- fixes #1792

* style: remove unused imports

* refact: Statements extends List<Statement>

* build: try to work around the Maven/JDK8 issue on GitHub

* feat: parse CREATE TRIGGER as UnsupportedStatement

- fixes #1090

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477
- cosmetics

* feat: Quoted Identifiers can contain double-quotes (PostgreSQL)

- `SELECT "test""column""name"`
- fixes #1335

* build: improve Upload task

* doc: Website improvements

- Show Release vs. SNAPSHOT
- FURO theme
- fix inline tab appearance

---------

Co-authored-by: zaza <tzarna@gmail.com>
manticore-projects added a commit that referenced this issue Jun 15, 2023
* Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH

Support parsing create view statements in Redshift with AUTO REFRESH
option.

* Reduce cyclomatic complexity in CreateView.toString

Extract adding the force option into a dedicated method resulting in the
cyclomatic complexity reduction of the CreateView.toString method.

* Enhanced Keywords

Add Keywords and document, which keywords are allowed for what purpose

* Fix incorrect tests

* Define Reserved Keywords explicitly
Derive All Keywords from Grammar directly
Generate production for Object Names (semi-) automatically
Add parametrized Keyword Tests

* Fix test resources

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Sphinx Documentation

Update the MANTICORE Sphinx Theme, but ignore it in GIT
Add the content to the Sphinx sites
Add a Gradle function to derive Stable and Snapshot version from GIT Tags
Add a Gradle GIT change task
Add a Gradle sphinx task
Add a special Test case for illustrating the use of JSQLParser

* doc: request for `Conventional Commit` messages

* feat: make important Classes Serializable

Implement Serializable for persisting via ObjectOutputStream

* chore: Make Serializable

* doc: Better integration of the RR diagrams

- apply neutral Sphinx theme
- insert the RR diagrams into the sphinx sources
- better documentation on Gradle dependencies
- link GitHub repository

* Merge

* feat: Oracle Alternative Quoting

- add support for Oracle Alternative Quoting e.g. `q'(...)'`
- fixes #1718
- add a Logo and FavIcon to the Website
- document recent changes on Quoting/Escaping
- add an example on building SQL from Java
- rework the README.md, promote the Website
- add Spotless Formatter, using Google Java Style (with Tab=4 Spaces)

* style: Appease PMD/Codacy

* doc: fix the issue template

- fix the issue template
- fix the -SNAPSHOT version number

* Update issue templates

* Update issue templates

* feat: Support more Statement Separators

- `GO`
- Slash `/`
- Two empty lines

* feat: FETCH uses EXPRESSION

- `FETCH` uses `EXPRESSION` instead of SimpleJDBCParameter only
- Visit/Accept `FETCH` `EXPRESSION` instead of `append` to String
- Visit/Accept `OFFSET` `EXPRESSION` instead of `append` to String
- Gradle: remove obsolete/incompatible `jvmArgs` from Test()

* style: apply Spotless

* test: commit missing test

* feat: Lateral View

Implement Lateral View according to https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-lateral-view.html#syntax
Add proper tests

Fixes #1777
Fixes #239
Fixes #1723

* feat: Oracle `HAVING` before `GROUP BY`

Basic support for Oracle's `HAVING` before `GROUP BY` option.
It will be parsed without any special consideration for the order.
Special Oracle Test groupby07.sql gets parsed, but fails when the deparser reorders the clauses.

Fixes #1774

* feat: Multi-Part Names for Variables and Parameters

Fixes #1771
Fixes #1768

* feat: ClickHouse `Select...` ``FINAL` modifier

Fixes #1774

BREAKING-CHANGE: introduces reserved keyword `FINAL`

* feat: Test if a JOIN is an INNER JOIN according to the SQL:2016

An `INNER JOIN` is a qualified `JOIN` with the `INNER` qualifier or without any `LEFT` or `RIGHT` qualifier.

Fixes #1775

* feat: Switch off contradicting `JOIN` qualifiers, when setting a qualifier

* feat: implement SQL:2016 Convert() and Trim()

- Fixes #868
- Fixes #1767
- Fixes Special Oracle Test `function03.sql`

* feat: ClickHouse `LIMIT ... BY ...` clause

- LimitDeparser accepts ExpressionVisitor
- `SELECT` can have optional `LIMIT ... BY ...` clause
- Fixes #1436

* test: add specific tests for closed issues

* test: add specific tests for closed issues

* refactor: remove `SelectExpressionItem` in favor of `SelectItem`

BREAKING-CHANGE: `SelectExpressionItem` removed

* doc: Update examples

* build: Add missing import

* doc: Update the README.md

* fix: assign Enum case insensitive

Fixes #1779

* fix: assign Enum case insensitive

Remove redundant `DateTime` enum
Fixes #1779

* Revert "fix: assign Enum case insensitive"

This reverts commit 86d0ace.

* feat: Consolidate the `ExpressionList`, removing many redundant List alike Classes and Productions

- `ExpressionList` extends a `List<Expression>` directly and implements `Expression`
- `ExpressionList` has no Brackets
- introduce `ParenthesedExpressionList` which extends `ExpressionList` and has Brackets
- refactor `MultiExpressionList` to extend `List<ExpressionList>`
- replace any occurrence of `List<Expression>` with `ExpressionList` and remove lots of redundant Productions
- `RowConstructor` extends `ExpressionList`
- remove redundant `ValueExpressionList` (it was just an `ExpressionList`
- get rid of any `useBrackets` flags
- consolidate the `Cast` Functions
- use `ExpressionListDeparser` as much as possible

BREAKING-CHANGE: All `List<Expression>` and `List<Column>` related methods have changed. No `useBrackets` flags, instead use `ParenthesedExpressionList` when brackets are needed.

* fix: Remove tests for `()`, since `ParenthesedExpressionList` will catch those too

* refactor: UpdateSets for `Update` and `InsertConflictTarget`

- remove redundant code
- add license headers
- register `function06.sql` success

* build: Increase TimeOut for the GitHub CI

* style: Appease Codacy

* style: Checkstyle

* refactor: Remove `ItemsList`, `MultiExpressionList`, `Replace`

Since we have proper `ExpressionList` implementing `Expression` we can narrow down the API:

- remove `ItemsList`, `ItemsListVisitor`, `ItemsListValidator` in favor of `ExpressionList`
- remove `MultiExpressionList` in favor of `ExpressionList`
- refactor `NamedExpressionList` so it extends `ExpressionList` and uses `ExpressionListDeparser`
- simplify `InExpression` and `AnyComparisionExpression`

BREAKING-CHANGE: many Classes and Methods removed

* style: Appease Codacy

* style: Rework all the ENUMs

- assign Value only when really needed
- implement `from()` method for getting the case-insensitive Enum

* doc: Better Sphinx Tabs

Addresses issue #1784 item 2

* doc: RR chart colors cater for Dark Mode

Addresses issue #1784 item 3

* refactor: remove SimpleFunction

Remove the production `SimpleFunction`
Clean-up `InternalFunction`

* build: improve Gradle Build

- fix Version/Snapshot
- add XML Doclet (for generating API Website via XSLT later)
- fix the publishing task and add GitHub package

* refactor: `Insert` uses `ExpressionList` and `UpdateSet`

* test: Disable API Sanitation for the moment

* style: Appease Checkstyle

* style: Appease PMD

* fix: find the correct position when field belongs to an internal class

* style: replace all List<Expression> with ExpressionList<> and enforce policy via Acceptance Test

- refactor `Merge`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Upsert`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Set` Statement
- refactor `Limit`, `Pivot`, `Unpivot`

** Breaking Changes ** Getters/Setters of `Merge`, `Upsert`, `Set` have changed

* refactor: generify `SelectItem` and remove `FunctionItem` and `ExpressionListItem`

- generify `SelectItem<T extends Expression>`
- replace `FunctionItem` with `SelectItem<Function>`
- replace `ExpressionListItem` with `SelectItem<ExpressionList>`
- appease PMD/Codacy

** Breaking Changes ** Getters/Setters of `Pivot`, `UnPivot`, `PivotXML` have changed

* fix: Java Version 8

* feat: JdbcNamedParameter allows "&" (instead of ":")

- fixes #1785

* feat: access Elements of Array Columns
- Example `update utilisateur set listes[0] = 1`
- fixes #1083

* feat: `MEMBER OF` condition as shown at https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of

- fixes #1631

* style: appease PMD/Codacy

* style: appease PMD/Codacy

* test: add unit test for issue #1778

* feat: Write API documentation to the WebSite via XMLDoclet

* Update sphinx.yml

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: improve the GIT Snapshot detection

* fix: issue #1791

- Allow `START` keyword as table `CreateParameter`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* refactor: simplify production `CreateParameter()`

* refactor: SHOW statement, supporting any RDBMS specific implementation

- returns any RDBMS specific implementation as `UnsupportedStatement`
- fixes #1702

* refactor: RETURNING clause

- supports Oracle's `RETURN ... INTO ...`
- fixes #1780
- fixes #686
- Special Oracle tests `insert11.sql` and `insert12.sql`

* refactor: CREATE and ALTER productions

- avoid LOOKAHEADs
- simplify the SimpleStatement() production
- use UnsupportedStatements() for any RDBMS specific syntax
- fixes #1515
- fixes #1453

* fix: Complex Parsing Approach

- optionally provide a global Executor, instead spawning one for each parse
- run into Complex Parsing only, when Complex Parsing was allowed
- provide a Logger
- fixes #1792

* style: Quieten the logger

* style: Cosmetic improvements

* feat: chaining JSON Expressions

- supports chains like '{"obj":{"field": "value"}}'::JSON -> 'obj'::TEXT ->> 'field'::TEXT
- fixes #1792

* style: remove unused imports

* refact: Statements extends List<Statement>

* build: try to work around the Maven/JDK8 issue on GitHub

* feat: parse CREATE TRIGGER as UnsupportedStatement

- fixes #1090

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477
- cosmetics

* Create gradle.yml

* feat: Quoted Identifiers can contain double-quotes (PostgreSQL)

- `SELECT "test""column""name"`
- fixes #1335

* build: improve Upload task

* doc: Website improvements

- Show Release vs. SNAPSHOT
- FURO theme
- fix inline tab appearance

* doc: Website, fix tabs

* fix: throw the specific exception

* doc: write migration guide

* fix: expose IntervalExpression attributes and use DeParser

* doc: migration guide

* feat: T-SQL `FOR ...` clause

- fixes #1800

* fix: SPHINX modules and themes

* docs: write migration guide

- migration guide
- Getters for List Elements
- Rename Join `rightItem` to `fromItem`

* feat: `QUALIFY` clause

- fixes #1805

* feat: Postgres `NOTNULL` support

- incorporates PR #1725, all credits to @tomershay

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* feat: MySQL `NOT RLIKE`, `NOT REGEXP` expressions

- fixes #1553
- remove RegExpMySQLOperator, replaced by flavoured `LIKE` expression

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* fix: `INSERT` must use simple Column Names only

- salvages PR #589, credits to @wheredevel

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

---------

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>
Co-authored-by: zaza <tzarna@gmail.com>
manticore-projects added a commit that referenced this issue Jun 27, 2023
* Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH

Support parsing create view statements in Redshift with AUTO REFRESH
option.

* Reduce cyclomatic complexity in CreateView.toString

Extract adding the force option into a dedicated method resulting in the
cyclomatic complexity reduction of the CreateView.toString method.

* Enhanced Keywords

Add Keywords and document, which keywords are allowed for what purpose

* Fix incorrect tests

* Define Reserved Keywords explicitly
Derive All Keywords from Grammar directly
Generate production for Object Names (semi-) automatically
Add parametrized Keyword Tests

* Fix test resources

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Adjust Gradle to JUnit 5

Parallel Test execution
Gradle Caching
Explicitly request for latest JavaCC 7.0.10

* Do not mark SpeedTest for concurrent execution

* Remove unused imports

* Sphinx Documentation

Update the MANTICORE Sphinx Theme, but ignore it in GIT
Add the content to the Sphinx sites
Add a Gradle function to derive Stable and Snapshot version from GIT Tags
Add a Gradle GIT change task
Add a Gradle sphinx task
Add a special Test case for illustrating the use of JSQLParser

* doc: request for `Conventional Commit` messages

* feat: make important Classes Serializable

Implement Serializable for persisting via ObjectOutputStream

* chore: Make Serializable

* doc: Better integration of the RR diagrams

- apply neutral Sphinx theme
- insert the RR diagrams into the sphinx sources
- better documentation on Gradle dependencies
- link GitHub repository

* Merge

* feat: Oracle Alternative Quoting

- add support for Oracle Alternative Quoting e.g. `q'(...)'`
- fixes #1718
- add a Logo and FavIcon to the Website
- document recent changes on Quoting/Escaping
- add an example on building SQL from Java
- rework the README.md, promote the Website
- add Spotless Formatter, using Google Java Style (with Tab=4 Spaces)

* style: Appease PMD/Codacy

* doc: fix the issue template

- fix the issue template
- fix the -SNAPSHOT version number

* Update issue templates

* Update issue templates

* feat: Support more Statement Separators

- `GO`
- Slash `/`
- Two empty lines

* feat: FETCH uses EXPRESSION

- `FETCH` uses `EXPRESSION` instead of SimpleJDBCParameter only
- Visit/Accept `FETCH` `EXPRESSION` instead of `append` to String
- Visit/Accept `OFFSET` `EXPRESSION` instead of `append` to String
- Gradle: remove obsolete/incompatible `jvmArgs` from Test()

* style: apply Spotless

* test: commit missing test

* feat: Lateral View

Implement Lateral View according to https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-lateral-view.html#syntax
Add proper tests

Fixes #1777
Fixes #239
Fixes #1723

* feat: Oracle `HAVING` before `GROUP BY`

Basic support for Oracle's `HAVING` before `GROUP BY` option.
It will be parsed without any special consideration for the order.
Special Oracle Test groupby07.sql gets parsed, but fails when the deparser reorders the clauses.

Fixes #1774

* feat: Multi-Part Names for Variables and Parameters

Fixes #1771
Fixes #1768

* feat: ClickHouse `Select...` ``FINAL` modifier

Fixes #1774

BREAKING-CHANGE: introduces reserved keyword `FINAL`

* feat: Test if a JOIN is an INNER JOIN according to the SQL:2016

An `INNER JOIN` is a qualified `JOIN` with the `INNER` qualifier or without any `LEFT` or `RIGHT` qualifier.

Fixes #1775

* feat: Switch off contradicting `JOIN` qualifiers, when setting a qualifier

* feat: implement SQL:2016 Convert() and Trim()

- Fixes #868
- Fixes #1767
- Fixes Special Oracle Test `function03.sql`

* feat: ClickHouse `LIMIT ... BY ...` clause

- LimitDeparser accepts ExpressionVisitor
- `SELECT` can have optional `LIMIT ... BY ...` clause
- Fixes #1436

* test: add specific tests for closed issues

* test: add specific tests for closed issues

* refactor: remove `SelectExpressionItem` in favor of `SelectItem`

BREAKING-CHANGE: `SelectExpressionItem` removed

* doc: Update examples

* build: Add missing import

* doc: Update the README.md

* fix: assign Enum case insensitive

Fixes #1779

* fix: assign Enum case insensitive

Remove redundant `DateTime` enum
Fixes #1779

* Revert "fix: assign Enum case insensitive"

This reverts commit 86d0ace.

* feat: Consolidate the `ExpressionList`, removing many redundant List alike Classes and Productions

- `ExpressionList` extends a `List<Expression>` directly and implements `Expression`
- `ExpressionList` has no Brackets
- introduce `ParenthesedExpressionList` which extends `ExpressionList` and has Brackets
- refactor `MultiExpressionList` to extend `List<ExpressionList>`
- replace any occurrence of `List<Expression>` with `ExpressionList` and remove lots of redundant Productions
- `RowConstructor` extends `ExpressionList`
- remove redundant `ValueExpressionList` (it was just an `ExpressionList`
- get rid of any `useBrackets` flags
- consolidate the `Cast` Functions
- use `ExpressionListDeparser` as much as possible

BREAKING-CHANGE: All `List<Expression>` and `List<Column>` related methods have changed. No `useBrackets` flags, instead use `ParenthesedExpressionList` when brackets are needed.

* fix: Remove tests for `()`, since `ParenthesedExpressionList` will catch those too

* refactor: UpdateSets for `Update` and `InsertConflictTarget`

- remove redundant code
- add license headers
- register `function06.sql` success

* build: Increase TimeOut for the GitHub CI

* style: Appease Codacy

* style: Checkstyle

* refactor: Remove `ItemsList`, `MultiExpressionList`, `Replace`

Since we have proper `ExpressionList` implementing `Expression` we can narrow down the API:

- remove `ItemsList`, `ItemsListVisitor`, `ItemsListValidator` in favor of `ExpressionList`
- remove `MultiExpressionList` in favor of `ExpressionList`
- refactor `NamedExpressionList` so it extends `ExpressionList` and uses `ExpressionListDeparser`
- simplify `InExpression` and `AnyComparisionExpression`

BREAKING-CHANGE: many Classes and Methods removed

* style: Appease Codacy

* style: Rework all the ENUMs

- assign Value only when really needed
- implement `from()` method for getting the case-insensitive Enum

* doc: Better Sphinx Tabs

Addresses issue #1784 item 2

* doc: RR chart colors cater for Dark Mode

Addresses issue #1784 item 3

* refactor: remove SimpleFunction

Remove the production `SimpleFunction`
Clean-up `InternalFunction`

* build: improve Gradle Build

- fix Version/Snapshot
- add XML Doclet (for generating API Website via XSLT later)
- fix the publishing task and add GitHub package

* refactor: `Insert` uses `ExpressionList` and `UpdateSet`

* test: Disable API Sanitation for the moment

* style: Appease Checkstyle

* style: Appease PMD

* fix: find the correct position when field belongs to an internal class

* style: replace all List<Expression> with ExpressionList<> and enforce policy via Acceptance Test

- refactor `Merge`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Upsert`, use `ExpressionList`, `UpdateSet` and Visitor Pattern
- refactor `Set` Statement
- refactor `Limit`, `Pivot`, `Unpivot`

** Breaking Changes ** Getters/Setters of `Merge`, `Upsert`, `Set` have changed

* refactor: generify `SelectItem` and remove `FunctionItem` and `ExpressionListItem`

- generify `SelectItem<T extends Expression>`
- replace `FunctionItem` with `SelectItem<Function>`
- replace `ExpressionListItem` with `SelectItem<ExpressionList>`
- appease PMD/Codacy

** Breaking Changes ** Getters/Setters of `Pivot`, `UnPivot`, `PivotXML` have changed

* fix: Java Version 8

* feat: JdbcNamedParameter allows "&" (instead of ":")

- fixes #1785

* feat: access Elements of Array Columns
- Example `update utilisateur set listes[0] = 1`
- fixes #1083

* feat: `MEMBER OF` condition as shown at https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of

- fixes #1631

* style: appease PMD/Codacy

* style: appease PMD/Codacy

* test: add unit test for issue #1778

* feat: Write API documentation to the WebSite via XMLDoclet

* Update sphinx.yml

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: Sphinx build fixes

* build: improve the GIT Snapshot detection

* fix: issue #1791

- Allow `START` keyword as table `CreateParameter`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* fix: issue #1789

- allow `CREATE TABLE ...` column parameter with Postgres`nextval('public.actor_actor_id_seq'::regclass)`

* refactor: simplify production `CreateParameter()`

* refactor: SHOW statement, supporting any RDBMS specific implementation

- returns any RDBMS specific implementation as `UnsupportedStatement`
- fixes #1702

* refactor: RETURNING clause

- supports Oracle's `RETURN ... INTO ...`
- fixes #1780
- fixes #686
- Special Oracle tests `insert11.sql` and `insert12.sql`

* refactor: CREATE and ALTER productions

- avoid LOOKAHEADs
- simplify the SimpleStatement() production
- use UnsupportedStatements() for any RDBMS specific syntax
- fixes #1515
- fixes #1453

* fix: Complex Parsing Approach

- optionally provide a global Executor, instead spawning one for each parse
- run into Complex Parsing only, when Complex Parsing was allowed
- provide a Logger
- fixes #1792

* style: Quieten the logger

* style: Cosmetic improvements

* feat: chaining JSON Expressions

- supports chains like '{"obj":{"field": "value"}}'::JSON -> 'obj'::TEXT ->> 'field'::TEXT
- fixes #1792

* style: remove unused imports

* refact: Statements extends List<Statement>

* build: try to work around the Maven/JDK8 issue on GitHub

* feat: parse CREATE TRIGGER as UnsupportedStatement

- fixes #1090

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477

* feat: functions blocks, parenthesed JSON Expressions

- fixes #1792, the very complex example
- fixes #1477
- cosmetics

* Create gradle.yml

* feat: Quoted Identifiers can contain double-quotes (PostgreSQL)

- `SELECT "test""column""name"`
- fixes #1335

* build: improve Upload task

* doc: Website improvements

- Show Release vs. SNAPSHOT
- FURO theme
- fix inline tab appearance

* doc: Website, fix tabs

* fix: throw the specific exception

* doc: write migration guide

* fix: expose IntervalExpression attributes and use DeParser

* doc: migration guide

* feat: T-SQL `FOR ...` clause

- fixes #1800

* fix: SPHINX modules and themes

* docs: write migration guide

- migration guide
- Getters for List Elements
- Rename Join `rightItem` to `fromItem`

* feat: `QUALIFY` clause

- fixes #1805

* feat: Postgres `NOTNULL` support

- incorporates PR #1725, all credits to @tomershay

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* feat: MySQL `NOT RLIKE`, `NOT REGEXP` expressions

- fixes #1553
- remove RegExpMySQLOperator, replaced by flavoured `LIKE` expression

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* fix: `INSERT` must use simple Column Names only

- salvages PR #589, credits to @wheredevel

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* fix: Backslash escaped single quote `'\''`

fixes #1812

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

* style: Licenses from Maven plugin

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>

---------

Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>
Co-authored-by: zaza <tzarna@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants