Author: tomdz Date: Tue Feb 20 22:41:14 2007 New Revision: 509917 URL: http://svn.apache.org/viewvc?view=rev&rev=509917 Log: Fixed bugs for Sybase
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java?view=diff&rev=509917&r1=509916&r2=509917 ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java Tue Feb 20 22:41:14 2007 @@ -127,6 +127,11 @@ if ((tableOfColumn != null) && (tableOfColumn.length() > 0)) { + // jConnect might return a table name enclosed in quotes + if (tableOfColumn.startsWith("\"") && tableOfColumn.endsWith("\"") && (tableOfColumn.length() > 1)) + { + tableOfColumn = tableOfColumn.substring(1, tableOfColumn.length() - 1); + } // the JDBC driver gave us enough meta data info table = model.findTable(tableOfColumn, _caseSensitive); } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java?view=diff&rev=509917&r1=509916&r2=509917 ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java Tue Feb 20 22:41:14 2007 @@ -193,7 +193,6 @@ { StringBuffer result = new StringBuffer(); - result.append(getQuotationOnStatement()); result.append("SET IDENTITY_INSERT "); result.append(getDelimitedIdentifier(getTableName(table))); result.append(" ON"); @@ -211,7 +210,6 @@ { StringBuffer result = new StringBuffer(); - result.append(getQuotationOnStatement()); result.append("SET IDENTITY_INSERT "); result.append(getDelimitedIdentifier(getTableName(table))); result.append(" OFF"); @@ -224,7 +222,7 @@ * * @return The quotation-on statement */ - private String getQuotationOnStatement() + protected String getQuotationOnStatement() { if (getPlatform().isDelimitedIdentifierModeOn()) { Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java?view=diff&rev=509917&r1=509916&r2=509917 ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybasePlatform.java Tue Feb 20 22:41:14 2007 @@ -147,7 +147,7 @@ { boolean useIdx = (columnName == null); - if (jdbcType == Types.LONGVARBINARY) + if ((jdbcType == Types.LONGVARBINARY) || (jdbcType == Types.BLOB)) { InputStream stream = useIdx ? resultSet.getBinaryStream(columnIdx) : resultSet.getBinaryStream(columnName); @@ -197,18 +197,23 @@ */ protected void setStatementParameterValue(PreparedStatement statement, int sqlIndex, int typeCode, Object value) throws SQLException { - if ((value instanceof byte[]) && ((typeCode == Types.LONGVARBINARY) || (typeCode == Types.BLOB))) - { - byte[] data = (byte[])value; - - statement.setBinaryStream(sqlIndex, new ByteArrayInputStream(data), data.length); - } - else if (typeCode == Types.BLOB) - { - // Sybase doesn't like the BLOB type, but works without problems with LONGVARBINARY - // even when using the Blob class - super.setStatementParameterValue(statement, sqlIndex, Types.LONGVARBINARY, value); - } + if ((typeCode == Types.BLOB) || (typeCode == Types.LONGVARBINARY)) + { + // jConnect doesn't like the BLOB type, but works without problems with LONGVARBINARY + // even when using the Blob class + if (value instanceof byte[]) + { + byte[] data = (byte[])value; + + statement.setBinaryStream(sqlIndex, new ByteArrayInputStream(data), data.length); + } + else + { + // Sybase doesn't like the BLOB type, but works without problems with LONGVARBINARY + // even when using the Blob class + super.setStatementParameterValue(statement, sqlIndex, Types.LONGVARBINARY, value); + } + } else if (typeCode == Types.CLOB) { // Same for CLOB and LONGVARCHAR @@ -277,9 +282,17 @@ { if (useIdentityOverrideFor(table)) { - SybaseBuilder builder = (SybaseBuilder)getSqlBuilder(); - - connection.createStatement().execute(builder.getEnableIdentityOverrideSql(table)); + SybaseBuilder builder = (SybaseBuilder)getSqlBuilder(); + String quotationOn = builder.getQuotationOnStatement(); + String identityInsertOn = builder.getEnableIdentityOverrideSql(table); + Statement stmt = connection.createStatement(); + + if (quotationOn.length() > 0) + { + stmt.execute(quotationOn); + } + stmt.execute(identityInsertOn); + stmt.close(); } } @@ -290,9 +303,17 @@ { if (useIdentityOverrideFor(table)) { - SybaseBuilder builder = (SybaseBuilder)getSqlBuilder(); - - connection.createStatement().execute(builder.getDisableIdentityOverrideSql(table)); + SybaseBuilder builder = (SybaseBuilder)getSqlBuilder(); + String quotationOn = builder.getQuotationOnStatement(); + String identityInsertOff = builder.getDisableIdentityOverrideSql(table); + Statement stmt = connection.createStatement(); + + if (quotationOn.length() > 0) + { + stmt.execute(quotationOn); + } + stmt.execute(identityInsertOff); + stmt.close(); } }