Skip to content

Commit 3b2ce2e

Browse files
committed
Merge origin/master
Conflicts: src/test/java/net/sf/jsqlparser/test/select/SelectTest.java
2 parents 2204a5f + ac4a561 commit 3b2ce2e

File tree

7 files changed

+145
-86
lines changed

7 files changed

+145
-86
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
[![Build Status](https://travis-ci.org/JSQLParser/JSqlParser.svg?branch=master)](https://travis-ci.org/JSQLParser/JSqlParser) [![Coverage Status](https://coveralls.io/repos/JSQLParser/JSqlParser/badge.svg?branch=master)](https://coveralls.io/r/JSQLParser/JSqlParser?branch=master)
44

5-
[![Flattr](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=wumpz&url=http%3A%2F%2Fgithub.com%2FJSQLParser%2FJSqlParser) [![PayPal donate button](http://img.shields.io/paypal/donate.png?color=yellow)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=64CCN9JJANZXA "Help this JSqlParser version using Paypal")
5+
[![PayPal donate button](http://img.shields.io/paypal/donate.png?color=yellow)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=64CCN9JJANZXA "Help this JSqlParser version using Paypal")
6+
7+
[![Gitter](https://badges.gitter.im/JSQLParser/JSqlParser.svg)](https://gitter.im/JSQLParser/JSqlParser?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
68

79
Look here for more information and examples: https://github.com/JSQLParser/JSqlParser/wiki.
810

@@ -40,6 +42,9 @@ Also I would like to know about needed examples or documentation stuff.
4042

4143
## Extensions in the latest SNAPSHOT version 0.9.6
4244

45+
* allowed negative interval expressions like **INTERVAL -420 MINUTES**.
46+
* support for **ALTER VIEW** statements
47+
4348
## Extensions of JSqlParser releases
4449

4550
* [Release Notes](https://github.com/JSQLParser/JSqlParser/releases)

src/main/java/net/sf/jsqlparser/statement/merge/Merge.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,13 @@ public String toString() {
112112
StringBuilder b = new StringBuilder();
113113
b.append("MERGE INTO ");
114114
b.append(table);
115-
b.append(" USING (");
115+
b.append(" USING ");
116116
if (usingTable != null) {
117117
b.append(usingTable.toString());
118118
} else if (usingSelect != null) {
119-
b.append(usingSelect.toString());
119+
b.append("(").append(usingSelect.toString()).append(")");
120120
}
121-
b.append(")");
121+
122122
if (usingAlias != null) {
123123
b.append(usingAlias.toString());
124124
}

src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
*/
3939
public class ExpressionDeParser implements ExpressionVisitor, ItemsListVisitor {
4040

41-
private static final String NOT = " NOT ";
41+
private static final String NOT = "NOT ";
4242
private StringBuilder buffer;
4343
private SelectVisitor selectVisitor;
4444
private boolean useBracketsInExprList = true;

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -585,10 +585,10 @@ Statement Merge() : {
585585
}
586586
{
587587
<K_MERGE> <K_INTO> table=TableWithAlias() { merge.setTable(table); }
588-
<K_USING> "("
588+
<K_USING>
589589
( table=Table() { merge.setUsingTable(table); }
590-
| select=SubSelect() { merge.setUsingSelect(select); } )
591-
")" [ alias = Alias() { merge.setUsingAlias(alias); } ] <K_ON>
590+
| "(" select=SubSelect() { merge.setUsingSelect(select); } ")" )
591+
[ alias = Alias() { merge.setUsingAlias(alias); } ] <K_ON>
592592
"(" condition = Condition() { merge.setOnCondition(condition); } ")"
593593

594594
[ LOOKAHEAD(2) update = MergeUpdateClause() { merge.setMergeUpdate(update); } ]
@@ -670,7 +670,7 @@ String RelObjectName() :
670670
| tk=<K_ROW> | tk=<K_ROWS> | tk=<K_SIBLINGS> | tk=<K_VALUE> | tk=<K_XML>
671671
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY> | tk=<K_ANY>
672672
| tk=<K_OPEN> | tk=<K_OVER> | tk=<K_VALUES> | tk=<K_PERCENT> | tk=<K_PRIOR>
673-
| tk=<K_SEPARATOR> | tk=<K_NO> | tk=<K_ACTION> | tk=<K_CASCADE>
673+
| tk=<K_SEPARATOR> | tk=<K_NO> | tk=<K_ACTION> | tk=<K_CASCADE> | tk=<K_END>
674674
)
675675

676676
{ return tk.image; }
@@ -1580,12 +1580,14 @@ Expression AndExpression() :
15801580
Expression Condition():
15811581
{
15821582
Expression result;
1583+
Token token;
15831584
}
15841585
{
15851586
(LOOKAHEAD(SQLCondition()) result=SQLCondition()
15861587
| LOOKAHEAD(RegularCondition()) result=RegularCondition()
15871588
| LOOKAHEAD(Function()) result=Function()
15881589
| result=Column()
1590+
| LOOKAHEAD({ "0".equals(getToken(1).image) || "1".equals(getToken(1).image) }) token=<S_LONG> { result = new LongValue(token.image); }
15891591
)
15901592

15911593
{ return result; }
@@ -2122,10 +2124,11 @@ JsonExpression JsonExpression() : {
21222124
IntervalExpression IntervalExpression() : {
21232125
IntervalExpression interval = new IntervalExpression();
21242126
Token token;
2127+
boolean signed = false;
21252128
}
21262129
{
2127-
<K_INTERVAL> (token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL>)
2128-
{ interval.setParameter(token.image); }
2130+
<K_INTERVAL> ["-" {signed=true;}] (token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL>)
2131+
{ interval.setParameter((signed?"-":"") + token.image); }
21292132
[ LOOKAHEAD(2) token = <S_IDENTIFIER> { interval.setIntervalType(token.image); } ]
21302133
{
21312134
return interval;

src/test/java/net/sf/jsqlparser/test/merge/MergeTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,16 @@ public void testOracleMergeIntoStatement() throws JSQLParserException {
5050

5151
assertSqlCanBeParsedAndDeparsed(sql, true);
5252
}
53+
54+
@Test
55+
public void testMergeIssue232() throws JSQLParserException {
56+
String sql = "MERGE INTO xyz using dual " +
57+
"ON ( custom_id = ? ) " +
58+
"WHEN matched THEN " +
59+
"UPDATE SET abc = sysdate " +
60+
"WHEN NOT matched THEN " +
61+
"INSERT (custom_id) VALUES (?)";
62+
63+
assertSqlCanBeParsedAndDeparsed(sql, true);
64+
}
5365
}

src/test/java/net/sf/jsqlparser/test/select/SelectASTTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
*/
1919
package net.sf.jsqlparser.test.select;
2020

21-
import junit.framework.TestCase;
2221
import net.sf.jsqlparser.JSQLParserException;
2322
import net.sf.jsqlparser.parser.CCJSqlParserTreeConstants;
2423
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
@@ -30,17 +29,17 @@
3029
import net.sf.jsqlparser.statement.select.Select;
3130
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
3231
import net.sf.jsqlparser.statement.select.SelectItem;
32+
import static org.junit.Assert.assertEquals;
33+
import static org.junit.Assert.assertNotNull;
34+
import org.junit.Test;
3335

3436
/**
3537
*
3638
* @author toben
3739
*/
38-
public class SelectASTTest extends TestCase {
39-
40-
public SelectASTTest(String name) {
41-
super(name);
42-
}
40+
public class SelectASTTest {
4341

42+
@Test
4443
public void testSelectASTColumn() throws JSQLParserException {
4544
String sql = "SELECT a, b FROM mytable order by b, c";
4645
StringBuilder b = new StringBuilder(sql);
@@ -63,9 +62,9 @@ public void testSelectASTColumn() throws JSQLParserException {
6362
assertEquals("SELECT *, * FROM mytable order by #, #", b.toString());
6463
}
6564

65+
@Test
6666
public void testSelectASTNode() throws JSQLParserException {
6767
String sql = "SELECT a, b FROM mytable order by b, c";
68-
StringBuilder b = new StringBuilder(sql);
6968
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
7069
node.dump("*");
7170
assertEquals(CCJSqlParserTreeConstants.JJTSTATEMENT, node.getId());

0 commit comments

Comments
 (0)