|
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
|