/*
* Microsoft JDBC Driver for SQL Server
*
* Copyright(c) Microsoft Corporation All rights reserved.
*
* This program is made available under the terms of the MIT License. See the LICENSE file in the project root for more information.
*/
package com.microsoft.sqlserver.jdbc.parametermetadata;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
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.SQLServerException;
import com.microsoft.sqlserver.testframework.AbstractTest;
import com.microsoft.sqlserver.testframework.Utils;
import com.microsoft.sqlserver.testframework.util.RandomUtil;
@RunWith(JUnitPlatform.class)
public class ParameterMetaDataTest extends AbstractTest {
private static final String tableName = "[" + RandomUtil.getIdentifier("StatementParam") + "]";
/**
* Test ParameterMetaData#isWrapperFor and ParameterMetaData#unwrap.
*
* @throws SQLException
*/
@Test
public void testParameterMetaDataWrapper() throws SQLException {
try (Connection con = DriverManager.getConnection(connectionString); Statement stmt = con.createStatement()) {
stmt.executeUpdate("create table " + tableName + " (col1 int identity(1,1) primary key)");
try {
String query = "SELECT * from " + tableName + " where col1 = ?";
try (PreparedStatement pstmt = con.prepareStatement(query)) {
ParameterMetaData parameterMetaData = pstmt.getParameterMetaData();
assertTrue(parameterMetaData.isWrapperFor(ParameterMetaData.class));
assertSame(parameterMetaData, parameterMetaData.unwrap(ParameterMetaData.class));
}
}
finally {
Utils.dropTableIfExists(tableName, stmt);
}
}
}
/**
* Test SQLServerException is not wrapped with another SQLServerException.
*
* @throws SQLException
*/
@Test
public void testSQLServerExceptionNotWrapped() throws SQLException {
try (Connection con = DriverManager.getConnection(connectionString);
PreparedStatement pstmt = connection.prepareStatement("invalid query :)");) {
pstmt.getParameterMetaData();
}
catch (SQLServerException e) {
assertTrue(!e.getMessage().contains("com.microsoft.sqlserver.jdbc.SQLServerException"),
"SQLServerException should not be wrapped by another SQLServerException.");
}
}
}