-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[FEATURE] I want to keep the comments #2018
-
SQL Example
@Test
public void test4() throws ParseException, JSQLParserException {
String orginalSql = "SELECT * FROM PMS_ROLE_SCALE where ROLE_ID= ? /*if*/\n" +
" and code_id= ? /*if*/ \n" +
"/*if*/\n" +
" and SCALE_FLAG=?/*if*/\n" +
"/*if*/\n" +
" and PMS_TYPE=?/*if*/";
Statement statement = CCJSqlParserUtil.parse(orginalSql);
String parsedSql = statement.toString();
log.info("==> JsqlParser SQL: {}", parsedSql);
}
I want to keep the comments
I use these comments as placeholders. Since I want to replace these comments after Jsqlparser finishes parsing, I hope that they can still be retained after parsing.
Is there any way to use it? Or is there a better solution?
Also,JSqlParser is a near-perfect work. I often use it in my projects and I love it very much.
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 2 comments 1 reply
-
I noticed the issue https://github.com/JSQLParser/JSqlParser/issues/1776 , but still can't think of a good solution
Beta Was this translation helpful? Give feedback.
All reactions
-
Greetings!
There is no direct way to access such SQL comments because they do not have clear position in the AST. Example:
SELECT /*comment 1*/ /*comment 2*/ column1 from dual;
It's impossible to decide if those comments are properties of the Nodes SELECT
or column1
and so the parsed AST can't be easily rewritten into a text.
However, there are certain work arounds:
-
your scan your statements first for comments and determine the "non-whitespace position" of each comment.
Given, that parsing/de-parsing does not change the content of the SQL, you can insert your comment later again at this "non-whitespace" position.
I have done exactly this for JSQLFormatter, look-up the Comment-Map implementation. -
you can access the Special AST Nodes and re-insert into the AST
This has been done here.
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 1
-
Thank you very much for your answer :)
Beta Was this translation helpful? Give feedback.