mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
Add transaction to transform step and query action (and rdbms query)
This commit is contained in:
@ -99,11 +99,23 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
QueryOutput queryOutput = new QueryOutput(queryInput);
|
||||
|
||||
try(Connection connection = getConnection(queryInput))
|
||||
Connection connection;
|
||||
boolean needToCloseConnection = false;
|
||||
if(queryInput.getTransaction() != null && queryInput.getTransaction() instanceof RDBMSTransaction rdbmsTransaction)
|
||||
{
|
||||
PreparedStatement statement = createStatement(connection, sql, queryInput);
|
||||
LOG.debug("Using connection from queryInput [" + rdbmsTransaction.getConnection() + "]");
|
||||
connection = rdbmsTransaction.getConnection();
|
||||
}
|
||||
else
|
||||
{
|
||||
connection = getConnection(queryInput);
|
||||
needToCloseConnection = true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
QueryOutput queryOutput = new QueryOutput(queryInput);
|
||||
PreparedStatement statement = createStatement(connection, sql, queryInput);
|
||||
QueryManager.executeStatement(statement, ((ResultSet resultSet) ->
|
||||
{
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
@ -132,9 +144,16 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
}
|
||||
|
||||
}), params);
|
||||
}
|
||||
|
||||
return queryOutput;
|
||||
return queryOutput;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(needToCloseConnection)
|
||||
{
|
||||
connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
|
@ -217,9 +217,8 @@ public class QueryManager
|
||||
{
|
||||
return (T) Long.valueOf(((Integer) object));
|
||||
}
|
||||
else if(object instanceof Timestamp && returnClass.equals(LocalDateTime.class))
|
||||
else if(object instanceof Timestamp timestamp && returnClass.equals(LocalDateTime.class))
|
||||
{
|
||||
Timestamp timestamp = (Timestamp) object;
|
||||
return ((T) LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp.getTime()), ZoneId.systemDefault()));
|
||||
}
|
||||
else
|
||||
|
@ -23,8 +23,11 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
|
||||
@ -434,7 +437,7 @@ public class RDBMSQueryActionTest extends RDBMSActionTest
|
||||
@Test
|
||||
public void testThatDisplayValuesGetSetGoingThroughQueryAction() throws QException
|
||||
{
|
||||
QueryInput queryInput = initQueryRequest();
|
||||
QueryInput queryInput = initQueryRequest();
|
||||
queryInput.setShouldGenerateDisplayValues(true);
|
||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||
Assertions.assertEquals(5, queryOutput.getRecords().size(), "Unfiltered query should find all rows");
|
||||
@ -447,4 +450,36 @@ public class RDBMSQueryActionTest extends RDBMSActionTest
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testLookInsideTransaction() throws QException
|
||||
{
|
||||
InsertInput insertInput = new InsertInput(TestUtils.defineInstance());
|
||||
insertInput.setSession(new QSession());
|
||||
insertInput.setTableName(TestUtils.defineTablePerson().getName());
|
||||
|
||||
InsertAction insertAction = new InsertAction();
|
||||
QBackendTransaction transaction = insertAction.openTransaction(insertInput);
|
||||
|
||||
insertInput.setTransaction(transaction);
|
||||
insertInput.setRecords(List.of(
|
||||
new QRecord().withValue("firstName", "George").withValue("lastName", "Washington").withValue("email", "gw@kingsrook.com")
|
||||
));
|
||||
|
||||
insertAction.execute(insertInput);
|
||||
|
||||
QueryInput queryInput = initQueryRequest();
|
||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||
Assertions.assertEquals(5, queryOutput.getRecords().size(), "Query without the transaction should not see the new row.");
|
||||
|
||||
queryInput = initQueryRequest();
|
||||
queryInput.setTransaction(transaction);
|
||||
queryOutput = new QueryAction().execute(queryInput);
|
||||
Assertions.assertEquals(6, queryOutput.getRecords().size(), "Query with the transaction should see the new row.");
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user