/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.test.platformsplugin.model;
import java.sql.DatabaseMetaData;
import java.sql.Types;
import java.util.Collection;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Oracle9i adds various timestamp datatypes and an XML datatype
*/
public class Oracle9iTests extends Oracle8iTests {
public static Test suite() {
return new TestSuite(Oracle9iTests.class);
}
public Oracle9iTests(String name) {
super(name);
}
/**
* the Oracle 9.2.0.8.0 server in Ottawa
*/
protected String serverName() {
return "tlsvrdb1.ca.oracle.com";
}
protected String platformName() {
return "Oracle9i";
}
protected String expectedVersionNumber() {
return "9.2.0.8.0";
}
protected void addIgnorableTypeNamesTo(Collection adtNames) {
super.addIgnorableTypeNamesTo(adtNames);
// ignore custom time stuff...
adtNames.add("TIMESTAMP(2)");
adtNames.add("TIMESTAMP(2) WITH TIME ZONE");
adtNames.add("TIMESTAMP(2) WITH LOCAL TIME ZONE");
adtNames.add("INTERVAL YEAR(4) TO MONTH");
adtNames.add("INTERVAL DAY(3) TO SECOND(2)");
}
protected void appendColumnsToTableDDL(StringBuffer sb) {
sb.append(" TIMESTAMP_COL TIMESTAMP,"); sb.append(CR);
sb.append(" TIMESTAMP_2_COL TIMESTAMP(2),"); sb.append(CR);
sb.append(" TIMESTAMP_TZ_COL TIMESTAMP WITH TIME ZONE,"); sb.append(CR);
sb.append(" TIMESTAMP_TZ_2_COL TIMESTAMP(2) WITH TIME ZONE,"); sb.append(CR);
sb.append(" TIMESTAMP_LTZ_COL TIMESTAMP WITH LOCAL TIME ZONE,"); sb.append(CR);
sb.append(" TIMESTAMP_LTZ_2_COL TIMESTAMP(2) WITH LOCAL TIME ZONE,"); sb.append(CR);
sb.append(" INTERVAL_YEAR_COL INTERVAL YEAR TO MONTH,"); sb.append(CR);
sb.append(" INTERVAL_YEAR_4_COL INTERVAL YEAR(4) TO MONTH,"); sb.append(CR);
sb.append(" INTERVAL_DAY_COL INTERVAL DAY TO SECOND,"); sb.append(CR);
sb.append(" INTERVAL_DAY_3_COL INTERVAL DAY(3) TO SECOND(2),"); sb.append(CR);
sb.append(" XMLTYPE_COL XMLTYPE,"); sb.append(CR);
super.appendColumnsToTableDDL(sb);
}
protected int unicodeSizeFor(int size) {
return 2 * size;
}
protected int varraySize() {
return 2617;
}
protected void verifyTable(Map metaDataMap) {
// TIMESTAMP
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "DATA_TYPE", Types.TIMESTAMP);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "TYPE_NAME", "TIMESTAMP(6)");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "COLUMN_SIZE", 11);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "DECIMAL_DIGITS", 6);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_COL", "IS_NULLABLE", "YES");
// TIMESTAMP(2)
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "TYPE_NAME", "TIMESTAMP(2)");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "COLUMN_SIZE", 11);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "DECIMAL_DIGITS", 2);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_2_COL", "IS_NULLABLE", "YES");
// TIMESTAMP WITH TIME ZONE
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "DATA_TYPE", -101); // ????
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "TYPE_NAME", "TIMESTAMP(6) WITH TIME ZONE");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "COLUMN_SIZE", 13);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "DECIMAL_DIGITS", 6);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_COL", "IS_NULLABLE", "YES");
// TIMESTAMP(2) WITH TIME ZONE
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "TYPE_NAME", "TIMESTAMP(2) WITH TIME ZONE");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "COLUMN_SIZE", 13);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "DECIMAL_DIGITS", 2);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_TZ_2_COL", "IS_NULLABLE", "YES");
// TIMESTAMP WITH LOCAL TIME ZONE
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "DATA_TYPE", -102); // ????
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "TYPE_NAME", "TIMESTAMP(6) WITH LOCAL TIME ZONE");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "COLUMN_SIZE", 11);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "DECIMAL_DIGITS", 6);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_COL", "IS_NULLABLE", "YES");
// TIMESTAMP(2) WITH LOCAL TIME ZONE
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "TYPE_NAME", "TIMESTAMP(2) WITH LOCAL TIME ZONE");
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "COLUMN_SIZE", 11);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "DECIMAL_DIGITS", 2);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "TIMESTAMP_LTZ_2_COL", "IS_NULLABLE", "YES");
// INTERVAL YEAR TO MONTH
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "DATA_TYPE", -103); // ????
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "TYPE_NAME", "INTERVAL YEAR(2) TO MONTH");
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "COLUMN_SIZE", 2);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "DECIMAL_DIGITS", 0);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_COL", "IS_NULLABLE", "YES");
// INTERVAL YEAR(4) TO MONTH
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "TYPE_NAME", "INTERVAL YEAR(4) TO MONTH");
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "COLUMN_SIZE", 4);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "DECIMAL_DIGITS", 0);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_YEAR_4_COL", "IS_NULLABLE", "YES");
// INTERVAL DAY TO SECOND
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "DATA_TYPE", -104); // ????
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "TYPE_NAME", "INTERVAL DAY(2) TO SECOND(6)");
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "COLUMN_SIZE", 2);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "DECIMAL_DIGITS", 6);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_COL", "IS_NULLABLE", "YES");
// INTERVAL DAY(3) TO SECOND(2)
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "TYPE_NAME", "INTERVAL DAY(3) TO SECOND(2)");
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "COLUMN_SIZE", 3);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "DECIMAL_DIGITS", 2);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "INTERVAL_DAY_3_COL", "IS_NULLABLE", "YES");
// XMLTYPE
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "TABLE_CAT", null);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "TABLE_SCHEM", this.userName().toUpperCase());
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "TABLE_NAME", this.tableName());
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "DATA_TYPE", Types.OTHER);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "TYPE_NAME", "XMLTYPE");
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "COLUMN_SIZE", 2000);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "DECIMAL_DIGITS", null);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "NUM_PREC_RADIX", 10);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "NULLABLE", DatabaseMetaData.columnNullable);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "REMARKS", null);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "COLUMN_DEF", null);
this.verifyColumnAttribute(metaDataMap, "XMLTYPE_COL", "IS_NULLABLE", "YES");
super.verifyTable(metaDataMap);
}
}