Skip to content

Commit fd03ad4

Browse files
committed
Add support for Hive's LEFT SEMI JOIN
1 parent bb978c4 commit fd03ad4

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

src/main/java/net/sf/jsqlparser/statement/select/Join.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class Join {
3939
private boolean inner = false;
4040
private boolean simple = false;
4141
private boolean cross = false;
42+
private boolean semi = false;
4243
private FromItem rightItem;
4344
private Expression onExpression;
4445
private List<Column> usingColumns;
@@ -82,6 +83,15 @@ public void setOuter(boolean b) {
8283
outer = b;
8384
}
8485

86+
/**
87+
* Whether is a "SEMI" join
88+
*
89+
* @return true if is a "SEMI" join
90+
*/
91+
public boolean isSemi() { return semi; }
92+
93+
public void setSemi(boolean b) { semi = b; }
94+
8595
/**
8696
* Whether is a "LEFT" join
8797
*
@@ -199,6 +209,8 @@ public String toString() {
199209
type += "OUTER ";
200210
} else if (isInner()) {
201211
type += "INNER ";
212+
} else if (isSemi()) {
213+
type += "SEMI ";
202214
}
203215

204216
return type + "JOIN " + rightItem + ((onExpression != null) ? " ON " + onExpression + "" : "")

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,8 @@ public void deparseJoin(Join join) {
338338
buffer.append(" OUTER");
339339
} else if (join.isInner()) {
340340
buffer.append(" INNER");
341+
} else if (join.isSemi()) {
342+
buffer.append(" SEMI");
341343
}
342344

343345
buffer.append(" JOIN ");

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
232232
| <K_DELAYED : "DELAYED">
233233
| <K_HIGH_PRIORITY : "HIGH_PRIORITY">
234234
| <K_IGNORE : "IGNORE">
235+
| <K_SEMI : "SEMI">
235236
}
236237

237238
TOKEN : /* Operators */
@@ -1224,9 +1225,9 @@ Join JoinerExpression():
12241225
List<Column> columns = null;
12251226
}
12261227
{
1227-
[
1228-
( <K_LEFT> { join.setLeft(true); }
1229-
| <K_RIGHT> { join.setRight(true); }
1228+
[
1229+
<K_LEFT> { join.setLeft(true); } [ <K_SEMI> { join.setSemi(true); } | <K_OUTER> { join.setOuter(true); } ]
1230+
| ( <K_RIGHT> { join.setRight(true); }
12301231
| <K_FULL> { join.setFull(true); }
12311232
) [ <K_OUTER> { join.setOuter(true); } ]
12321233
| <K_INNER> { join.setInner(true); }

0 commit comments

Comments
 (0)