3333import static apijson .SQL .AND ;
3434import static apijson .SQL .NOT ;
3535import static apijson .SQL .OR ;
36+ import static apijson .SQL .ON ;
3637
3738import java .util .ArrayList ;
3839import java .util .Arrays ;
@@ -3803,8 +3804,25 @@ public String getJoinString() throws Exception {
38033804 if (onList != null ) {
38043805 boolean first = true ;
38053806 for (On on : onList ) {
3806- sql += (first ? " ON " : " AND " ) + quote + jt + quote + "." + quote + on .getKey () + quote + " = "
3807- + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote ;
3807+ String rt = on .getRelateType ();
3808+ if (StringUtil .isEmpty (rt , false )) {
3809+ sql += (first ? ON : AND ) + quote + jt + quote + "." + quote + on .getKey () + quote + " = "
3810+ + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote ;
3811+ }
3812+ else if ("{}" .equals (rt )) {
3813+ sql += (first ? ON : AND ) + "json_contains(" + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote
3814+ // + ", concat('\\'', " + quote + jt + quote + "." + quote + on.getKey() + quote + ", '\\''), '$')";
3815+ + ", cast(" + quote + jt + quote + "." + quote + on .getKey () + quote + " AS CHAR), '$')" ;
3816+ }
3817+ else if ("<>" .equals (rt )) {
3818+ sql += (first ? ON : AND ) + "json_contains(" + quote + jt + quote + "." + quote + on .getKey () + quote
3819+ // + ", concat('\\'', " + quote + on.getTargetTable() + quote + "." + quote + on.getTargetKey() + quote + ", '\\''), '$')";
3820+ + ", cast(" + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote + " AS CHAR), '$')" ;
3821+ }
3822+ else {
3823+ throw new IllegalArgumentException ("join:value 中 value 里的 " + jt + "/" + j .getPath ()
3824+ + " 中 JOIN ON 条件关联类型 " + rt + " 不合法!只支持 =, {}, <> 这几种!" );
3825+ }
38083826 first = false ;
38093827 }
38103828 }
@@ -3826,8 +3844,26 @@ public String getJoinString() throws Exception {
38263844 if (onList != null ) {
38273845 boolean first = true ;
38283846 for (On on : onList ) {
3829- sql += (first ? " ON " : " AND " ) + quote + jt + quote + "." + quote + on .getKey () + quote + " = "
3830- + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote ;
3847+ String rt = on .getRelateType ();
3848+ if (StringUtil .isEmpty (rt , false )) {
3849+ sql += (first ? ON : AND ) + quote + jt + quote + "." + quote + on .getKey () + quote + " = "
3850+ + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote ;
3851+ }
3852+ else if ("{}" .equals (rt )) {
3853+ sql += (first ? ON : AND ) + "json_contains(" + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote
3854+ // + ", concat('\\'', " + quote + jt + quote + "." + quote + on.getKey() + quote + ", '\\''), '$')";
3855+ + ", cast(" + quote + jt + quote + "." + quote + on .getKey () + quote + " AS CHAR), '$')" ;
3856+ }
3857+ else if ("<>" .equals (rt )) {
3858+ sql += (first ? ON : AND ) + "json_contains(" + quote + jt + quote + "." + quote + on .getKey () + quote
3859+ // + ", concat('\\'', " + quote + on.getTargetTable() + quote + "." + quote + on.getTargetKey() + quote + ", '\\''), '$')";
3860+ + ", cast(" + quote + on .getTargetTable () + quote + "." + quote + on .getTargetKey () + quote + " AS CHAR), '$')" ;
3861+ }
3862+ else {
3863+ throw new IllegalArgumentException ("join:value 中 value 里的 " + jt + "/" + j .getPath ()
3864+ + " 中 JOIN ON 条件关联类型 " + rt + " 不合法!只支持 =, {}, <> 这几种!" );
3865+ }
3866+
38313867 first = false ;
38323868 }
38333869 }
0 commit comments