Skip to content

Commit

Permalink
Add DB2 z/OS support for new JPA 3.1 supported functions (#1831)
Browse files Browse the repository at this point in the history
* Issue 1821: Add DB2 ZOS support for JPA 31 supported functions

Signed-off-by: Will Dazey <dazeydev.3@gmail.com>
  • Loading branch information
dazey3 committed Mar 16, 2023
1 parent 1092bbf commit 2be887a
Show file tree
Hide file tree
Showing 3 changed files with 1,204 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ protected void initializePlatformOperators() {

addOperator(likeEscapeOperator());
addOperator(notLikeEscapeOperator());

addOperator(ceilingOperator());
addOperator(floorOperator());
addOperator(expOperator());
addOperator(lnOperator());
addOperator(powerOperator());
addOperator(signOperator());
}

/**
Expand Down Expand Up @@ -751,6 +758,32 @@ public void printJavaDuo(Expression first, Expression second, ExpressionJavaPrin
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator ceilingOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.ceil().copyTo(operator);
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator floorOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.floor().copyTo(operator);
return operator;
}

/**
* Disable binding support.
* <p>
Expand All @@ -766,6 +799,58 @@ protected ExpressionOperator roundOperator() {
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator expOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.exp().copyTo(operator);
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator lnOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.ln().copyTo(operator);
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator powerOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.power().copyTo(operator);
return operator;
}

/**
* Disable binding support.
* <p>
* With binding enabled, DB2 z/OS will throw an error:
* <pre>The statement cannot be executed because a parameter marker has been used
* in an invalid way. DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610</pre>
*/
protected ExpressionOperator signOperator() {
ExpressionOperator operator = disableAllBindingExpression();
ExpressionOperator.sign().copyTo(operator);
return operator;
}

@Override
public boolean isDB2Z() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ public void testAvg1_PartialBind() {
query = em.createQuery("SELECT AVG(1) FROM QuerySyntaxEntity s");
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT AVG(1) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT AVG(?) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
Expand Down Expand Up @@ -200,7 +200,7 @@ public void testAvg1_PartialBind() {
query = em.createQuery(cquery2);
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT AVG(1) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT AVG(?) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
Expand Down Expand Up @@ -415,7 +415,7 @@ public void testAvg2_PartialBind() {
query = em.createQuery("SELECT AVG(1) FROM QuerySyntaxEntity s HAVING 0 < AVG(1)");
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT AVG(1) FROM QUERYSYNTAXENTITY HAVING (? < AVG(1))", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT AVG(?) FROM QUERYSYNTAXENTITY HAVING (? < AVG(?))", _sql2.remove(0));
Expand Down Expand Up @@ -2322,7 +2322,7 @@ public void testSum1_PartialBind() {
query = em.createQuery("SELECT SUM(1) FROM QuerySyntaxEntity s");
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT SUM(1) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT SUM(?) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
Expand Down Expand Up @@ -2354,7 +2354,7 @@ public void testSum1_PartialBind() {
query = em.createQuery(cquery2);
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT SUM(1) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT SUM(?) FROM QUERYSYNTAXENTITY", _sql2.remove(0));
Expand Down Expand Up @@ -2569,7 +2569,7 @@ public void testSum2_PartialBind() {
query = em.createQuery("SELECT SUM(1) FROM QuerySyntaxEntity s HAVING 0 < SUM(1)");
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT SUM(1) FROM QUERYSYNTAXENTITY HAVING (? < SUM(1))", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT SUM(?) FROM QUERYSYNTAXENTITY HAVING (? < SUM(?))", _sql2.remove(0));
Expand Down Expand Up @@ -2618,7 +2618,7 @@ public void testSum2_PartialBind() {
query = em.createQuery(cquery2);
query.getResultList();
Assert.assertEquals(1, _sql2.size());
if(platform.isDB2Z() || platform.isDB2() || platform.isDerby()) {
if(platform.isDB2Z() || platform.isDerby()) {
Assert.assertEquals("SELECT SUM(1) FROM QUERYSYNTAXENTITY HAVING (? < SUM(1))", _sql2.remove(0));
} else {
Assert.assertEquals("SELECT SUM(?) FROM QUERYSYNTAXENTITY HAVING (? < SUM(?))", _sql2.remove(0));
Expand Down

0 comments on commit 2be887a

Please sign in to comment.