Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for uncaught/unhandled exception #664

Merged
merged 27 commits into from Apr 5, 2018
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
3599244
Merge pull request #13 from v-afrafi/retryLogic
rene-ye Feb 2, 2018
a310fd2
Added more information to error messages
rene-ye Feb 5, 2018
245d590
Merge branch 'dev' of https://github.com/rene-ye/mssql-jdbc into devF…
rene-ye Feb 27, 2018
1b853d8
Merge branch 'dev' of https://github.com/Microsoft/mssql-jdbc into de…
rene-ye Feb 27, 2018
0113341
Revert "Added information to error message"
rene-ye Feb 27, 2018
b1b5904
Merge pull request #650 from Microsoft/dev
rene-ye Mar 9, 2018
2128827
Merge pull request #32 from Microsoft/master
rene-ye Mar 10, 2018
4f18ddf
Merge branch 'dev' of https://github.com/Microsoft/mssql-jdbc into de…
rene-ye Mar 19, 2018
6d1791d
Fix for #659
rene-ye Mar 21, 2018
9124dbe
Read message length
rene-ye Mar 21, 2018
4d408c9
Unsigned byte update
rene-ye Mar 21, 2018
145ccee
Removed clunky hex conversions
rene-ye Mar 22, 2018
f7ef7b9
Narrowed trigger conditions
rene-ye Mar 23, 2018
ab46c27
Spacing fixes
rene-ye Mar 23, 2018
9f9872a
Added test case
rene-ye Mar 23, 2018
247c419
spacing adjustment
rene-ye Mar 23, 2018
3f8b7f6
Edited test drop procedures
rene-ye Mar 26, 2018
49a5123
github spacing misalignment fixes
rene-ye Mar 26, 2018
df87d27
Changed test condition
rene-ye Mar 26, 2018
6dd712a
Removed error check
rene-ye Mar 27, 2018
d8691bf
tdsreader change
rene-ye Mar 27, 2018
3d7634c
removing test for now
rene-ye Mar 27, 2018
63783f7
enabled tests
rene-ye Mar 28, 2018
42259e0
github spacing fix
rene-ye Mar 28, 2018
96660f7
removed array import
rene-ye Mar 28, 2018
255e96e
removed "arrays" instead of "array"
rene-ye Mar 28, 2018
4f9c8c3
spacing changes
rene-ye Apr 3, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 14 additions & 3 deletions src/main/java/com/microsoft/sqlserver/jdbc/SQLServerResultSet.java
Expand Up @@ -6334,9 +6334,20 @@ boolean onNBCRow(TDSReader tdsReader) throws SQLServerException {
boolean onDone(TDSReader tdsReader) throws SQLServerException {
ensureStartMark();

// Consume the done token
StreamDone doneToken = new StreamDone();
doneToken.setFromTDS(tdsReader);
int token = tdsReader.peekTokenType();
StreamDone doneToken = new StreamDone();
doneToken.setFromTDS(tdsReader);

int packetType = tdsReader.peekTokenType();
if (-1 != packetType && TDS.TDS_DONEINPROC == token) {
switch (packetType) {
case TDS.TDS_ENV_CHG:
case TDS.TDS_ERR:
return true;
default:
break;
}
}

// Done with all the rows in this fetch buffer and done with parsing
// unless it's a server cursor, in which case there is a RETSTAT and
Expand Down
Expand Up @@ -7,19 +7,24 @@
*/
package com.microsoft.sqlserver.jdbc.exception;

import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.jupiter.api.Test;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;

import com.microsoft.sqlserver.jdbc.SQLServerBulkCSVFileRecord;
import com.microsoft.sqlserver.jdbc.SQLServerConnection;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.microsoft.sqlserver.testframework.AbstractTest;
import com.microsoft.sqlserver.testframework.Utils;

Expand Down Expand Up @@ -93,4 +98,56 @@ private void createWaitForDelayPreocedure(SQLServerConnection conn) throws SQLEx
String sql = "CREATE PROCEDURE " + waitForDelaySPName + " AS" + " BEGIN" + " WAITFOR DELAY '00:00:" + waitForDelaySeconds + "';" + " END";
conn.createStatement().execute(sql);
}
}

@Test
public void testResultSetErrorSearch() throws Exception {
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);

String dropTable_sql = "DROP TABLE IF EXISTS TEST659;";
String dropProc_sql = "DROP PROCEDURE IF EXISTS proc_insert_masse_TEST;";
String createTable_sql = "CREATE TABLE TEST659 (ID INT IDENTITY NOT NULL," +
"FIELD1 VARCHAR (255) NOT NULL," +
"FIELD2 VARCHAR (255) NOT NULL);";
String createProc_sql = "CREATE PROCEDURE proc_insert_masse_TEST @json NVARCHAR(MAX) "
+ "AS "
+ "BEGIN TRANSACTION "
+ "BEGIN TRY "
+ "SET NOCOUNT ON; "
+ "MERGE INTO TEST659 AS target "
+ "USING "
+ "(SELECT * FROM OPENJSON(@json) "
+ "WITH (FIELD1 VARCHAR(255) 'strict $.FIELD1')) "
+ "AS src "
+ "ON (1 = 0) "
+ "WHEN NOT MATCHED THEN "
+ "INSERT (FIELD1) VALUES (src.FIELD1) "
+ "OUTPUT inserted.ID; "
+ "COMMIT TRANSACTION; "
+ "END TRY "
+ "BEGIN CATCH "
+ "DECLARE @errorMessage NVARCHAR(4000) = ERROR_MESSAGE(); "
+ "ROLLBACK TRANSACTION; "
+ "RAISERROR('Error occured during the insert: %s', 16, 1, @errorMessage); "
+ "END CATCH;";
String proc_sql = "EXECUTE [dbo].proc_insert_masse_TEST N'[{\"FIELD1\" : \"TEST\"}]';";

Connection conn = ds.getConnection();
if (conn.getMetaData().getDatabaseMajorVersion() >= 13)
{
Statement stmt = conn.createStatement();
stmt.execute(dropTable_sql);
stmt.execute(createTable_sql);
stmt.execute(dropProc_sql);
stmt.execute(createProc_sql);
stmt.execute(proc_sql);
ResultSet rs = stmt.getResultSet();
try {
rs.next();
fail("No exceptions caught.");
} catch (SQLException e) {
assertTrue(e.getMessage().contains("Error occured during the insert:"), "Unexpected Error Message: " + e.getMessage());
}
}
}
}