1+ package com .codingapi .springboot .authorization .enhancer .handler ;
2+
3+ import com .codingapi .springboot .authorization .condition .IConditionSQL ;
4+ import com .codingapi .springboot .authorization .condition .JoinConditionSQL ;
5+ import lombok .SneakyThrows ;
6+ import net .sf .jsqlparser .expression .Expression ;
7+ import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
8+ import net .sf .jsqlparser .schema .Table ;
9+ import net .sf .jsqlparser .statement .select .Join ;
10+ import net .sf .jsqlparser .statement .select .PlainSelect ;
11+
12+ import java .util .ArrayList ;
13+ import java .util .Collection ;
14+
15+ public class JoinConditionSQLHandler implements IConditionSQLHandler {
16+
17+ @ Override
18+ public boolean support (IConditionSQL conditionSQL ) {
19+ return conditionSQL instanceof JoinConditionSQL ;
20+ }
21+
22+ @ SneakyThrows
23+ @ Override
24+ public void handler (IConditionSQL conditionSQL , PlainSelect plainSelect , Table table , Expression where ) {
25+ JoinConditionSQL joinConditionSQL = (JoinConditionSQL ) conditionSQL ;
26+
27+ if (plainSelect .getJoins ()==null ){
28+ plainSelect .setJoins (new ArrayList <>());
29+ }
30+
31+ Join join = new Join ();
32+ join .setFromItem (joinConditionSQL .toJoinTable ());
33+
34+ if (joinConditionSQL .getType ()== JoinConditionSQL .Type .INNER ){
35+ join .setInner (true );
36+ }
37+
38+ if (joinConditionSQL .getType ()== JoinConditionSQL .Type .RIGHT ){
39+ join .setRight (true );
40+ }
41+
42+ if (joinConditionSQL .getType ()== JoinConditionSQL .Type .LEFT ){
43+ join .setLeft (true );
44+ }
45+
46+ Collection <Expression > expressions = new ArrayList <>();
47+ Expression expression = CCJSqlParserUtil .parseCondExpression (joinConditionSQL .getOnCondition ());
48+ expressions .add (expression );
49+ join .setOnExpressions (expressions );
50+ plainSelect .addJoins (join );
51+ }
52+ }
0 commit comments