Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
6169057
Fix for SNOW-1989391 Incorrect column type reported by JDBC metadata
sfc-gh-ext-simba-vb Aug 20, 2025
69fcaf8
Modified the test.
sfc-gh-ext-simba-vb Aug 20, 2025
1626013
Merge branch 'master' of https://github.com/snowflakedb/snowflake-jdb…
sfc-gh-ext-simba-vb Aug 25, 2025
372945a
Tests for multistatement in Arrow format.
sfc-gh-ext-simba-vb Aug 25, 2025
b95e7c7
Reverting irrelevant changes.
sfc-gh-ext-simba-vb Aug 25, 2025
4665b54
Tests corrected.
sfc-gh-ext-simba-vb Aug 25, 2025
7873c01
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Aug 29, 2025
dfdfd6b
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 3, 2025
cdc4e2f
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 4, 2025
3cfc5ea
Review comments implemented.
sfc-gh-ext-simba-vb Sep 5, 2025
2e31371
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 8, 2025
3c37d2e
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 15, 2025
6699232
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 16, 2025
2aba09f
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 17, 2025
8342f95
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 22, 2025
7f19011
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 22, 2025
8a3e5aa
Merge branch 'master' into SNOW-2234383_Test_Coverage_For_Multistatem…
sfc-gh-ext-simba-vb Sep 23, 2025
2d9c02b
Updated Description.md
sfc-gh-ext-simba-vb Sep 25, 2025
1290d31
Merge branch 'master' of https://github.com/snowflakedb/snowflake-jdb…
sfc-gh-ext-simba-vb Sep 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
import net.snowflake.client.jdbc.ErrorCode;
import net.snowflake.client.jdbc.SnowflakeResultSetSerializableV1;
import net.snowflake.client.jdbc.SnowflakeSQLLoggedException;
import net.snowflake.client.log.SFLogger;
import net.snowflake.client.log.SFLoggerFactory;

/**
* Factory class to create SFBaseResultSet class. Depending on result format, different instance
* will be created
*/
class SFResultSetFactory {
private static final SFLogger logger = SFLoggerFactory.getLogger(SFResultSetFactory.class);
/**
* Factory class used to generate ResultSet object according to query result format
*
Expand All @@ -34,6 +37,7 @@ static SFBaseResultSet getResultSet(
execTimeData.setCreateResultSetStart();
switch (resultSetSerializable.getQueryResultFormat()) {
case ARROW:
logger.debug("Query result received in ARROW format. Processing with SFArrowResultSet.");
rs =
new SFArrowResultSet(
resultSetSerializable, statement.getSFBaseSession(), statement, sortResult);
Expand Down
110 changes: 110 additions & 0 deletions src/test/java/net/snowflake/client/jdbc/MultiStatementLatestIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,24 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.snowflake.client.category.TestTags;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

/**
* MultiStatement integration tests for the latest JDBC driver. This doesn't work for the oldest
Expand Down Expand Up @@ -314,4 +324,104 @@ public void testAnonymousBlocksUse() throws SQLException {
}
}
}

@ParameterizedTest
@ValueSource(strings = {"arrow", "json"})
void testMultiStatementResultFormat(String queryResultFormat) throws Exception {
// Setup a memory buffer for JUL logs
ByteArrayOutputStream logCapture = new ByteArrayOutputStream();
PrintStream logStream = new PrintStream(logCapture);

Logger sfLogger = Logger.getLogger("net.snowflake");
sfLogger.setLevel(Level.ALL);
sfLogger.setUseParentHandlers(false);

Handler consoleHandler =
new ConsoleHandler() {
@Override
public synchronized void publish(java.util.logging.LogRecord record) {
logStream.println(record.getLevel() + ": " + record.getMessage());
}
};
consoleHandler.setLevel(Level.ALL);
sfLogger.addHandler(consoleHandler);

try (Statement stmt = connection.createStatement()) {
try {
stmt.execute("alter session set jdbc_query_result_format = '" + queryResultFormat + "'");
stmt.execute("ALTER SESSION SET ENABLE_FIX_1758055_ADD_ARROW_SUPPORT_FOR_MULTI_STMTS=TRUE");
} catch (SQLException ex) {
/*
* Ingore failure since the test user might not be able to change the parameter.
* In such case assume the parameter has been enabled on the test account.
*/
if (!ex.getMessage()
.contains("invalid parameter 'ENABLE_FIX_1758055_ADD_ARROW_SUPPORT_FOR_MULTI_STMTS'")) {
fail();
}
}

stmt.unwrap(SnowflakeStatement.class).setParameter("MULTI_STATEMENT_COUNT", 4);

String multiStmtQuery =
"select TO_DOUBLE('0.123456789123456789');\n"
+ "select 456;\n"
+ "select 789;\n"
+ "select '000';";

stmt.execute(multiStmtQuery);

int resultSetIndex = 0;
boolean hasResults = true;

while (hasResults) {
ResultSet rs = stmt.getResultSet();
assertNotNull(rs);

switch (resultSetIndex) {
case 0:
assertTrue(rs.next());
if ("arrow".equals(queryResultFormat)) {
assertEquals(0.12345678912345678d, rs.getDouble(1), 0.0);
} else {
assertEquals(new BigDecimal("0.1234567891"), rs.getBigDecimal(1));
}
break;
case 1:
assertTrue(rs.next());
assertEquals(456, rs.getInt(1));
break;
case 2:
assertTrue(rs.next());
assertEquals(789, rs.getInt(1));
break;
case 3:
assertTrue(rs.next());
assertEquals("000", rs.getString(1));
break;
default:
fail("Unexpected extra result set");
}

rs.close();
hasResults = stmt.getMoreResults();
resultSetIndex++;
}
}

try {
consoleHandler.flush();
String logs = logCapture.toString();

if ("arrow".equals(queryResultFormat) && logs != null) {
assertTrue(
logs.contains(
"Query result received in ARROW format. Processing with SFArrowResultSet."),
"Expected Arrow logs but got: \n" + logs);
}
} finally {
sfLogger.removeHandler(consoleHandler);
consoleHandler.close();
}
}
}
Loading