List of usage examples for org.hibernate.criterion CriteriaQuery getSQLAlias
public String getSQLAlias(Criteria criteria);
From source file:com.amalto.core.storage.hibernate.FieldTypeCriterion.java
License:Open Source License
@Override public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { return "(" //$NON-NLS-1$ + criteriaQuery.getSQLAlias(this.criteria) + "." //$NON-NLS-1$ + MappingGenerator.DISCRIMINATOR_NAME + " = '" //$NON-NLS-1$ + typeName + "')"; //$NON-NLS-1$ }
From source file:com.amalto.core.storage.hibernate.ManyFieldCriterion.java
License:Open Source License
@Override public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { if (field instanceof ReferenceFieldMetadata && position < 0) { return field.accept(new ForeignKeySQLGenerator(criteriaQuery, value)); } else {/*w w w . j a va 2s . co m*/ if (value instanceof Object[]) { throw new UnsupportedOperationException( "Do not support collection search criteria with multiple values."); //$NON-NLS-1$ } ComplexTypeMetadata type = field.getContainingType(); if (type.getKeyFields().size() > 1) { throw new UnsupportedOperationException( "Do not support collection search if main type has a composite key."); //$NON-NLS-1$ } String containingTypeAlias = criteriaQuery.getSQLAlias(typeCriteria); String containingType = resolver.get(type); String containingTypeKey = resolver.get(type.getKeyFields().iterator().next()); StringBuilder builder = new StringBuilder(); String joinedTableName = resolver.getCollectionTable(field); String columnName; if (field instanceof ReferenceFieldMetadata) { // Naming convention in MDM for repeatable FKs: "x_stores_store" (database field name) + "_" + "x_id" // (referenced field name). columnName = field.getName() + '_' + ((ReferenceFieldMetadata) field).getReferencedField().getName(); } else { columnName = "value"; //$NON-NLS-1$ } builder.append("(SELECT COUNT(1) FROM ") //$NON-NLS-1$ .append(containingType).append(" INNER JOIN ") //$NON-NLS-1$ .append(joinedTableName).append(" ON ") //$NON-NLS-1$ .append(containingType).append(".") //$NON-NLS-1$ .append(containingTypeKey).append(" = ") //$NON-NLS-1$ .append(joinedTableName).append(".") //$NON-NLS-1$ .append(containingTypeKey).append(" WHERE ") //$NON-NLS-1$ .append(joinedTableName).append("." + columnName + " = '") //$NON-NLS-1$ //$NON-NLS-2$ .append(value).append("'"); //$NON-NLS-1$ if (position >= 0) { builder.append(" AND ").append(joinedTableName).append(".pos = ").append(position); //$NON-NLS-1$ //$NON-NLS-2$ } builder.append(" AND ") //$NON-NLS-1$ .append(containingType).append(".") //$NON-NLS-1$ .append(containingTypeKey).append(" = ") //$NON-NLS-1$ .append(containingTypeAlias).append(".") //$NON-NLS-1$ .append(containingTypeKey).append(") > 0"); //$NON-NLS-1$ return builder.toString(); } }
From source file:com.amalto.core.storage.hibernate.ManyFieldProjection.java
License:Open Source License
@Override public String toSqlString(Criteria criteria, int position, CriteriaQuery criteriaQuery) throws HibernateException { Criteria subCriteria = StandardQueryHandler.findCriteria(criteria, aliases); ComplexTypeMetadata containingType = field.getContainingType(); String containerTable = resolver.get(containingType); String collectionTable = resolver.getCollectionTable(field); String containerIdColumn = resolver.get(containingType.getKeyFields().iterator().next()); StringBuilder sqlFragment = new StringBuilder(); switch (dataSource.getDialectName()) { // For Postgres, uses "string_agg" function (introduced in 9.0). case POSTGRES: sqlFragment.append("(select string_agg(") //$NON-NLS-1$ .append(collectionTable).append(".value, ',') FROM ").append(containerTable); //$NON-NLS-1$ for (FieldMetadata currentKey : containingType.getKeyFields()) { String keyName = resolver.get(currentKey); sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$ .append(collectionTable).append(" on ") //$NON-NLS-1$ .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$ .append(collectionTable).append('.').append(keyName); }/*www . j av a 2s . co m*/ sqlFragment.append(" WHERE ") //$NON-NLS-1$ .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$ .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn) .append(") as y").append(position).append('_'); //$NON-NLS-1$ break; // Following databases support group_concat function case H2: case MYSQL: sqlFragment.append("(select group_concat(") //$NON-NLS-1$ .append(collectionTable).append(".value separator ',') FROM ").append(containerTable); //$NON-NLS-1$ for (FieldMetadata currentKey : containingType.getKeyFields()) { String keyName = resolver.get(currentKey); sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$ .append(collectionTable).append(" on ") //$NON-NLS-1$ .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$ .append(collectionTable).append('.').append(keyName); } sqlFragment.append(" WHERE ") //$NON-NLS-1$ .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$ .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn) .append(") as y").append(position).append('_'); //$NON-NLS-1$ break; // Use Oracle 10g "listagg" function (no group_concat on Oracle). case ORACLE_10G: sqlFragment.append("(select listagg(") //$NON-NLS-1$ .append(collectionTable).append(".value, ',') WITHIN GROUP (ORDER BY pos) FROM ") //$NON-NLS-1$ .append(containerTable); for (FieldMetadata currentKey : containingType.getKeyFields()) { String keyName = resolver.get(currentKey); sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$ .append(collectionTable).append(" on ") //$NON-NLS-1$ .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$ .append(collectionTable).append('.').append(keyName); } sqlFragment.append(" WHERE ") //$NON-NLS-1$ .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$ .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn) .append(") as y").append(position).append('_'); //$NON-NLS-1$ break; // SQL Server doesn't support the group_concat function -> use "stuff" function case SQL_SERVER: sqlFragment.append("STUFF((select ',' + ") //$NON-NLS-1$ .append(collectionTable).append(".value FROM ").append(containerTable); //$NON-NLS-1$ for (FieldMetadata currentKey : containingType.getKeyFields()) { String keyName = resolver.get(currentKey); sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$ .append(collectionTable).append(" on ") //$NON-NLS-1$ .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$ .append(collectionTable).append('.').append(keyName); } sqlFragment.append(" WHERE ") //$NON-NLS-1$ .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$ .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn) .append(" FOR XML PATH ('')), 1, 1, '') as y").append(position).append('_'); //$NON-NLS-1$ break; // DB2 supports listagg() function after DB2 9.7 case DB2: sqlFragment.append("(select listagg(") //$NON-NLS-1$ .append(collectionTable).append(".value, ',') WITHIN GROUP (ORDER BY pos) FROM ") //$NON-NLS-1$ .append(containerTable); for (FieldMetadata currentKey : containingType.getKeyFields()) { String keyName = resolver.get(currentKey); sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$ .append(collectionTable).append(" on ") //$NON-NLS-1$ .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$ .append(collectionTable).append('.').append(keyName); } sqlFragment.append(" WHERE ") //$NON-NLS-1$ .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$ .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn) .append(") as y").append(position).append('_'); //$NON-NLS-1$ break; default: throw new NotImplementedException("Support for repeatable element not implemented for dialect '" + dataSource.getDialectName() + "'."); } return sqlFragment.toString(); }
From source file:com.gisgraphy.hibernate.criterion.DistanceOrder.java
License:Open Source License
@Override public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { StringBuilder fragment = new StringBuilder(); fragment.append(" st_distance_sphere("); fragment.append(criteriaQuery.getSQLAlias(criteria)); fragment.append(".location, st_geometryfromtext('"); fragment.append(point.toText());//from w w w .j a v a 2 s.c om fragment.append("',"); fragment.append(SRID.WGS84_SRID.getSRID()); fragment.append(ascending ? ")) asc" : ")) desc"); return fragment.toString(); }
From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java
License:Open Source License
@Test public void distanceOrderPointBooleanShouldTakeAscOrderIntoAccount() { CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class); EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("alias ").once(); EasyMock.replay(criteriaQuery);/*from ww w. j a v a2s . c om*/ DistanceOrder distanceOrder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F), true); String sqlString = distanceOrder.toSqlString(null, criteriaQuery); assertTrue(sqlString.contains("asc")); assertTrue(sqlString.contains("st_distance_sphere")); EasyMock.verify(criteriaQuery); }
From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java
License:Open Source License
@Test public void distanceOrderShouldHaveAscOrderByDefault() { CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class); EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("alias ").once(); EasyMock.replay(criteriaQuery);/*from w w w .j a va 2s .c o m*/ DistanceOrder dorder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F)); String sqlString = dorder.toSqlString(null, criteriaQuery); assertTrue(sqlString.contains("asc")); assertTrue(sqlString.contains("st_distance_sphere")); EasyMock.verify(criteriaQuery); }
From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java
License:Open Source License
@Test public void distanceOrderPointBooleanShouldTakeDescOrderIntoAccount() { CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class); EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn(" alias ").once(); EasyMock.replay(criteriaQuery);//from w ww . j a v a 2s . c o m DistanceOrder dorder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F), false); String sqlString = dorder.toSqlString(null, criteriaQuery); assertTrue(sqlString.contains("desc")); assertTrue(sqlString.contains("st_distance_sphere")); EasyMock.verify(criteriaQuery); }
From source file:com.gisgraphy.hibernate.criterion.DistanceRestriction.java
License:Open Source License
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { String columnName = criteriaQuery.getColumn(criteria, GisFeature.LOCATION_COLUMN_NAME); StringBuffer result = new StringBuffer("( st_distance_sphere(").append(columnName).append(", ?) <=") .append(this.distance).append(")"); return useIndex ? result.append(" AND ").append(GisHelper.getBoundingBox(criteriaQuery.getSQLAlias(criteria), this.point.getY(), this.point.getX(), distance)).toString() : result.toString();/*from w w w . j a va2s . c o m*/ }
From source file:com.gisgraphy.hibernate.criterion.DistanceRestrictionTest.java
License:Open Source License
@Test public void testDistanceRestrictionPointDoubleBooleanShouldUseIndexIfUseIndexTrue() { CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class); EasyMock.expect(criteriaQuery.getColumn((Criteria) EasyMock.anyObject(), EasyMock.eq(GisFeature.LOCATION_COLUMN_NAME))).andReturn("").once(); EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("").once(); EasyMock.replay(criteriaQuery);//from www.jav a 2 s . c o m DistanceRestriction dr = new DistanceRestriction(GisgraphyTestHelper.createPoint(3F, 4F), 4D, true); String sqlString = dr.toSqlString(null, criteriaQuery); assertTrue(sqlString.contains(" && ")); EasyMock.verify(criteriaQuery); }
From source file:com.gisgraphy.hibernate.criterion.NativeSQLOrder.java
License:Open Source License
@Override public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException { StringBuilder fragment = new StringBuilder(); fragment.append("("); fragment.append(sql);/*from ww w . j av a 2 s. c om*/ fragment.append(")"); fragment.append(ascending ? " asc" : " desc"); return StringHelper.replace(fragment.toString(), "{alias}", criteriaQuery.getSQLAlias(criteria)); }