// jTDS JDBC Driver for Microsoft SQL Server and Sybase
// Copyright (C) 2004 The jTDS Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
package net.sourceforge.jtds.jdbc;
import java.io.ByteArrayInputStream;
import java.io.CharArrayReader;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Types;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Test case to illustrate use of TDS 5 support.
*
* @author Mike Hutchinson
* @version $Id: Tds5Test.java,v 1.8.2.1 2009-08-04 10:33:54 ickzon Exp $
*/
public class Tds5Test extends TestBase {
public static Test suite()
{
String tds = props.getProperty( Messages.get( Driver.TDS ) );
if( tds == null || Double.valueOf( tds ) >= Double.valueOf( DefaultProperties.TDS_VERSION_50 ) )
{
return new TestSuite( Tds5Test.class );
}
return new TestSuite();
}
public Tds5Test(String name) {
super(name);
}
/**
* Test the new column meta data made available in Sybase 12
* @throws Exception
*/
public void testColMetaData() throws Exception {
if (!isVersion12orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTMD (id numeric(10,0) identity primary key not null, data unichar null)");
ResultSetMetaData rsmd = stmt.executeQuery("SELECT id, data as aliasname FROM #TESTMD").getMetaData();
assertEquals(2, rsmd.getColumnCount());
assertEquals("tempdb", rsmd.getCatalogName(1));
assertEquals("guest", rsmd.getSchemaName(1));
assertEquals("#TESTMD", rsmd.getTableName(1));
assertEquals("id", rsmd.getColumnName(1));
assertEquals("aliasname", rsmd.getColumnName(2));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(1));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(2));
assertEquals("numeric identity", rsmd.getColumnTypeName(1));
assertEquals("unichar", rsmd.getColumnTypeName(2));
assertTrue(rsmd.isAutoIncrement(1));
assertFalse(rsmd.isAutoIncrement(2));
stmt.close();
}
/**
* Test the new date and time data types in Sybase 12+
* @throws Exception
*/
public void testDateTime() throws Exception {
if (!isVersion12orHigher()) {
return;
}
String testDate = "1997-08-31";
String testTime = "23:59:59";
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTDT (id int, d1 date, d2 date, t1 time, t2 time)");
stmt.close();
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTDT VALUES(1, {d " + testDate + "}, ?, {t " + testTime + "}, ?)" );
pstmt.setDate(1, Date.valueOf(testDate));
pstmt.setTime(2, Time.valueOf(testTime));
assertEquals(1, pstmt.executeUpdate());
pstmt.close();
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTDT");
assertTrue(rs.next());
assertEquals(testDate, rs.getDate(2).toString());
assertEquals(testDate, rs.getDate(3).toString());
assertEquals(testTime, rs.getTime(4).toString());
assertEquals(testTime, rs.getTime(5).toString());
stmt.close();
}
/**
* Test varchar and varbinary fields longer than 255 bytes.
* Test univarchar columns as well.
* @throws Exception
*/
public void testLongData() throws Exception {
if (!isVersion12orHigher()) {
return;
}
StringBuilder buf = new StringBuilder(300);
for (int i = 0; i < 300; i++) {
if (i == 0) {
buf.append('<');
} else
if (i == 299) {
buf.append('>');
} else {
buf.append('X');
}
}
String longString = buf.toString();
byte longBytes[] = longString.getBytes();
String unichar = "This is a unicode string \u0441\u043b\u043e\u0432\u043e";
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTLD (id int, vc varchar(300), vb varbinary(300), vu univarchar(300))");
stmt.close();
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTLD VALUES(1, ?, ?, ?)" );
pstmt.setString(1, longString);
pstmt.setBytes(2, longBytes);
pstmt.setString(3, unichar);
assertEquals(1, pstmt.executeUpdate());
pstmt.close();
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTLD");
assertTrue(rs.next());
assertEquals(longString, rs.getString(2));
assertEquals(longString, new String(rs.getBytes(3)));
assertEquals(unichar, rs.getString(4));
stmt.close();
}
/**
* Test for bug [1161609] Text or image data truncated on Sybase 12.5
* @throws Exception
*/
public void testImageText() throws Exception {
if (!isVersion12orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTIT (id int, txt text, img image)");
StringBuilder data = new StringBuilder(20000);
for (int i = 0; i < 20000; i++) {
data.append((char)('A' + (i % 10)));
}
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTIT VALUES(?,?,?)");
pstmt.setInt(1, 1);
pstmt.setString(2, data.toString());
pstmt.setBytes(3, data.toString().getBytes());
assertEquals(1, pstmt.executeUpdate());
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTIT");
assertNotNull(rs);
assertTrue(rs.next());
assertEquals(data.length(), rs.getString(2).length());
assertEquals(data.length(), rs.getBytes(3).length);
pstmt.close();
stmt.close();
}
/**
* Test writing image data from InputStream
* @throws Exception
*/
public void testStreamImage() throws Exception {
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTIS (id int, img image)");
byte data[] = new byte[20000];
for (int i = 0; i < data.length; i++) {
data[i] = (byte)('A' + (i % 10));
}
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTIS VALUES(?,?)");
pstmt.setInt(1, 1);
pstmt.setBinaryStream(2, new ByteArrayInputStream(data), data.length);
assertEquals(1, pstmt.executeUpdate());
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTIS");
assertNotNull(rs);
assertTrue(rs.next());
assertEquals(new String(data), new String(rs.getBytes(2)));
pstmt.close();
stmt.close();
}
/**
* Test writing text data from Reader
* @throws Exception
*/
public void testStreamText() throws Exception {
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTTR (id int, txt text)");
char data[] = new char[20000];
for (int i = 0; i < data.length; i++) {
data[i] = (char)('A' + (i % 10));
}
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTTR VALUES(?,?)");
pstmt.setInt(1, 1);
pstmt.setCharacterStream(2, new CharArrayReader(data), data.length);
assertEquals(1, pstmt.executeUpdate());
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTTR");
assertNotNull(rs);
assertTrue(rs.next());
assertEquals(new String(data), rs.getString(2));
pstmt.close();
stmt.close();
}
/**
* Test writing unitext data from Reader
*/
public void testStreamUniText() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTTR (id int, txt unitext)");
char data[] = new char[20000];
for (int i = 0; i < data.length; i++) {
data[i] = (char)('A' + (i % 10));
}
data[data.length-1] = '\u0441'; // Force unicode
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTTR VALUES(?,?)");
pstmt.setInt(1, 1);
pstmt.setCharacterStream(2, new CharArrayReader(data), data.length);
assertEquals(1, pstmt.executeUpdate());
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTTR");
assertNotNull(rs);
assertTrue(rs.next());
assertEquals(new String(data), rs.getString(2));
pstmt.close();
stmt.close();
}
/**
* Test writing unitext data from memory
* @throws Exception
*/
public void testUniText() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TESTTR (id int, txt unitext)");
char data[] = new char[20000];
for (int i = 0; i < data.length; i++) {
data[i] = (char)('A' + (i % 10));
}
data[data.length-1] = '\u0441'; // Force unicode
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO #TESTTR VALUES(?,?)");
pstmt.setInt(1, 1);
pstmt.setString(2, new String(data));
assertEquals(1, pstmt.executeUpdate());
ResultSet rs = stmt.executeQuery("SELECT * FROM #TESTTR");
assertNotNull(rs);
assertTrue(rs.next());
assertEquals(new String(data), rs.getString(2));
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("unitext", rsmd.getColumnTypeName(2));
assertEquals(Types.CLOB, rsmd.getColumnType(2));
pstmt.close();
stmt.close();
}
/*
* Check that unitext fields that have once been set to a non
* null value return null when updated to null.
* Fix bug [1774322] Sybase nulled text fields return not null.
*/
public void testNullUniText() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (id int primary key not null, txt unitext null)");
stmt.executeUpdate("INSERT INTO #TEST VALUES (1, null)");
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertTrue(rs.getString(2) == null);
stmt.executeUpdate("UPDATE #TEST SET txt = ' ' WHERE id = 1");
rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertTrue(rs.getString(2) != null);
stmt.executeUpdate("UPDATE #TEST SET txt = null WHERE id = 1");
rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertTrue(rs.getString(2) == null);
stmt.close();
}
/**
* Test Sybase ASE 15+ bigint data type.
* @throws Exception
*/
public void testBigint() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (val bigint primary key, val2 bigint null)");
PreparedStatement pstmt = con.prepareStatement("INSERT INTO #TEST VALUES(?,?)");
pstmt.setLong(1, Long.MAX_VALUE);
pstmt.setLong(2, Long.MIN_VALUE);
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertEquals(Long.MAX_VALUE, rs.getLong(1));
assertEquals(Long.MIN_VALUE, rs.getLong(2));
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("bigint", rsmd.getColumnTypeName(1));
assertEquals("bigint", rsmd.getColumnTypeName(2));
assertEquals(Types.BIGINT, rsmd.getColumnType(1));
assertEquals(Types.BIGINT, rsmd.getColumnType(2));
}
/**
* Test Sybase ASE 15+ unsigned smallint data type.
* @throws Exception
*/
public void testUnsignedSmallInt() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (val unsigned smallint primary key, val2 unsigned smallint null)");
PreparedStatement pstmt = con.prepareStatement("INSERT INTO #TEST VALUES(?,?)");
pstmt.setInt(1, 65535);
pstmt.setInt(2, 65535);
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertEquals(65535, rs.getInt(1));
assertEquals(65535, rs.getInt(2));
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("unsigned smallint", rsmd.getColumnTypeName(1));
assertEquals("unsigned smallint", rsmd.getColumnTypeName(2));
assertEquals(Types.INTEGER, rsmd.getColumnType(1));
assertEquals(Types.INTEGER, rsmd.getColumnType(2));
}
/**
* Test Sybase ASE 15+ unsigned int data type.
* @throws Exception
*/
public void testUnsignedInt() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (val unsigned int primary key, val2 unsigned int null)");
PreparedStatement pstmt = con.prepareStatement("INSERT INTO #TEST VALUES(?,?)");
pstmt.setLong(1, 4294967295L);
pstmt.setLong(2, 4294967295L);
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertEquals(4294967295L, rs.getLong(1));
assertEquals(4294967295L, rs.getLong(2));
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("unsigned int", rsmd.getColumnTypeName(1));
assertEquals("unsigned int", rsmd.getColumnTypeName(2));
assertEquals(Types.BIGINT, rsmd.getColumnType(1));
assertEquals(Types.BIGINT, rsmd.getColumnType(2));
}
/**
* Test Sybase ASE 15+ unsigned bigint data type.
* @throws Exception
*/
public void testUnsignedBigInt() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (val unsigned bigint primary key, val2 unsigned bigint null)");
PreparedStatement pstmt = con.prepareStatement("INSERT INTO #TEST VALUES(?,?)");
pstmt.setBigDecimal(1, new BigDecimal("18446744073709551615"));
pstmt.setBigDecimal(2, new BigDecimal("18446744073709551615"));
pstmt.executeUpdate();
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
rs.next();
assertEquals("18446744073709551615", rs.getString(1));
assertEquals("18446744073709551615", rs.getString(2));
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("unsigned bigint", rsmd.getColumnTypeName(1));
assertEquals("unsigned bigint", rsmd.getColumnTypeName(2));
assertEquals(Types.DECIMAL, rsmd.getColumnType(1));
assertEquals(Types.DECIMAL, rsmd.getColumnType(2));
}
/**
* Test that resultset meta data is correct for long varchar/varbinary types.
* @throws Exception
*/
public void testResultSetMetaData2() throws Exception {
if (!isVersion12orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #temp (" +
"c varchar(310) not null, c2 varchar(320) null, " +
"c3 char(330) not null, c4 char(340) null," +
"c5 nvarchar(350) not null, c6 nvarchar(360) null, " +
"c7 nchar(370) not null, c8 nchar(380) null," +
"c9 univarchar(390) not null, c10 univarchar(400) null," +
"c11 unichar(410) not null, c12 unichar(420) null," +
"c13 varbinary(430) not null, c14 varbinary(440) null," +
"c15 binary(450) not null, c16 binary(460) null" +
")");
ResultSet rs = stmt.executeQuery("SELECT * FROM #temp");
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("varchar", rsmd.getColumnTypeName(1));
assertEquals(Types.VARCHAR, rsmd.getColumnType(1));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(1));
assertEquals(310, rsmd.getColumnDisplaySize(1));
assertEquals("varchar", rsmd.getColumnTypeName(2));
assertEquals(Types.VARCHAR, rsmd.getColumnType(2));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(2));
assertEquals(320, rsmd.getColumnDisplaySize(2));
assertEquals("char", rsmd.getColumnTypeName(3));
assertEquals(Types.CHAR, rsmd.getColumnType(3));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(3));
assertEquals(330, rsmd.getColumnDisplaySize(3));
assertEquals("char", rsmd.getColumnTypeName(4));
assertEquals(Types.CHAR, rsmd.getColumnType(4));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(4));
assertEquals(340, rsmd.getColumnDisplaySize(4));
assertEquals("nvarchar", rsmd.getColumnTypeName(5));
assertEquals(Types.VARCHAR, rsmd.getColumnType(5));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(5));
assertEquals(350, rsmd.getColumnDisplaySize(5));
assertEquals("nvarchar", rsmd.getColumnTypeName(6));
assertEquals(Types.VARCHAR, rsmd.getColumnType(6));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(6));
assertEquals(360, rsmd.getColumnDisplaySize(6));
assertEquals("nchar", rsmd.getColumnTypeName(7));
assertEquals(Types.CHAR, rsmd.getColumnType(7));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(7));
assertEquals(370, rsmd.getColumnDisplaySize(7));
assertEquals("nchar", rsmd.getColumnTypeName(8));
assertEquals(Types.CHAR, rsmd.getColumnType(8));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(8));
assertEquals(380, rsmd.getColumnDisplaySize(8));
assertEquals("univarchar", rsmd.getColumnTypeName(9));
assertEquals(Types.VARCHAR, rsmd.getColumnType(9));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(9));
assertEquals(390, rsmd.getColumnDisplaySize(9));
assertEquals("univarchar", rsmd.getColumnTypeName(10));
assertEquals(Types.VARCHAR, rsmd.getColumnType(10));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(10));
assertEquals(400, rsmd.getColumnDisplaySize(10));
assertEquals("unichar", rsmd.getColumnTypeName(11));
assertEquals(Types.CHAR, rsmd.getColumnType(11));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(11));
assertEquals(410, rsmd.getColumnDisplaySize(11));
assertEquals("unichar", rsmd.getColumnTypeName(12));
assertEquals(Types.CHAR, rsmd.getColumnType(12));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(12));
assertEquals(420, rsmd.getColumnDisplaySize(12));
assertEquals("varbinary", rsmd.getColumnTypeName(13));
assertEquals(Types.VARBINARY, rsmd.getColumnType(13));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(13));
assertEquals(860, rsmd.getColumnDisplaySize(13));
assertEquals("varbinary", rsmd.getColumnTypeName(14));
assertEquals(Types.VARBINARY, rsmd.getColumnType(14));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(14));
assertEquals(880, rsmd.getColumnDisplaySize(14));
assertEquals("binary", rsmd.getColumnTypeName(15));
assertEquals(Types.BINARY, rsmd.getColumnType(15));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(15));
assertEquals(900, rsmd.getColumnDisplaySize(15));
assertEquals("binary", rsmd.getColumnTypeName(16));
assertEquals(Types.BINARY, rsmd.getColumnType(16));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(16));
assertEquals(920, rsmd.getColumnDisplaySize(16));
}
/**
* Test that resultset meta data is correct for short varchar/varbinary types.
* Demonstrate fix to bug [1453552].
* @throws Exception
*/
public void testResultSetMetaData() throws Exception {
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #temp (" +
"c varchar(10) not null, c2 varchar(20) null, " +
"c3 char(30) not null, c4 char(40) null," +
"c5 nvarchar(50) not null, c6 nvarchar(60) null, " +
"c7 nchar(70) not null, c8 nchar(80) null," +
"c9 varbinary(90) not null, c10 varbinary(100) null, " +
"c11 binary(110) not null, c12 binary(120) null," +
")");
ResultSet rs = stmt.executeQuery("SELECT * FROM #temp");
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("varchar", rsmd.getColumnTypeName(1));
assertEquals(Types.VARCHAR, rsmd.getColumnType(1));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(1));
assertEquals(10, rsmd.getColumnDisplaySize(1));
assertEquals("varchar", rsmd.getColumnTypeName(2));
assertEquals(Types.VARCHAR, rsmd.getColumnType(2));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(2));
assertEquals(20, rsmd.getColumnDisplaySize(2));
assertEquals("char", rsmd.getColumnTypeName(3));
assertEquals(Types.CHAR, rsmd.getColumnType(3));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(3));
assertEquals(30, rsmd.getColumnDisplaySize(3));
assertEquals("char", rsmd.getColumnTypeName(4));
assertEquals(Types.CHAR, rsmd.getColumnType(4));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(4));
assertEquals(40, rsmd.getColumnDisplaySize(4));
assertEquals("nvarchar", rsmd.getColumnTypeName(5));
assertEquals(Types.VARCHAR, rsmd.getColumnType(5));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(5));
assertEquals(50, rsmd.getColumnDisplaySize(5));
assertEquals("nvarchar", rsmd.getColumnTypeName(6));
assertEquals(Types.VARCHAR, rsmd.getColumnType(6));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(6));
assertEquals(60, rsmd.getColumnDisplaySize(6));
assertEquals("nchar", rsmd.getColumnTypeName(7));
assertEquals(Types.CHAR, rsmd.getColumnType(7));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(7));
assertEquals(70, rsmd.getColumnDisplaySize(7));
assertEquals("nchar", rsmd.getColumnTypeName(8));
assertEquals(Types.CHAR, rsmd.getColumnType(8));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(8));
assertEquals(80, rsmd.getColumnDisplaySize(8));
assertEquals("varbinary", rsmd.getColumnTypeName(9));
assertEquals(Types.VARBINARY, rsmd.getColumnType(9));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(9));
assertEquals(180, rsmd.getColumnDisplaySize(9));
assertEquals("varbinary", rsmd.getColumnTypeName(10));
assertEquals(Types.VARBINARY, rsmd.getColumnType(10));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(10));
assertEquals(200, rsmd.getColumnDisplaySize(10));
assertEquals("binary", rsmd.getColumnTypeName(11));
assertEquals(Types.BINARY, rsmd.getColumnType(11));
assertEquals(ResultSetMetaData.columnNoNulls, rsmd.isNullable(11));
assertEquals(220, rsmd.getColumnDisplaySize(11));
assertEquals("binary", rsmd.getColumnTypeName(12));
assertEquals(Types.BINARY, rsmd.getColumnType(12));
assertEquals(ResultSetMetaData.columnNullable, rsmd.isNullable(12));
assertEquals(240, rsmd.getColumnDisplaySize(12));
}
/**
* Test Sybase ASE misc data type metadata.
* @throws Exception
*/
public void testResultSetMetaData3() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (ts timestamp, s sysname)");
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("timestamp", rsmd.getColumnTypeName(1));
assertEquals(Types.VARBINARY, rsmd.getColumnType(1));
assertEquals("sysname", rsmd.getColumnTypeName(2));
assertEquals(Types.VARCHAR, rsmd.getColumnType(2));
}
/**
* Test Sybase ASE 15+ misc data type metadata.
* @throws Exception
*/
public void testResultSetMetaData4() throws Exception {
if (!isVersion15orHigher()) {
return;
}
Statement stmt = con.createStatement();
stmt.execute("CREATE TABLE #TEST (s longsysname)");
ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST");
ResultSetMetaData rsmd = rs.getMetaData();
assertEquals("longsysname", rsmd.getColumnTypeName(1));
assertEquals(Types.VARCHAR, rsmd.getColumnType(1));
}
private boolean isVersion12orHigher() throws Exception
{
if (con.getMetaData().
getDatabaseProductVersion().startsWith("1.")) {
// 11.03 or 10.0
return false;
}
return Integer.parseInt(con.getMetaData().
getDatabaseProductVersion().substring(0,2)) >= 12;
}
private boolean isVersion15orHigher() throws Exception
{
if (con.getMetaData().
getDatabaseProductVersion().startsWith("1.")) {
// 11.03 or 10.0
return false;
}
return Integer.parseInt(con.getMetaData().
getDatabaseProductVersion().substring(0,2)) >= 15;
}
public static void main(String[] args) {
junit.textui.TestRunner.run(Tds5Test.class);
}
}