|
From: <hib...@li...> - 2006-06-06 17:23:30
|
Author: ste...@jb...
Date: 2006-06-06 13:21:38 -0400 (Tue, 06 Jun 2006)
New Revision: 9989
Modified:
trunk/Hibernate3/src/org/hibernate/cfg/Environment.java
trunk/Hibernate3/src/org/hibernate/cfg/Settings.java
trunk/Hibernate3/src/org/hibernate/cfg/SettingsFactory.java
trunk/Hibernate3/src/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java
trunk/Hibernate3/src/org/hibernate/hql/ast/tree/SelectClause.java
trunk/Hibernate3/src/org/hibernate/hql/ast/util/SessionFactoryHelper.java
Log:
HHH-1817 : JPA-QL compliance setting
Modified: trunk/Hibernate3/src/org/hibernate/cfg/Environment.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/cfg/Environment.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/cfg/Environment.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -455,6 +455,7 @@
public static final String BYTECODE_PROVIDER = "hibernate.bytecode.provider";
+ public static final String JPAQL_STRICT_COMPLIANCE= "hibernate.query.jpaql_strict_compliance";
private static final BytecodeProvider BYTECODE_PROVIDER_INSTANCE;
private static final boolean ENABLE_BINARY_STREAMS;
Modified: trunk/Hibernate3/src/org/hibernate/cfg/Settings.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/cfg/Settings.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/cfg/Settings.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -14,7 +14,6 @@
import org.hibernate.exception.SQLExceptionConverter;
import org.hibernate.EntityMode;
import org.hibernate.ConnectionReleaseMode;
-import org.hibernate.bytecode.BytecodeProvider;
/**
* Settings that affect the behaviour of Hibernate at runtime.
@@ -63,17 +62,26 @@
private boolean wrapResultSetsEnabled;
private boolean orderUpdatesEnabled;
private EntityMode defaultEntityMode;
+ private boolean dataDefinitionImplicitCommit;
+ private boolean dataDefinitionInTransactionSupported;
+ public boolean strictJPAQLCompliance;
// private BytecodeProvider bytecodeProvider;
- Settings() {}
+ /**
+ * Package protected constructor
+ */
+ Settings() {
+ }
+ // public getters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
public String getDefaultSchemaName() {
return defaultSchemaName;
}
- public String getDefaultCatalogName() {
- return defaultCatalogName;
- }
+ public String getDefaultCatalogName() {
+ return defaultCatalogName;
+ }
public Dialect getDialect() {
return dialect;
@@ -115,13 +123,140 @@
return minimalPutsEnabled;
}
+ public Integer getJdbcFetchSize() {
+ return jdbcFetchSize;
+ }
+
+ public ConnectionProvider getConnectionProvider() {
+ return connectionProvider;
+ }
+
+ public TransactionFactory getTransactionFactory() {
+ return transactionFactory;
+ }
+
+ public String getSessionFactoryName() {
+ return sessionFactoryName;
+ }
+
+ public boolean isAutoCreateSchema() {
+ return autoCreateSchema;
+ }
+
+ public boolean isAutoDropSchema() {
+ return autoDropSchema;
+ }
+
+ public boolean isAutoUpdateSchema() {
+ return autoUpdateSchema;
+ }
+
+ public Integer getMaximumFetchDepth() {
+ return maximumFetchDepth;
+ }
+
+ public CacheProvider getCacheProvider() {
+ return cacheProvider;
+ }
+
+ public TransactionManagerLookup getTransactionManagerLookup() {
+ return transactionManagerLookup;
+ }
+
+ public boolean isQueryCacheEnabled() {
+ return queryCacheEnabled;
+ }
+
+ public boolean isCommentsEnabled() {
+ return commentsEnabled;
+ }
+
+ public boolean isSecondLevelCacheEnabled() {
+ return secondLevelCacheEnabled;
+ }
+
+ public String getCacheRegionPrefix() {
+ return cacheRegionPrefix;
+ }
+
+ public QueryCacheFactory getQueryCacheFactory() {
+ return queryCacheFactory;
+ }
+
+ public boolean isStatisticsEnabled() {
+ return statisticsEnabled;
+ }
+
+ public boolean isJdbcBatchVersionedData() {
+ return jdbcBatchVersionedData;
+ }
+
+ public boolean isFlushBeforeCompletionEnabled() {
+ return flushBeforeCompletionEnabled;
+ }
+
+ public BatcherFactory getBatcherFactory() {
+ return batcherFactory;
+ }
+
+ public boolean isAutoCloseSessionEnabled() {
+ return autoCloseSessionEnabled;
+ }
+
+ public ConnectionReleaseMode getConnectionReleaseMode() {
+ return connectionReleaseMode;
+ }
+
+ public QueryTranslatorFactory getQueryTranslatorFactory() {
+ return queryTranslatorFactory;
+ }
+
+ public SQLExceptionConverter getSQLExceptionConverter() {
+ return sqlExceptionConverter;
+ }
+
+ public boolean isWrapResultSetsEnabled() {
+ return wrapResultSetsEnabled;
+ }
+
+ public boolean isOrderUpdatesEnabled() {
+ return orderUpdatesEnabled;
+ }
+
+ public boolean isStructuredCacheEntriesEnabled() {
+ return structuredCacheEntriesEnabled;
+ }
+
+ public EntityMode getDefaultEntityMode() {
+ return defaultEntityMode;
+ }
+
+ public boolean isAutoValidateSchema() {
+ return autoValidateSchema;
+ }
+
+ public boolean isDataDefinitionImplicitCommit() {
+ return dataDefinitionImplicitCommit;
+ }
+
+ public boolean isDataDefinitionInTransactionSupported() {
+ return dataDefinitionInTransactionSupported;
+ }
+
+ public boolean isStrictJPAQLCompliance() {
+ return strictJPAQLCompliance;
+ }
+
+
+ // package protected setters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
void setDefaultSchemaName(String string) {
defaultSchemaName = string;
}
- void setDefaultCatalogName(String string) {
- defaultCatalogName = string;
- }
+ void setDefaultCatalogName(String string) {
+ defaultCatalogName = string;
+ }
void setDialect(Dialect dialect) {
this.dialect = dialect;
@@ -163,44 +298,22 @@
getGeneratedKeysEnabled = b;
}
- public Integer getJdbcFetchSize() {
- return jdbcFetchSize;
- }
void setJdbcFetchSize(Integer integer) {
jdbcFetchSize = integer;
}
- public ConnectionProvider getConnectionProvider() {
- return connectionProvider;
- }
void setConnectionProvider(ConnectionProvider provider) {
connectionProvider = provider;
}
- public TransactionFactory getTransactionFactory() {
- return transactionFactory;
- }
void setTransactionFactory(TransactionFactory factory) {
transactionFactory = factory;
}
- public String getSessionFactoryName() {
- return sessionFactoryName;
- }
void setSessionFactoryName(String string) {
sessionFactoryName = string;
}
- public boolean isAutoCreateSchema() {
- return autoCreateSchema;
- }
- public boolean isAutoDropSchema() {
- return autoDropSchema;
- }
-
- public boolean isAutoUpdateSchema() {
- return autoUpdateSchema;
- }
void setAutoCreateSchema(boolean b) {
autoCreateSchema = b;
}
@@ -208,168 +321,114 @@
void setAutoDropSchema(boolean b) {
autoDropSchema = b;
}
+
void setAutoUpdateSchema(boolean b) {
autoUpdateSchema = b;
}
- public Integer getMaximumFetchDepth() {
- return maximumFetchDepth;
- }
void setMaximumFetchDepth(Integer i) {
maximumFetchDepth = i;
}
- public CacheProvider getCacheProvider() {
- return cacheProvider;
- }
void setCacheProvider(CacheProvider cacheProvider) {
this.cacheProvider = cacheProvider;
}
- public TransactionManagerLookup getTransactionManagerLookup() {
- return transactionManagerLookup;
- }
void setTransactionManagerLookup(TransactionManagerLookup lookup) {
transactionManagerLookup = lookup;
}
- public boolean isQueryCacheEnabled() {
- return queryCacheEnabled;
- }
void setQueryCacheEnabled(boolean b) {
queryCacheEnabled = b;
}
- public boolean isCommentsEnabled() {
- return commentsEnabled;
- }
void setCommentsEnabled(boolean commentsEnabled) {
this.commentsEnabled = commentsEnabled;
}
- public boolean isSecondLevelCacheEnabled() {
- return secondLevelCacheEnabled;
- }
void setSecondLevelCacheEnabled(boolean secondLevelCacheEnabled) {
this.secondLevelCacheEnabled = secondLevelCacheEnabled;
}
- public String getCacheRegionPrefix() {
- return cacheRegionPrefix;
- }
void setCacheRegionPrefix(String cacheRegionPrefix) {
this.cacheRegionPrefix = cacheRegionPrefix;
}
- public QueryCacheFactory getQueryCacheFactory() {
- return queryCacheFactory;
- }
- public void setQueryCacheFactory(QueryCacheFactory queryCacheFactory) {
+ void setQueryCacheFactory(QueryCacheFactory queryCacheFactory) {
this.queryCacheFactory = queryCacheFactory;
}
- public boolean isStatisticsEnabled() {
- return statisticsEnabled;
- }
void setStatisticsEnabled(boolean statisticsEnabled) {
this.statisticsEnabled = statisticsEnabled;
}
- public boolean isJdbcBatchVersionedData() {
- return jdbcBatchVersionedData;
- }
void setJdbcBatchVersionedData(boolean jdbcBatchVersionedData) {
this.jdbcBatchVersionedData = jdbcBatchVersionedData;
}
- public boolean isFlushBeforeCompletionEnabled() {
- return flushBeforeCompletionEnabled;
- }
void setFlushBeforeCompletionEnabled(boolean flushBeforeCompletionEnabled) {
this.flushBeforeCompletionEnabled = flushBeforeCompletionEnabled;
}
- public BatcherFactory getBatcherFactory() {
- return batcherFactory;
- }
void setBatcherFactory(BatcherFactory batcher) {
this.batcherFactory = batcher;
}
- public boolean isAutoCloseSessionEnabled() {
- return autoCloseSessionEnabled;
- }
void setAutoCloseSessionEnabled(boolean autoCloseSessionEnabled) {
this.autoCloseSessionEnabled = autoCloseSessionEnabled;
}
- public ConnectionReleaseMode getConnectionReleaseMode() {
- return connectionReleaseMode;
- }
-
- public void setConnectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) {
+ void setConnectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) {
this.connectionReleaseMode = connectionReleaseMode;
}
- public QueryTranslatorFactory getQueryTranslatorFactory() {
- return queryTranslatorFactory;
- }
-
void setQueryTranslatorFactory(QueryTranslatorFactory queryTranslatorFactory) {
this.queryTranslatorFactory = queryTranslatorFactory;
}
- public SQLExceptionConverter getSQLExceptionConverter() {
- return sqlExceptionConverter;
- }
-
void setSQLExceptionConverter(SQLExceptionConverter sqlExceptionConverter) {
this.sqlExceptionConverter = sqlExceptionConverter;
}
- public boolean isWrapResultSetsEnabled() {
- return wrapResultSetsEnabled;
- }
-
void setWrapResultSetsEnabled(boolean wrapResultSetsEnabled) {
this.wrapResultSetsEnabled = wrapResultSetsEnabled;
}
- public boolean isOrderUpdatesEnabled() {
- return orderUpdatesEnabled;
- }
void setOrderUpdatesEnabled(boolean orderUpdatesEnabled) {
this.orderUpdatesEnabled = orderUpdatesEnabled;
}
- public boolean isStructuredCacheEntriesEnabled() {
- return structuredCacheEntriesEnabled;
- }
void setStructuredCacheEntriesEnabled(boolean structuredCacheEntriesEnabled) {
this.structuredCacheEntriesEnabled = structuredCacheEntriesEnabled;
}
- public EntityMode getDefaultEntityMode() {
- return defaultEntityMode;
+ void setDefaultEntityMode(EntityMode defaultEntityMode) {
+ this.defaultEntityMode = defaultEntityMode;
}
- public void setDefaultEntityMode(EntityMode defaultEntityMode) {
- this.defaultEntityMode = defaultEntityMode;
+ void setAutoValidateSchema(boolean autoValidateSchema) {
+ this.autoValidateSchema = autoValidateSchema;
}
- public boolean isAutoValidateSchema() {
- return autoValidateSchema;
+ void setDataDefinitionImplicitCommit(boolean dataDefinitionImplicitCommit) {
+ this.dataDefinitionImplicitCommit = dataDefinitionImplicitCommit;
}
- void setAutoValidateSchema(boolean autoValidateSchema) {
- this.autoValidateSchema = autoValidateSchema;
+ void setDataDefinitionInTransactionSupported(boolean dataDefinitionInTransactionSupported) {
+ this.dataDefinitionInTransactionSupported = dataDefinitionInTransactionSupported;
}
+ void setStrictJPAQLCompliance(boolean strictJPAQLCompliance) {
+ this.strictJPAQLCompliance = strictJPAQLCompliance;
+ }
+
+
+
// public BytecodeProvider getBytecodeProvider() {
// return bytecodeProvider;
// }
//
-// public void setBytecodeProvider(BytecodeProvider bytecodeProvider) {
+// void setBytecodeProvider(BytecodeProvider bytecodeProvider) {
// this.bytecodeProvider = bytecodeProvider;
// }
}
Modified: trunk/Hibernate3/src/org/hibernate/cfg/SettingsFactory.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/cfg/SettingsFactory.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/cfg/SettingsFactory.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -63,12 +63,14 @@
settings.setConnectionProvider(connections);
//Interrogate JDBC metadata
-
+
+ String databaseName = null;
+ int databaseMajorVersion = 0;
boolean metaSupportsScrollable = false;
boolean metaSupportsGetGeneratedKeys = false;
boolean metaSupportsBatchUpdates = false;
- String databaseName = null;
- int databaseMajorVersion = 0;
+ boolean metaReportsDDLCausesTxnCommit = false;
+ boolean metaReportsDDLInTxnSupported = true;
try {
Connection conn = connections.getConnection();
@@ -81,6 +83,8 @@
metaSupportsScrollable = meta.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
metaSupportsBatchUpdates = meta.supportsBatchUpdates();
+ metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();
+ metaReportsDDLInTxnSupported = !meta.dataDefinitionIgnoredInTransactions();
if ( Environment.jvmSupportsGetGeneratedKeys() ) {
try {
@@ -107,7 +111,10 @@
catch (UnsupportedOperationException uoe) {
// user supplied JDBC connections
}
-
+ settings.setDataDefinitionImplicitCommit( metaReportsDDLCausesTxnCommit );
+ settings.setDataDefinitionInTransactionSupported( metaReportsDDLInTxnSupported );
+
+
//SQL Dialect:
Dialect dialect = determineDialect( props, databaseName, databaseMajorVersion );
settings.setDialect(dialect);
@@ -204,6 +211,10 @@
Map querySubstitutions = PropertiesHelper.toMap(Environment.QUERY_SUBSTITUTIONS, " ,=;:\n\t\r\f", properties);
log.info("Query language substitutions: " + querySubstitutions);
settings.setQuerySubstitutions(querySubstitutions);
+
+ boolean jpaqlCompliance = PropertiesHelper.getBoolean( Environment.JPAQL_STRICT_COMPLIANCE, properties, false );
+ settings.setStrictJPAQLCompliance( jpaqlCompliance );
+ log.info( "JPA-QL strict compliance: " + enabledDisabled( jpaqlCompliance ) );
// Second-level / query cache:
Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -130,8 +130,13 @@
}
}
};
- if ( getFactory().getDialect().performTemporaryTableDDLInIsolation() ) {
- Isolater.doIsolatedWork( work, session );
+ if ( getFactory().getSettings().isDataDefinitionImplicitCommit() || getFactory().getDialect().performTemporaryTableDDLInIsolation() ) {
+ if ( getFactory().getSettings().isDataDefinitionInTransactionSupported() ) {
+ Isolater.doIsolatedWork( work, session );
+ }
+ else {
+ Isolater.doNonTransactedWork( work, session );
+ }
}
else {
work.doWork( session.getJDBCContext().getConnectionManager().getConnection() );
@@ -149,7 +154,7 @@
stmnt.executeUpdate( "drop table " + persister.getTemporaryIdTableName() );
}
catch( Throwable t ) {
- log.warn( "unable to drop temporary id table after use", t );
+ log.warn( "unable to drop temporary id table after use [" + t.getMessage() + "]" );
}
finally {
if ( stmnt != null ) {
@@ -163,8 +168,13 @@
}
}
};
- if ( getFactory().getDialect().performTemporaryTableDDLInIsolation() ) {
- Isolater.doIsolatedWork( work, session );
+ if ( getFactory().getSettings().isDataDefinitionImplicitCommit() || getFactory().getDialect().performTemporaryTableDDLInIsolation() ) {
+ if ( getFactory().getSettings().isDataDefinitionInTransactionSupported() ) {
+ Isolater.doIsolatedWork( work, session );
+ }
+ else {
+ Isolater.doNonTransactedWork( work, session );
+ }
}
else {
work.doWork( session.getJDBCContext().getConnectionManager().getConnection() );
@@ -179,7 +189,7 @@
ps.executeUpdate();
}
catch( Throwable t ) {
- log.warn( "unable to cleanup temporary id table after use", t );
+ log.warn( "unable to cleanup temporary id table after use [" + t + "]" );
}
finally {
if ( ps != null ) {
Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/tree/SelectClause.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/tree/SelectClause.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/tree/SelectClause.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -10,6 +10,7 @@
import org.hibernate.hql.ast.util.ASTAppender;
import org.hibernate.hql.ast.util.ASTIterator;
import org.hibernate.hql.ast.util.ASTPrinter;
+import org.hibernate.hql.ast.QuerySyntaxException;
import org.hibernate.type.Type;
import org.hibernate.QueryException;
@@ -255,6 +256,9 @@
if ( prepared ) {
throw new IllegalStateException( "SelectClause was already prepared!" );
}
+ if ( getSessionFactoryHelper().isStrictJPAQLComplianceEnabled() ) {
+ throw new QuerySyntaxException( "JPA-QL compliance requires select clause" );
+ }
List fromElements = fromClause.getProjectionList();
ASTAppender appender = new ASTAppender( getASTFactory(), this ); // Get ready to start adding nodes.
Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/util/SessionFactoryHelper.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/util/SessionFactoryHelper.java 2006-06-06 17:20:50 UTC (rev 9988)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/util/SessionFactoryHelper.java 2006-06-06 17:21:38 UTC (rev 9989)
@@ -379,4 +379,8 @@
public String[][] generateColumnNames(Type[] sqlResultTypes) {
return NameGenerator.generateColumnNames( sqlResultTypes, sfi );
}
+
+ public boolean isStrictJPAQLComplianceEnabled() {
+ return sfi.getSettings().isStrictJPAQLCompliance();
+ }
}
|