//package org.jeecg.config.mybatis; // //import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; //import net.sf.jsqlparser.expression.BinaryExpression; //import net.sf.jsqlparser.expression.Expression; //import net.sf.jsqlparser.expression.Parenthesis; //import net.sf.jsqlparser.expression.operators.conditional.AndExpression; //import net.sf.jsqlparser.expression.operators.conditional.OrExpression; //import net.sf.jsqlparser.expression.operators.relational.*; //import net.sf.jsqlparser.schema.Column; //import net.sf.jsqlparser.schema.Table; //import net.sf.jsqlparser.statement.select.*; // //import java.util.List; // ///** // * 复写租户条件 // */ //public class JeecgTenantParser extends TenantSqlParser { // // /** // * @param expression // * @param table // * @return // */ // protected Expression processTableAlias(Expression expression, Table table) { // String tableAliasName; // if (table.getAlias() == null) { // tableAliasName = table.getName(); // } else { // tableAliasName = table.getAlias().getName(); // } // // // in // if (expression instanceof InExpression) { // InExpression in = (InExpression) expression; // if (in.getLeftExpression() instanceof Column) { // setTableAliasNameForColumn((Column) in.getLeftExpression(), tableAliasName); // } // // // 比较操作 // } else if (expression instanceof BinaryExpression) { // BinaryExpression compare = (BinaryExpression) expression; // if (compare.getLeftExpression() instanceof Column) { // setTableAliasNameForColumn((Column) compare.getLeftExpression(), tableAliasName); // } else if (compare.getRightExpression() instanceof Column) { // setTableAliasNameForColumn((Column) compare.getRightExpression(), tableAliasName); // } // // // between // } else if (expression instanceof Between) { // Between between = (Between) expression; // if (between.getLeftExpression() instanceof Column) { // setTableAliasNameForColumn((Column) between.getLeftExpression(), tableAliasName); // } // } // return expression; // } // // private void setTableAliasNameForColumn(Column column, String tableAliasName) { // column.setColumnName(tableAliasName + "." + column.getColumnName()); // } // // /** // * 默认是按 tenant_id=1 按等于条件追加 // * // * @param currentExpression 现有的条件:比如你原来的sql查询条件 // * @param table // * @return // */ // @Override // protected Expression builderExpression(Expression currentExpression, Table table) { // final Expression tenantExpression = this.getTenantHandler().getTenantId(true); // Expression appendExpression; // if (!(tenantExpression instanceof SupportsOldOracleJoinSyntax)) { // appendExpression = new EqualsTo(); // ((EqualsTo) appendExpression).setLeftExpression(this.getAliasColumn(table)); // ((EqualsTo) appendExpression).setRightExpression(tenantExpression); // } else { // appendExpression = processTableAlias(tenantExpression, table); // } // if (currentExpression == null) { // return appendExpression; // } // if (currentExpression instanceof BinaryExpression) { // BinaryExpression binaryExpression = (BinaryExpression) currentExpression; // if (binaryExpression.getLeftExpression() instanceof FromItem) { // processFromItem((FromItem) binaryExpression.getLeftExpression()); // } // if (binaryExpression.getRightExpression() instanceof FromItem) { // processFromItem((FromItem) binaryExpression.getRightExpression()); // } // } else if (currentExpression instanceof InExpression) { // InExpression inExp = (InExpression) currentExpression; // ItemsList rightItems = inExp.getRightItemsList(); // if (rightItems instanceof SubSelect) { // processSelectBody(((SubSelect) rightItems).getSelectBody()); // } // } // if (currentExpression instanceof OrExpression) { // return new AndExpression(new Parenthesis(currentExpression), appendExpression); // } else { // return new AndExpression(currentExpression, appendExpression); // } // } // // @Override // protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) { // FromItem fromItem = plainSelect.getFromItem(); // if (fromItem instanceof Table) { // Table fromTable = (Table) fromItem; // if (!this.getTenantHandler().doTableFilter(fromTable.getName())) { // plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable)); // if (addColumn) { // plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(this.getTenantHandler().getTenantIdColumn()))); // } // } // } else { // processFromItem(fromItem); // } // List joins = plainSelect.getJoins(); // if (joins != null && joins.size() > 0) { // joins.forEach(j -> { // processJoin(j); // processFromItem(j.getRightItem()); // }); // } // } // //}