Java Code Examples for org.hibernate.internal.util.JdbcExceptionHelper#extractErrorCode()

The following examples show how to use org.hibernate.internal.util.JdbcExceptionHelper#extractErrorCode() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SQLiteDialect.java    From md_blockchain with Apache License 2.0 6 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
    return new SQLExceptionConversionDelegate() {
        @Override
        public JDBCException convert(SQLException sqlException, String message, String sql) {
            final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException) & 0xFF;
            if (errorCode == SQLITE_TOOBIG || errorCode == SQLITE_MISMATCH) {
                return new DataException(message, sqlException, sql);
            } else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
                return new LockAcquisitionException(message, sqlException, sql);
            } else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOTADB) {
                return new JDBCConnectionException(message, sqlException, sql);
            }

            // returning null allows other delegates to operate
            return null;
        }
    };
}
 
Example 2
Source File: CacheSQLExceptionConversionDelegate.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Convert the given SQLException into Hibernate's JDBCException hierarchy.
 *
 * @param sqlException The SQLException to be converted.
 * @param message	  An optional error message.
 * @param sql		  Optionally, the sql being performed when the exception occurred.
 * @return The resulting JDBCException; returns null if it could not be converted.
 */
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
	String sqlStateClassCode = JdbcExceptionHelper.extractSqlStateClassCode( sqlException );
	if ( sqlStateClassCode != null ) {
		Integer errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
		if ( INTEGRITY_VIOLATION_CATEGORIES.contains( errorCode ) ) {
			String constraintName =
					getConversionContext()
							.getViolatedConstraintNameExtracter()
							.extractConstraintName( sqlException );
			return new ConstraintViolationException( message, sqlException, sql, constraintName );
		}
		else if ( DATA_CATEGORIES.contains( sqlStateClassCode ) ) {
			return new DataException( message, sqlException, sql );
		}
	}
	return null; // allow other delegates the chance to look
}
 
Example 3
Source File: SybaseASE157Dialect.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
	return new SQLExceptionConversionDelegate() {
		@Override
		public JDBCException convert(SQLException sqlException, String message, String sql) {
			final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
			final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
			if("JZ0TO".equals( sqlState ) || "JZ006".equals( sqlState )){
				throw new LockTimeoutException( message, sqlException, sql );
			}
			if ( 515 == errorCode && "ZZZZZ".equals( sqlState ) ) {
				// Attempt to insert NULL value into column; column does not allow nulls.
				final String constraintName = getViolatedConstraintNameExtracter().extractConstraintName( sqlException );
				return new ConstraintViolationException( message, sqlException, sql, constraintName );
			}
			return null;
		}
	};
}
 
Example 4
Source File: SQLServer2005Dialect.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
	return new SQLExceptionConversionDelegate() {
		@Override
		public JDBCException convert(SQLException sqlException, String message, String sql) {
			final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
			final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
			if ( "HY008".equals( sqlState ) ) {
				throw new QueryTimeoutException( message, sqlException, sql );
			}
			if (1222 == errorCode ) {
				throw new LockTimeoutException( message, sqlException, sql );
			}
			return null;
		}
	};
}
 
Example 5
Source File: SQLiteDialect.java    From md_blockchain with Apache License 2.0 5 votes vote down vote up
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
    final int errorCode = JdbcExceptionHelper.extractErrorCode(sqle) & 0xFF;
    if (errorCode == SQLITE_CONSTRAINT) {
        return extractUsingTemplate("constraint ", " failed", sqle.getMessage());
    }
    return null;
}
 
Example 6
Source File: HSQLDialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
	String constraintName = null;

	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqle );

	if ( errorCode == -8 ) {
		constraintName = extractUsingTemplate(
				"Integrity constraint violation ", " table:", sqle.getMessage()
		);
	}
	else if ( errorCode == -9 ) {
		constraintName = extractUsingTemplate(
				"Violation of unique index: ", " in statement [", sqle.getMessage()
		);
	}
	else if ( errorCode == -104 ) {
		constraintName = extractUsingTemplate(
				"Unique constraint violation: ", " in statement [", sqle.getMessage()
		);
	}
	else if ( errorCode == -177 ) {
		constraintName = extractUsingTemplate(
				"Integrity constraint violation - no parent ", " table:",
				sqle.getMessage()
		);
	}
	return constraintName;
}
 
Example 7
Source File: HSQLDialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
	String constraintName = null;

	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqle );

	if ( errorCode == -8 ) {
		constraintName = extractUsingTemplate(
				"; ", " table: ", sqle.getMessage()
		);
	}
	else if ( errorCode == -9 ) {
		constraintName = extractUsingTemplate(
				"; ", " table: ", sqle.getMessage()
		);
	}
	else if ( errorCode == -104 ) {
		constraintName = extractUsingTemplate(
				"; ", " table: ", sqle.getMessage()
		);
	}
	else if ( errorCode == -177 ) {
		constraintName = extractUsingTemplate(
				"; ", " table: ", sqle.getMessage()
		);
	}
	return constraintName;
}
 
Example 8
Source File: Oracle8iDialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Extract the name of the violated constraint from the given SQLException.
 *
 * @param sqle The exception that was the result of the constraint violation.
 * @return The extracted constraint name.
 */
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqle );
	if ( errorCode == 1 || errorCode == 2291 || errorCode == 2292 ) {
		return extractUsingTemplate( "(", ")", sqle.getMessage() );
	}
	else if ( errorCode == 1400 ) {
		// simple nullability constraint
		return null;
	}
	else {
		return null;
	}
}
 
Example 9
Source File: InformixDialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
	String constraintName = null;
	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqle );

	if ( errorCode == -268 ) {
		constraintName = extractUsingTemplate( "Unique constraint (", ") violated.", sqle.getMessage() );
	}
	else if ( errorCode == -691 ) {
		constraintName = extractUsingTemplate(
				"Missing key in referenced table for referential constraint (",
				").",
				sqle.getMessage()
		);
	}
	else if ( errorCode == -692 ) {
		constraintName = extractUsingTemplate(
				"Key value for constraint (",
				") is still being referenced.",
				sqle.getMessage()
		);
	}

	if ( constraintName != null ) {
		// strip table-owner because Informix always returns constraint names as "<table-owner>.<constraint-name>"
		final int i = constraintName.indexOf( '.' );
		if ( i != -1 ) {
			constraintName = constraintName.substring( i + 1 );
		}
	}

	return constraintName;
}
 
Example 10
Source File: Oracle9Dialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
protected String doExtractConstraintName(SQLException sqle) throws NumberFormatException {
	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqle );
	if ( errorCode == 1 || errorCode == 2291 || errorCode == 2292 ) {
		return extractUsingTemplate( "constraint (", ") violated", sqle.getMessage() );
	}
	else if ( errorCode == 1400 ) {
		// simple nullability constraint
		return null;
	}
	else {
		return null;
	}
}
 
Example 11
Source File: DB2Dialect.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
	return new SQLExceptionConversionDelegate() {
		@Override
		public JDBCException convert(SQLException sqlException, String message, String sql) {
			final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
			final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );

			if( -952 == errorCode && "57014".equals( sqlState )){
				throw new LockTimeoutException( message, sqlException, sql );
			}
			return null;
		}
	};
}
 
Example 12
Source File: SQLStateConversionDelegate.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
	final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
	final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );

	if ( sqlState != null ) {
		String sqlStateClassCode = JdbcExceptionHelper.determineSqlStateClassCode( sqlState );

		if ( sqlStateClassCode != null ) {
			if ( SQL_GRAMMAR_CATEGORIES.contains( sqlStateClassCode ) ) {
				return new SQLGrammarException( message, sqlException, sql );
			}
			else if ( INTEGRITY_VIOLATION_CATEGORIES.contains( sqlStateClassCode ) ) {
				final String constraintName = getConversionContext()
						.getViolatedConstraintNameExtracter()
						.extractConstraintName( sqlException );
				return new ConstraintViolationException( message, sqlException, sql, constraintName );
			}
			else if ( CONNECTION_CATEGORIES.contains( sqlStateClassCode ) ) {
				return new JDBCConnectionException( message, sqlException, sql );
			}
			else if ( DATA_CATEGORIES.contains( sqlStateClassCode ) ) {
				return new DataException( message, sqlException, sql );
			}
		}

		if ( "40001".equals( sqlState ) ) {
			return new LockAcquisitionException( message, sqlException, sql );
		}

		if ( "40XL1".equals( sqlState ) || "40XL2".equals( sqlState )) {
			// Derby "A lock could not be obtained within the time requested."
			return new PessimisticLockException( message, sqlException, sql );
		}

		// MySQL Query execution was interrupted
		if ( "70100".equals( sqlState ) ||
				// Oracle user requested cancel of current operation
				( "72000".equals( sqlState ) && errorCode == 1013 ) ) {
			throw new QueryTimeoutException(  message, sqlException, sql );
		}
	}

	return null;
}
 
Example 13
Source File: Oracle8iDialect.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
	return new SQLExceptionConversionDelegate() {
		@Override
		public JDBCException convert(SQLException sqlException, String message, String sql) {
			// interpreting Oracle exceptions is much much more precise based on their specific vendor codes.

			final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );


			// lock timeouts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			if ( errorCode == 30006 ) {
				// ORA-30006: resource busy; acquire with WAIT timeout expired
				throw new LockTimeoutException( message, sqlException, sql );
			}
			else if ( errorCode == 54 ) {
				// ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
				throw new LockTimeoutException( message, sqlException, sql );
			}
			else if ( 4021 == errorCode ) {
				// ORA-04021 timeout occurred while waiting to lock object
				throw new LockTimeoutException( message, sqlException, sql );
			}


			// deadlocks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			if ( 60 == errorCode ) {
				// ORA-00060: deadlock detected while waiting for resource
				return new LockAcquisitionException( message, sqlException, sql );
			}
			else if ( 4020 == errorCode ) {
				// ORA-04020 deadlock detected while trying to lock object
				return new LockAcquisitionException( message, sqlException, sql );
			}


			// query cancelled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			if ( 1013 == errorCode ) {
				// ORA-01013: user requested cancel of current operation
				throw new QueryTimeoutException(  message, sqlException, sql );
			}


			// data integrity violation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			if ( 1407 == errorCode ) {
				// ORA-01407: cannot update column to NULL
				final String constraintName = getViolatedConstraintNameExtracter().extractConstraintName( sqlException );
				return new ConstraintViolationException( message, sqlException, sql, constraintName );
			}

			return null;
		}
	};
}
 
Example 14
Source File: AbstractHANADialect.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
	return new SQLExceptionConversionDelegate() {

		@Override
		public JDBCException convert(final SQLException sqlException, final String message, final String sql) {

			final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );

			if ( errorCode == 131 ) {
				// 131 - Transaction rolled back by lock wait timeout
				return new LockTimeoutException( message, sqlException, sql );
			}

			if ( errorCode == 146 ) {
				// 146 - Resource busy and acquire with NOWAIT specified
				return new LockTimeoutException( message, sqlException, sql );
			}

			if ( errorCode == 132 ) {
				// 132 - Transaction rolled back due to unavailable resource
				return new LockAcquisitionException( message, sqlException, sql );
			}

			if ( errorCode == 133 ) {
				// 133 - Transaction rolled back by detected deadlock
				return new LockAcquisitionException( message, sqlException, sql );
			}

			// 259 - Invalid table name
			// 260 - Invalid column name
			// 261 - Invalid index name
			// 262 - Invalid query name
			// 263 - Invalid alias name
			if ( errorCode == 257 || ( errorCode >= 259 && errorCode <= 263 ) ) {
				throw new SQLGrammarException( message, sqlException, sql );
			}

			// 257 - Cannot insert NULL or update to NULL
			// 301 - Unique constraint violated
			// 461 - foreign key constraint violation
			// 462 - failed on update or delete by foreign key constraint
			// violation
			if ( errorCode == 287 || errorCode == 301 || errorCode == 461 || errorCode == 462 ) {
				final String constraintName = getViolatedConstraintNameExtracter()
						.extractConstraintName( sqlException );

				return new ConstraintViolationException( message, sqlException, sql, constraintName );
			}

			return null;
		}
	};
}