/** * Creates a new {@link TableAliasManager} instance. */ public TableAliasManager() { rootTableAlias = generateNew(); }
protected StringBuilder getPreparedStatementDatasetIDs( AbstractWhereBuilder builder ) { StringBuilder getDatasetIDs = new StringBuilder( 300 ); String rootTableAlias = builder.getAliasManager().getRootTableAlias(); getDatasetIDs.append( "SELECT DISTINCT " ); getDatasetIDs.append( rootTableAlias ); getDatasetIDs.append( '.' ); getDatasetIDs.append( idColumn ); // for SELECT DISTINCT, all ORDER BY columns have to be SELECTed as well if ( builder.getOrderBy() != null ) { // hack to transform the ORDER BY column list in select list String orderColList = builder.getOrderBy().getSQL().toString(); int i = 1; while ( orderColList.contains( " ASC" ) || orderColList.contains( "DESC" ) ) { orderColList = orderColList.replaceFirst( " ASC| DESC", " AS crit" + ( i++ ) ); } getDatasetIDs.append( ',' ); getDatasetIDs.append( orderColList ); } return getDatasetIDs; }
String tableAlias = aliasManager.getRootTableAlias(); if ( !tableColumn.first.first.equals( mainTable ) ) { String fromTable = mainTable; String fromTableAlias = aliasManager.getRootTableAlias(); String fromColumn = id; String toTable = tableColumn.first.first; String toTableAlias = aliasManager.generateNew(); String toColumn = fk_main; joins.add( new Join( fromTable, fromTableAlias, fromColumn, toTable, toTableAlias, toColumn ) );
protected final TableAliasManager aliasManager = new TableAliasManager();
protected void getPSBody( AbstractWhereBuilder builder, StringBuilder getDatasetIDs ) { String rootTableAlias = builder.getAliasManager().getRootTableAlias(); getDatasetIDs.append( " FROM " ); getDatasetIDs.append( mainTable ); getDatasetIDs.append( " " ); getDatasetIDs.append( rootTableAlias ); for ( PropertyNameMapping mappedPropName : builder.getMappedPropertyNames() ) { for ( Join join : mappedPropName.getJoins() ) { getDatasetIDs.append( " LEFT OUTER JOIN " ); getDatasetIDs.append( join.getToTable() ); getDatasetIDs.append( ' ' ); getDatasetIDs.append( join.getToTableAlias() ); getDatasetIDs.append( " ON " ); getDatasetIDs.append( join.getSQLJoinCondition() ); } } if ( builder.getWhere() != null ) { getDatasetIDs.append( " WHERE " ); getDatasetIDs.append( builder.getWhere().getSQL() ); } }
private void followJoins( List<TableJoin> joinedTables ) { if ( joinedTables != null ) { for ( TableJoin joinedTable : joinedTables ) { String fromTable = currentTable; String fromTableAlias = currentTableAlias; String toTable = joinedTable.getToTable().toString(); String toTableAlias = aliasManager.generateNew(); List<String> fromColumns = new ArrayList<String>( joinedTable.getFromColumns().size() ); for ( SQLIdentifier fromColumn : joinedTable.getFromColumns() ) { fromColumns.add( fromColumn.toString() ); } List<String> toColumns = new ArrayList<String>( joinedTable.getToColumns().size() ); for ( SQLIdentifier toColumn : joinedTable.getToColumns() ) { toColumns.add( toColumn.toString() ); } Join appliedJoin = new Join( fromTable, fromTableAlias, fromColumns, toTable, toTableAlias, toColumns ); joins.add( appliedJoin ); currentTable = toTable; currentTableAlias = toTableAlias; } } } }
getDatasetIDs.append( "SELECT " ); getDatasetIDs.append( "COUNT( DISTINCT(" ); getDatasetIDs.append( builder.getAliasManager().getRootTableAlias() ); getDatasetIDs.append( "." ); getDatasetIDs.append( idColumn );
private void map( FeatureMapping mapping, List<MappableStep> remaining ) throws UnmappableException { // followJoins( mapping.getJoinedTable() ); if ( remaining.size() < 2 ) { throw new UnmappableException( "Not enough steps." ); } MappableStep ftStep = remaining.get( 0 ); if ( !( ftStep instanceof ElementStep ) ) { throw new UnmappableException( "Must provide a feature type name." ); } QName ftName = ( (ElementStep) ftStep ).getNodeName(); FeatureTypeMapping ftMapping = schema.getFtMapping( ftName ); if ( ftMapping == null ) { throw new UnmappableException( "Feature type '" + ftName + " is not mapped to a table." ); } String fromTable = currentTable; String fromTableAlias = currentTableAlias; // TODO what do do with Href mappings here? Needs proper reference resolving code for mapping here... String fromColumn = mapping.getJoinedTable().get( 0 ).getFromColumns().get( 0 ).toString(); String toTable = ftMapping.getFtTable().toString(); String toTableAlias = aliasManager.generateNew(); String toColumn = ftMapping.getFidMapping().getColumn(); Join appliedJoin = new Join( fromTable, fromTableAlias, Collections.singletonList( fromColumn ), toTable, toTableAlias, Collections.singletonList( toColumn ) ); joins.add( appliedJoin ); currentTable = toTable; currentTableAlias = toTableAlias; map( ftMapping.getMappings(), remaining.subList( 1, remaining.size() ) ); }
LOG.debug( "WHERE clause: " + wb.getWhere() ); String alias = wb != null ? wb.getAliasManager().getRootTableAlias() : "X1";
currentTableAlias = aliasManager.getRootTableAlias(); map( ftMapping.getMappings(), steps );
sql.append( "COUNT(*) FROM (SELECT DISTINCT " ); String ftTableAlias = wb.getAliasManager().getRootTableAlias();
String rootTableQualifier = builder.getAliasManager().getRootTableAlias() + "."; int columnCount = StringUtils.count( sortCols, "," ) + 1; int rootAliasCount = StringUtils.count( sortCols, rootTableQualifier ); String colRegEx = builder.getAliasManager().getRootTableAlias() + ".\\S+"; for ( int i = 1; i <= columnCount; i++ ) { sortCols = sortCols.replaceFirst( colRegEx, "crit" + i );
LOG.debug( "WHERE clause: " + wb.getWhere() ); String alias = wb != null ? wb.getAliasManager().getRootTableAlias() : "X1";
String ftTableAlias = wb.getAliasManager().getRootTableAlias(); LOG.debug( "WHERE clause: " + wb.getWhere() ); LOG.debug( "ORDER BY clause: " + wb.getOrderBy() );
@Override public PropertyNameMapping getMapping( ValueReference propName, TableAliasManager aliasManager ) throws FilterEvaluationException, UnmappableException { GeometryStorageParams geometryParams = new GeometryStorageParams( blobMapping.getCRS(), undefinedSrid, CoordinateDimension.DIM_2 ); GeometryMapping bboxMapping = new GeometryMapping( null, false, new DBField( blobMapping.getBBoxColumn() ), GeometryType.GEOMETRY, geometryParams, null ); return new PropertyNameMapping( getGeometryConverter( bboxMapping ), null, blobMapping.getBBoxColumn(), aliasManager.getRootTableAlias() ); }