/** * 租户字段别名设置 * <p>tableName.tenantId 或 tableAlias.tenantId</p> * * @param table 表对象 * @return 字段 */ protected Column getAliasColumn(Table table) { StringBuilder column = new StringBuilder(); if (null == table.getAlias()) { column.append(table.getName()); } else { column.append(table.getAlias().getName()); } column.append(StringPool.DOT); column.append(tenantHandler.getTenantIdColumn()); return new Column(column.toString()); } }
String tableInfo = table.getName();
/** * update 语句处理 */ @Override public void processUpdate(Update update) { List<Table> tableList = update.getTables(); Assert.isTrue(null != tableList && tableList.size() < 2, "Failed to process multiple-table update, please exclude the statementId"); Table table = tableList.get(0); if (tenantHandler.doTableFilter(table.getName())) { // 过滤退出执行 return; } update.setWhere(this.andExpression(table, update.getWhere())); }
@Override public void visit(Column tableColumn) { if (allowColumnProcessing && tableColumn.getTable() != null && tableColumn.getTable().getName() != null) { visit(tableColumn.getTable()); } }
/** * delete 语句处理 */ @Override public void processDelete(Delete delete) { if (tenantHandler.doTableFilter(delete.getTable().getName())) { // 过滤退出执行 return; } delete.setWhere(this.andExpression(delete.getTable(), delete.getWhere())); }
/** * 处理联接语句 */ protected void processJoin(Join join) { if (join.getRightItem() instanceof Table) { Table fromTable = (Table) join.getRightItem(); if (this.tenantHandler.doTableFilter(fromTable.getName())) { // 过滤退出执行 return; } join.setOnExpression(builderExpression(join.getOnExpression(), fromTable)); } }
Connection connection = (Connection) DTXLocal.cur().getResource(); Insert insert = (Insert) statementInformation.getAttachment(); TableStruct tableStruct = tableStructAnalyser.analyse(connection, insert.getTable().getName());
/** * insert 语句处理 */ @Override public void processInsert(Insert insert) { if (tenantHandler.doTableFilter(insert.getTable().getName())) { // 过滤退出执行 return; } insert.getColumns().add(new Column(tenantHandler.getTenantIdColumn())); if (insert.getSelect() != null) { processPlainSelect((PlainSelect) insert.getSelect().getSelectBody(), true); } else if (insert.getItemsList() != null) { // fixed github pull/295 ItemsList itemsList = insert.getItemsList(); if (itemsList instanceof MultiExpressionList) { ((MultiExpressionList) itemsList).getExprList().forEach(el -> el.getExpressions().add(tenantHandler.getTenantId())); } else { ((ExpressionList) insert.getItemsList()).getExpressions().add(tenantHandler.getTenantId()); } } else { throw ExceptionUtils.mpe("Failed to process multiple-table update, please exclude the tableName or statementId"); } }
TableStruct tableStruct = tableStructAnalyser.analyse(connection, table.getName()); tableStruct.getColumns().forEach((k, v) -> { columns.add(tableStruct.getTableName() + SqlUtils.DOT + k);
/** * 处理 PlainSelect * * @param plainSelect ignore * @param addColumn 是否添加租户列,insert into select语句中需要 */ protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) { FromItem fromItem = plainSelect.getFromItem(); if (fromItem instanceof Table) { Table fromTable = (Table) fromItem; if (tenantHandler.doTableFilter(fromTable.getName())) { // 过滤退出执行 return; } plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable)); if (addColumn) { plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(tenantHandler.getTenantIdColumn()))); } } else { processFromItem(fromItem); } List<Join> joins = plainSelect.getJoins(); if (joins != null && joins.size() > 0) { joins.forEach(j -> { processJoin(j); processFromItem(j.getRightItem()); }); } }
Connection connection = (Connection) DTXLocal.cur().getResource(); TableStruct leftTableStruct = tableStructAnalyser.analyse(connection, leftTable.getName()); leftTableStruct.getPrimaryKeys().forEach(primaryKey -> { Column column = new Column(leftTable, primaryKey);
Expression rightExpression = ((BinaryExpression) expression).getRightExpression(); if (joinTable != null && rightExpression instanceof Column) { if (Objects.equals(((Column) rightExpression).getTable().getName(), table.getAlias().getName())) { validUseIndex(table, ((Column) rightExpression).getColumnName(), connection); validUseIndex(joinTable, ((Column) leftExpression).getColumnName(), connection);
private static List getTableColumns(ISession session, Table table) throws IOException { List colNames = new ArrayList(); String tableName = table.getSchemaName() + "." + table.getName(); SeColumnDefinition[] cols = session.describe(tableName); for (int i = 0; i < cols.length; i++) { String colName = cols[i].getName(); colName = tableName + "." + colName; colNames.add(colName); } return colNames; } }
final String userName; qualifiedTable.setName(table.getName()); qualifiedTable.setAlias(table.getAlias());
public static Column qualify( ISession session, Map<String, Object> tableAliases, Column column) { Table table = column.getTable(); String columnName = column.getColumnName(); Table unaliasedTable = (Table) tableAliases.get(table.getName()); Table qualifiedTable; if (unaliasedTable == null) { // not an aliased table, qualify it qualifiedTable = TableQualifier.qualify(session, table); } else { // AllTableColumns is refering to an aliased table in the FROM // clause, // replace its table by the original one to get rid of the alias qualifiedTable = unaliasedTable; } Column qualifiedColumn = new Column(); qualifiedColumn.setColumnName(columnName); qualifiedColumn.setTable(qualifiedTable); return qualifiedColumn; } }
private static boolean hasEntityAlias(String entityName, FromItem fromItem) { return fromItem instanceof net.sf.jsqlparser.schema.Table && ((net.sf.jsqlparser.schema.Table) fromItem).getName().equals(entityName) && fromItem.getAlias() != null && !StringUtils.isBlank(fromItem.getAlias().getName()); }
private Shape createTableShape(CreateTable createTable, List<ColumnDefinition> columnList) { String tableName = createTable.getTable().getName(); String shapeId = tableName.replaceAll(tableConfig.getTableIriTemplate().getIriPattern(), tableConfig.getTableIriTemplate().getIriReplacement()); Shape shape = new Shape(new URIImpl(shapeId)); addPropertyContraint(shape, columnList); return shape; }