Skip to content

Commit 79480ab

Browse files
dreab8sebersole
authored andcommitted
HHH-18280 Add test for issue
1 parent 7c84a5b commit 79480ab

File tree

17 files changed

+607
-179
lines changed

17 files changed

+607
-179
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/inheritance/embeddable/StructAggregateEmbeddableInheritanceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public void testProcedure(SessionFactoryScope scope) {
176176
}
177177
final ProcedureCall structFunction = session.createStoredProcedureCall( "structProcedure" );
178178
final ProcedureParameter<ParentEmbeddable> resultParameter = structFunction.registerParameter(
179-
"structType",
179+
"result",
180180
ParentEmbeddable.class,
181181
parameterMode
182182
);

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/embeddable/NestedStructEmbeddableTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ public void testProcedure(SessionFactoryScope scope) {
588588
}
589589
ProcedureCall structFunction = entityManager.createStoredProcedureCall( "structProcedure" );
590590
ProcedureParameter<TheStruct> resultParameter = structFunction.registerParameter(
591-
"structType",
591+
"result",
592592
TheStruct.class,
593593
parameterMode
594594
);

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/embeddable/StructEmbeddableArrayTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ public void testProcedure(SessionFactoryScope scope) {
527527
}
528528
ProcedureCall structFunction = entityManager.createStoredProcedureCall( "structProcedure" );
529529
ProcedureParameter<EmbeddableAggregate[]> resultParameter = structFunction.registerParameter(
530-
"structType",
530+
"result",
531531
EmbeddableAggregate[].class,
532532
parameterMode
533533
);

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/embeddable/StructEmbeddableTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ public void testProcedure(SessionFactoryScope scope) {
546546
}
547547
ProcedureCall structFunction = entityManager.createStoredProcedureCall( "structProcedure" );
548548
ProcedureParameter<EmbeddableAggregate> resultParameter = structFunction.registerParameter(
549-
"structType",
549+
"result",
550550
EmbeddableAggregate.class,
551551
parameterMode
552552
);

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/embeddable/StructWithArrayEmbeddableTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ public void testProcedure(SessionFactoryScope scope) {
509509
}
510510
ProcedureCall structFunction = entityManager.createStoredProcedureCall( "structProcedure" );
511511
ProcedureParameter<EmbeddableWithArrayAggregate> resultParameter = structFunction.registerParameter(
512-
"structType",
512+
"result",
513513
EmbeddableWithArrayAggregate.class,
514514
parameterMode
515515
);

hibernate-core/src/test/java/org/hibernate/orm/test/procedure/OracleStoredProcedureTest.java

Lines changed: 103 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@
7171
public class OracleStoredProcedureTest {
7272

7373
private Person person1;
74+
private static final String CITY = "London";
75+
private static final String STREET = "Lollard Street";
76+
private static final String ZIP = "SE116UG";
7477

7578
@Test
7679
public void testUnRegisteredParameter(EntityManagerFactoryScope scope) {
@@ -91,35 +94,120 @@ public void testUnRegisteredParameter(EntityManagerFactoryScope scope) {
9194
} );
9295
}
9396

97+
@Test
98+
public void testUnRegisteredParameterByName2(EntityManagerFactoryScope scope) {
99+
scope.inTransaction( (em) -> {
100+
final StoredProcedureQuery function = em.createStoredProcedureQuery( "find_char", Integer.class );
101+
function.setHint( QueryHints.CALLABLE_FUNCTION, "true" );
102+
// search-string
103+
function.registerStoredProcedureParameter( "search_char", String.class, ParameterMode.IN );
104+
// source-string
105+
function.registerStoredProcedureParameter( "string", String.class, ParameterMode.IN );
106+
107+
function.setParameter( "search_char", "." );
108+
function.setParameter( "string", "org.hibernate.query" );
109+
110+
final Object singleResult = function.getSingleResult();
111+
Assertions.assertThat( singleResult ).isInstanceOf( Integer.class );
112+
Assertions.assertThat( singleResult ).isEqualTo( 4 );
113+
} );
114+
}
115+
116+
@Test
117+
public void testUnRegisteredParameterByNameInvertedParameterRegistrationOrder(EntityManagerFactoryScope scope) {
118+
scope.inTransaction( (em) -> {
119+
final StoredProcedureQuery function = em.createStoredProcedureQuery( "find_char", Integer.class );
120+
function.setHint( QueryHints.CALLABLE_FUNCTION, "true" );
121+
// search-string
122+
function.registerStoredProcedureParameter( "string", String.class, ParameterMode.IN );
123+
// source-string
124+
function.registerStoredProcedureParameter( "search_char", String.class, ParameterMode.IN );
125+
126+
function.setParameter( "string", "org.hibernate.query");
127+
function.setParameter( "search_char", "." );
128+
129+
final Object singleResult = function.getSingleResult();
130+
Assertions.assertThat( singleResult ).isInstanceOf( Integer.class );
131+
Assertions.assertThat( singleResult ).isEqualTo( 4 );
132+
} );
133+
}
134+
94135
@Test
95136
@TestForIssue(jiraKey = "HHH-15542")
96137
public void testStoredProcedureInAndOutAndRefCursorParameters(EntityManagerFactoryScope scope) {
97-
String city = "London";
98-
String street = "Lollard Street";
99-
String zip = "SE116UG";
100138
scope.inTransaction(
101139
entityManager -> {
102-
Address address = new Address( 1l, street, city, zip );
103-
entityManager.persist( address );
140+
StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "GET_ADDRESS_BY_NAME" );
141+
query.registerStoredProcedureParameter( "street_in", String.class, ParameterMode.IN );
142+
query.registerStoredProcedureParameter( "city_in", String.class, ParameterMode.IN );
143+
query.registerStoredProcedureParameter( "rec_out", ResultSet.class, ParameterMode.REF_CURSOR );
144+
query.registerStoredProcedureParameter( "err_out", String.class, ParameterMode.OUT );
145+
146+
query.setParameter( "street_in", STREET )
147+
.setParameter( "city_in", CITY );
148+
query.execute();
149+
ResultSet rs = (ResultSet) query.getOutputParameterValue( "rec_out" );
150+
try {
151+
assertTrue( rs.next() );
152+
assertThat( rs.getString( "street" ), is( STREET ) );
153+
assertThat( rs.getString( "city" ), is( CITY ) );
154+
assertThat( rs.getString( "zip" ), is( ZIP ) );
155+
}
156+
catch (SQLException e) {
157+
throw new RuntimeException( e );
158+
}
104159
}
105160
);
161+
}
162+
163+
@Test
164+
@TestForIssue(jiraKey = "HHH-18280")
165+
public void testStoredProcedureInAndOutAndRefCursorParametersInvertedParamRegistationOrder(EntityManagerFactoryScope scope) {
106166
scope.inTransaction(
107167
entityManager -> {
108168
StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "GET_ADDRESS_BY_NAME" );
169+
query.registerStoredProcedureParameter( "city_in", String.class, ParameterMode.IN );
109170
query.registerStoredProcedureParameter( "street_in", String.class, ParameterMode.IN );
171+
query.registerStoredProcedureParameter( "rec_out", ResultSet.class, ParameterMode.REF_CURSOR );
172+
query.registerStoredProcedureParameter( "err_out", String.class, ParameterMode.OUT );
173+
174+
query.setParameter( "street_in", STREET )
175+
.setParameter( "city_in", CITY );
176+
query.execute();
177+
ResultSet rs = (ResultSet) query.getOutputParameterValue( "rec_out" );
178+
try {
179+
assertTrue( rs.next() );
180+
assertThat( rs.getString( "street" ), is( STREET ) );
181+
assertThat( rs.getString( "city" ), is( CITY ) );
182+
assertThat( rs.getString( "zip" ), is( ZIP ) );
183+
}
184+
catch (SQLException e) {
185+
throw new RuntimeException( e );
186+
}
187+
}
188+
);
189+
}
190+
191+
@Test
192+
@TestForIssue(jiraKey = "HHH-18280")
193+
public void testStoredProcedureInAndOutAndRefCursorParametersInvertedParamRegistationOrder2(EntityManagerFactoryScope scope) {
194+
scope.inTransaction(
195+
entityManager -> {
196+
StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "GET_ADDRESS_BY_NAME" );
110197
query.registerStoredProcedureParameter( "city_in", String.class, ParameterMode.IN );
198+
query.registerStoredProcedureParameter( "street_in", String.class, ParameterMode.IN );
111199
query.registerStoredProcedureParameter( "rec_out", ResultSet.class, ParameterMode.REF_CURSOR );
112200
query.registerStoredProcedureParameter( "err_out", String.class, ParameterMode.OUT );
113201

114-
query.setParameter( "street_in", street )
115-
.setParameter( "city_in", city );
202+
query.setParameter( "city_in", CITY )
203+
.setParameter( "street_in", STREET );
116204
query.execute();
117205
ResultSet rs = (ResultSet) query.getOutputParameterValue( "rec_out" );
118206
try {
119207
assertTrue( rs.next() );
120-
assertThat( rs.getString( "street" ), is( street ) );
121-
assertThat( rs.getString( "city" ), is( city ) );
122-
assertThat( rs.getString( "zip" ), is( zip ) );
208+
assertThat( rs.getString( "street" ), is( STREET ) );
209+
assertThat( rs.getString( "city" ), is( CITY ) );
210+
assertThat( rs.getString( "zip" ), is( ZIP ) );
123211
}
124212
catch (SQLException e) {
125213
throw new RuntimeException( e );
@@ -510,6 +598,9 @@ public void prepareSchema(EntityManagerFactoryScope scope) {
510598
phone2.setValid( false );
511599

512600
person1.addPhone( phone2 );
601+
602+
Address address = new Address( 1l, STREET, CITY, ZIP );
603+
entityManager.persist( address );
513604
} );
514605
}
515606

@@ -538,6 +629,7 @@ public void cleanUpSchema(EntityManagerFactoryScope scope) {
538629
people.forEach( em::remove );
539630

540631
em.createQuery( "delete IdHolder" ).executeUpdate();
632+
em.createQuery( "delete Address" ).executeUpdate();
541633
});
542634
} );
543635
}
@@ -566,7 +658,7 @@ public static class IdHolder {
566658
String name;
567659
}
568660

569-
@Entity
661+
@Entity(name = "Address")
570662
@Table(name="ADDRESS_TABLE")
571663
public static class Address{
572664
@Id

0 commit comments

Comments
 (0)