From: <hib...@li...> - 2006-08-04 17:31:26
|
Author: ste...@jb... Date: 2006-08-04 13:31:22 -0400 (Fri, 04 Aug 2006) New Revision: 10214 Added: trunk/Hibernate3/test/org/hibernate/test/sql/NativeSqlSupportSuite.java trunk/Hibernate3/test/org/hibernate/test/sql/check/ trunk/Hibernate3/test/org/hibernate/test/sql/check/ExceptionCheckingEntity.java trunk/Hibernate3/test/org/hibernate/test/sql/check/OracleCheckStyleTest.java trunk/Hibernate3/test/org/hibernate/test/sql/check/ParamCheckingEntity.java trunk/Hibernate3/test/org/hibernate/test/sql/check/ResultCheckStyleTest.java trunk/Hibernate3/test/org/hibernate/test/sql/check/oracle-mappings.hbm.xml Log: HHH-1959 : tests for check attribute on hand-supplied sql Added: trunk/Hibernate3/test/org/hibernate/test/sql/NativeSqlSupportSuite.java =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/NativeSqlSupportSuite.java 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/NativeSqlSupportSuite.java 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,24 @@ +package org.hibernate.test.sql; + +import junit.framework.Test; +import junit.framework.TestSuite; +import org.hibernate.test.sql.check.OracleCheckStyleTest; + +/** + * todo: describe NativeSqlSupportSuite + * + * @author Steve Ebersole + */ +public class NativeSqlSupportSuite { + public static Test suite() { + TestSuite suite = new TestSuite( "Native SQL support tests" ); + suite.addTest( Db2SQLTest.suite() ); + suite.addTest( DataDirectOracleSQLTest.suite() ); + suite.addTest( OracleSQLTest.suite() ); + suite.addTest( MSSQLTest.suite() ); + suite.addTest( MySQLTest.suite() ); + suite.addTest( GeneralTest.suite() ); + suite.addTest( OracleCheckStyleTest.suite() ); + return suite; + } +} Added: trunk/Hibernate3/test/org/hibernate/test/sql/check/ExceptionCheckingEntity.java =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/check/ExceptionCheckingEntity.java 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/check/ExceptionCheckingEntity.java 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,30 @@ +package org.hibernate.test.sql.check; + +/** + * An entity which is expected to be mapped to each database using stored + * procedures which throw exceptions on their own; in other words, using + * {@link org.hibernate.engine.ExecuteUpdateResultCheckStyle#NONE}. + * + * @author Steve Ebersole + */ +public class ExceptionCheckingEntity { + private Long id; + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} + Added: trunk/Hibernate3/test/org/hibernate/test/sql/check/OracleCheckStyleTest.java =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/check/OracleCheckStyleTest.java 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/check/OracleCheckStyleTest.java 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,29 @@ +package org.hibernate.test.sql.check; + +import org.hibernate.dialect.Dialect; +import org.hibernate.dialect.Oracle9Dialect; +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * todo: describe OracleCheckStyleTest + * + * @author Steve Ebersole + */ +public class OracleCheckStyleTest extends ResultCheckStyleTest { + public OracleCheckStyleTest(String name) { + super( name ); + } + + protected String[] getMappings() { + return new String[] { "sql/check/oracle-mappings.hbm.xml" }; + } + + public boolean appliesTo(Dialect dialect) { + return dialect instanceof Oracle9Dialect; + } + + public static Test suite() { + return new TestSuite( OracleCheckStyleTest.class ); + } +} Added: trunk/Hibernate3/test/org/hibernate/test/sql/check/ParamCheckingEntity.java =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/check/ParamCheckingEntity.java 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/check/ParamCheckingEntity.java 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,29 @@ +package org.hibernate.test.sql.check; + +/** + * An entity which is expected to be mapped to each database using stored + * procedures which return "affected row counts"; in other words, using + * {@link org.hibernate.engine.ExecuteUpdateResultCheckStyle#PARAM}. + * + * @author Steve Ebersole + */ +public class ParamCheckingEntity { + private Long id; + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} Added: trunk/Hibernate3/test/org/hibernate/test/sql/check/ResultCheckStyleTest.java =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/check/ResultCheckStyleTest.java 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/check/ResultCheckStyleTest.java 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,135 @@ +package org.hibernate.test.sql.check; + +import org.hibernate.test.DatabaseSpecificTestCase; +import org.hibernate.Session; +import org.hibernate.JDBCException; +import org.hibernate.HibernateException; +import org.hibernate.dialect.Dialect; + +/** + * todo: describe ResultCheckStyleTest + * + * @author Steve Ebersole + */ +public abstract class ResultCheckStyleTest extends DatabaseSpecificTestCase { + + public ResultCheckStyleTest(String name) { + super( name ); + } + + public String getCacheConcurrencyStrategy() { + return null; + } + + public void testInsertionFailureWithExceptionChecking() { + Session s = openSession(); + s.beginTransaction(); + ExceptionCheckingEntity e = new ExceptionCheckingEntity(); + e.setName( "dummy" ); + s.save( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( JDBCException ex ) { + // these should specifically be JDBCExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } + + public void testInsertionFailureWithParamChecking() { + Session s = openSession(); + s.beginTransaction(); + ParamCheckingEntity e = new ParamCheckingEntity(); + e.setName( "dummy" ); + s.save( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( HibernateException ex ) { + // these should specifically be HibernateExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } + + public void testUpdateFailureWithExceptionChecking() { + Session s = openSession(); + s.beginTransaction(); + ExceptionCheckingEntity e = new ExceptionCheckingEntity(); + e.setId( new Long( 1 ) ); + e.setName( "dummy" ); + s.update( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( JDBCException ex ) { + // these should specifically be JDBCExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } + + public void testUpdateFailureWithParamChecking() { + Session s = openSession(); + s.beginTransaction(); + ParamCheckingEntity e = new ParamCheckingEntity(); + e.setId( new Long( 1 ) ); + e.setName( "dummy" ); + s.update( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( HibernateException ex ) { + // these should specifically be HibernateExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } + + public void testDeleteWithExceptionChecking() { + Session s = openSession(); + s.beginTransaction(); + ExceptionCheckingEntity e = new ExceptionCheckingEntity(); + e.setId( new Long( 1 ) ); + e.setName( "dummy" ); + s.delete( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( JDBCException ex ) { + // these should specifically be JDBCExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } + + public void testDeleteWithParamChecking() { + Session s = openSession(); + s.beginTransaction(); + ParamCheckingEntity e = new ParamCheckingEntity(); + e.setId( new Long( 1 ) ); + e.setName( "dummy" ); + s.delete( e ); + try { + s.flush(); + fail( "expection flush failure!" ); + } + catch( HibernateException ex ) { + // these should specifically be HibernateExceptions... + } + s.clear(); + s.getTransaction().commit(); + s.close(); + } +} Added: trunk/Hibernate3/test/org/hibernate/test/sql/check/oracle-mappings.hbm.xml =================================================================== --- trunk/Hibernate3/test/org/hibernate/test/sql/check/oracle-mappings.hbm.xml 2006-08-04 13:29:24 UTC (rev 10213) +++ trunk/Hibernate3/test/org/hibernate/test/sql/check/oracle-mappings.hbm.xml 2006-08-04 17:31:22 UTC (rev 10214) @@ -0,0 +1,103 @@ +<?xml version="1.0"?> +<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> + +<hibernate-mapping package="org.hibernate.test.sql.check"> + + <class name="ExceptionCheckingEntity" table="ENTITY_E"> + <id name="id" unsaved-value="0" column="ID"> + <generator class="increment"/> + </id> + <property name="name" not-null="true"/> + <sql-insert callable="true" check="none">{call createEntityE(?,?)}</sql-insert> + <sql-update callable="true" check="none">{call updateEntityE(?,?)}</sql-update> + <sql-delete callable="true" check="none">{call deleteEntityE(?)}</sql-delete> + </class> + + <class name="ParamCheckingEntity" table="ENTITY_P"> + <id name="id" unsaved-value="0" column="ID"> + <generator class="increment"/> + </id> + <property name="name" not-null="true"/> + <sql-insert callable="true" check="param">{call createEntityP(?,?,?)}</sql-insert> + <sql-update callable="true" check="param">{? = call updateEntityP(?,?)}</sql-update> + <sql-delete callable="true" check="param">{? = call deleteEntityP(?)}</sql-delete> + </class> + + + <database-object> + <create> + CREATE OR REPLACE PROCEDURE createEntityE(p_name ENTITY_E.NAME%TYPE, p_id ENTITY_E.ID%TYPE) + AS BEGIN + RAISE_APPLICATION_ERROR( -20001, 'Insert failure checking' ); + END; + </create> + <drop> + DROP PROCEDURE createEntityE; + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE PROCEDURE updateEntityE(p_name ENTITY_E.NAME%TYPE, p_id ENTITY_E.ID%TYPE) + AS BEGIN + RAISE_APPLICATION_ERROR( -20001, 'Update failure checking' ); + END; + </create> + <drop> + DROP PROCEDURE updateEntityE; + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE PROCEDURE deleteEntityE(p_id ENTITY_E.ID%TYPE) + AS BEGIN + RAISE_APPLICATION_ERROR( -20001, 'Update failure checking' ); + END; + </create> + <drop> + DROP PROCEDURE deleteEntityE; + </drop> + </database-object> + + + <database-object> + <!-- Demonstrate using an Oracle procedure and a registered OUT paramater as part of hand supplied sql --> + <create> + CREATE OR REPLACE PROCEDURE createEntityP(result OUT INTEGER, p_name ENTITY_E.NAME%TYPE, p_id ENTITY_E.ID%TYPE) + AS BEGIN + /* force a failure by returning a non-1 result */ + result := 2; + END; + </create> + <drop> + DROP PROCEDURE createEntityP; + </drop> + </database-object> + + <database-object> + <!-- Demonstrate using an Oracle function and it's return value as part of hand supplied sql --> + <create> + CREATE OR REPLACE FUNCTION updateEntityP(p_name ENTITY_E.NAME%TYPE, p_id ENTITY_E.ID%TYPE) + RETURN INTEGER IS BEGIN + RETURN 2; + END; + </create> + <drop> + DROP PROCEDURE updateEntityP; + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE FUNCTION deleteEntityP(p_id ENTITY_E.ID%TYPE) + RETURN INTEGER IS BEGIN + RETURN 2; + END; + </create> + <drop> + DROP PROCEDURE deleteEntityE; + </drop> + </database-object> + +</hibernate-mapping> \ No newline at end of file |