private void encodeAliasedColumnName( JDBCDataStore store, String colName, String typeName, StringBuffer sql, Hints hints) throws SQLException { store.dialect.encodeTableName(typeName, sql); sql.append("."); store.dialect.encodeColumnName(colName, sql); }
/** * Helper method to encode table name which checks if a schema is set and prefixes the table * name with it, with the addition of an alias to the name */ public void encodeAliasedTableName( String tableName, StringBuffer sql, Hints hints, String alias) throws SQLException { VirtualTable vtDefinition = virtualTables.get(tableName); if (vtDefinition != null) { sql.append("(").append(vtDefinition.expandParameters(hints)).append(")"); if (alias == null) { alias = "vtable"; } dialect.encodeTableAlias(alias, sql); } else { if (databaseSchema != null) { dialect.encodeSchemaName(databaseSchema, sql); sql.append("."); } dialect.encodeTableName(tableName, sql); if (alias != null) { dialect.encodeTableAlias(alias, sql); } } }
@Override public void registerClassToSqlMappings(Map<Class<?>, Integer> mappings) { super.registerClassToSqlMappings(mappings); mappings.put(Geometry.class, Types.BLOB); }
/** Helper method that encode a column name. */ private void encodeColumnName(StringBuffer sql, String tableName, String columnName) { JDBCDataStore dataStore = getDataStore(); SQLDialect dialect = dataStore.getSQLDialect(); String schema = dataStore.getDatabaseSchema(); if (schema != null) { dialect.encodeSchemaName(schema, sql); sql.append("."); } dialect.encodeColumnName(tableName, columnName, sql); }
.append(" from "); if (delegate.getDatabaseSchema() != null) { pgDialect.encodeSchemaName(delegate.getDatabaseSchema(), sb); sb.append("."); pgDialect.encodeTableName(delegate.getPrimaryKey().getTableName(), sb); sb.append(" order by "); pgDialect.encodeColumnName( null, delegate.getFeatureType().getGeometryDescriptor().getLocalName(), sb); sb.append(" <-> ");
/** * Encodes the name of a column in an SQL statement. * * <p>This method wraps <tt>raw</tt> in the character provided by {@link #getNameEscape()}. * Subclasses usually dont override this method and instead override {@link #getNameEscape()}. * * @deprecated use {@link #encodeColumnName(String, String, StringBuffer)}. */ public final void encodeColumnName(String raw, StringBuffer sql) { encodeColumnName(null, raw, sql); }
throws SQLException, FilterToSQLException, IOException { Collection<String> ids = Collections.emptyList(); if (getDataStore().dialect.isLimitOffsetSupported()) { int startIndex = query.getStartIndex() == null ? 0 : query.getStartIndex(); int maxFeatures = query.getMaxFeatures(); topIds.append(sortSQL); getDataStore().dialect.applyLimitOffset(topIds, maxFeatures, startIndex); sql.append(topIds); sql.append(") "); String newAlias = createAlias(typeName, tableNames); tableNames.add(newAlias); getDataStore().dialect.encodeTableName(newAlias, sql); sql.append(" ON ("); getDataStore().dialect.encodeColumnName(alias, id, sql); sql.append(" = "); getDataStore().dialect.encodeColumnName(newAlias, id, sql); sql.append(" ) ");
join.getJoiningTypeName(), joinClause, query.getHints()); joinClause.append(" "); getDataStore().dialect.encodeTableName(alias, joinClause); joinClause.append(" ON ( "); getDataStore().dialect.encodeColumnAlias(columnName, sql); } else { encodeColumnName(columnName, featureType.getTypeName(), sql, query.getHints()); getDataStore() .dialect .encodeColumnName( aliases[i], query.getQueryJoins().get(i).getIds().get(j), for (PrimaryKeyColumn col : joinKey.getColumns()) { if (aliases[i] != null) { getDataStore().dialect.encodeColumnName(aliases[i], col.getName(), sql); } else { encodeColumnName(col.getName(), joinTypeName, sql, query.getHints()); .encodeColumnName( lastTableName, lastSortBy[i].getPropertyName().getPropertyName(), getDataStore().dialect.encodeTableName(TEMP_FILTER_ALIAS, sortBySQL); sortBySQL.append(" ON ( "); encodeColumnName2(
/** * Helper method to encode table name which checks if a schema is set and * prefixes the table name with it. */ protected void encodeTableName(String tableName, StringBuffer sql) { if (databaseSchema != null) { dialect.encodeSchemaName(databaseSchema, sql); sql.append("."); } dialect.encodeTableName(tableName, sql); }
/** * Checks if the query needs limit/offset treatment * * @param query * @return true if the query needs limit/offset treatment and if the sql dialect can do that * natively */ boolean checkLimitOffset(final Integer offset, final int limit) { // if we cannot, don't bother checking the query if (!dialect.isLimitOffsetSupported()) return false; return limit != Integer.MAX_VALUE || (offset != null && offset > 0); }
dialect.encodeColumnName(col.getName(), sql); sql.append(","); if (att instanceof GeometryDescriptor) { dialect.encodeGeometryColumn((GeometryDescriptor) att, sql); dialect.encodeColumnAlias(att.getLocalName(), sql); } else { dialect.encodeColumnName(att.getLocalName(), sql);
/** * Encodes a field name in SQL, prefixing it with the table name (but not the schema). * * <p>Mostly useful when aliases are used. */ public String encode(String s) { StringBuffer buf = new StringBuffer(); store.dialect.encodeTableName(tableName, buf); buf.append("."); buf.append(s); return buf.toString(); } }
@Override public void registerSqlTypeToClassMappings(Map<Integer, Class<?>> mappings) { super.registerSqlTypeToClassMappings(mappings); // clear BLOB, we handle them custom mappings.remove(Types.BLOB); }
boolean queryLimitOffset = checkLimitOffset(query.getStartIndex(), query.getMaxFeatures()); boolean visitorLimitOffset = visitor == null ? false : visitor.hasLimits() && dialect.isLimitOffsetSupported(); dialect.encodeColumnName(null, join.getPrimaryAlias(), sql); sql.append(".* FROM "); } else { if (dialect.isAggregatedSortSupported(function)) { sort(featureType, query.getSortBy(), null, sql);
throws SQLException { StringBuffer sql = new StringBuffer(); String escape = getNameEscape(); sql.append("DROP INDEX "); if (supportsSchemaForIndex() && databaseSchema != null) { encodeSchemaName(databaseSchema, sql); sql.append(".");
dialect.encodeColumnName(prefix, col.getName(), sql); if (prefix != null) { dialect.encodeColumnAlias(prefix + "_" + col.getName(), sql); dialect.encodeColumnName(prefix, columnName, sql); dialect.encodeColumnAlias(alias, sql);
srid = virtualTable.getNativeSrid(name); } else { srid = dialect.getGeometrySRID(databaseSchema, tableName, name, cx); if (srid != null) crs = dialect.createCRS(srid, cx); } catch (Exception e) { String msg = "Error occured determing srid for " + tableName + "." + name; } else { dimension = dialect.getGeometryDimension( databaseSchema, tableName, name, cx); dialect.postCreateAttribute(att, tableName, databaseSchema, cx); tb.add(att); dialect.postCreateFeatureType(ft, metaData, databaseSchema, cx); return ft; } catch (SQLException e) {
public void testUniqueWithLimitOffset() throws Exception { if (!dataStore.getSQLDialect().isLimitOffsetSupported() || !dataStore.getSQLDialect().isAggregatedSortSupported("distinct")) { return; } FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("stringProperty")); UniqueVisitor v = new MyUniqueVisitor(p); Query q = new Query(tname("ft1")); q.setStartIndex(0); q.setMaxFeatures(2); dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null); assertFalse(visited); Set result = v.getResult().toSet(); assertEquals(2, result.size()); }
/** * The sql type name to java type mappings that the dialect uses when * reading and writing objects to and from the database. * <p> * These mappings are derived from {@link SQLDialect#registerSqlTypeNameToClassMappings(Map)} * </p> * * @return The mappings, never <code>null<code>. */ public Map<String, Class<?>> getSqlTypeNameToClassMappings() { if (sqlTypeNameToClassMappings == null) { sqlTypeNameToClassMappings = new HashMap<String, Class<?>>(); dialect.registerSqlTypeNameToClassMappings(sqlTypeNameToClassMappings); } return sqlTypeNameToClassMappings; }
dialect.encodeColumnName(columnName, sql); sql.append(" FROM "); encodeTableName(tableName, sql, null); try { String sequenceName = dialect.getSequenceForColumn(databaseSchema, tableName, columnName, cx); if (sequenceName != null) { col = new SequencedPrimaryKeyColumn(columnName, columnType, sequenceName);