<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_2.dtd">
<!-- this schema is used to test problems users reported -->

<database name="@DATABASE_DEFAULT@" defaultIdMethod="@DATABASE_ID_METHOD@" package="org.apache.torque.test">

  <external-schema filename="ext-schema.xml" />

  <!-- TRQS15 -->
  <table name="varchar_pk">
    <column name="test_key" required="true" primaryKey="true" type="VARCHAR" size="30" />
  </table>

  <!-- TRQS17 -->
  <table name="timestamp_pk">
    <column name="test_key" required="true" primaryKey="true" type="TIMESTAMP" />
    <column name="col_a" type="TIMESTAMP" />
    <!-- TRQS28 -->
    <column name="col_b" type="BOOLEANINT" javaType="object" />
    <column name="col_c" type="BOOLEANCHAR" javaType="object" />
    <!-- TRQ2 -->
    <column name="remote" type="CHAR" size="10"/>
  </table>

  <!-- TRQ12 with multiple pks, combo key parse fails -->
  <table name="multi_pk" idMethod="none">
    <column name="pk1" required="true" primaryKey="true" type="VARCHAR" size="30" />
    <column name="pk2" required="true" primaryKey="true" type="INTEGER" />
    <column name="pk3" required="true" primaryKey="true" type="CHAR" size="5" />
    <column name="col_a" type="BOOLEANINT" />
    <column name="col_b" type="BOOLEANINT" javaType="object" />
  </table>

  <!-- TRQS77 -->
  <table name="course">
    <column name="id" required="true" primaryKey="true" type="INTEGER" />
    <column name="col_a" type="CHAR" size="5" />
  </table>

  <table name="course_number" description="Number for a course">
    <column name="course_id" required="true" type="INTEGER"/>
    <column name="course_num" required="true" type="INTEGER"/>

    <foreign-key foreignTable="course"
     onDelete="cascade" onUpdate="cascade">
      <reference local="course_id" foreign="id"/>
    </foreign-key>
  </table>

  <table name="course_number1" description="Number for a course">
    <column name="course_num" required="true" type="INTEGER"/>
    <column name="course_id" required="true" type="INTEGER"/>

    <foreign-key foreignTable="course"
     onDelete="cascade" onUpdate="cascade">
      <reference local="course_id" foreign="id"/>
    </foreign-key>
  </table>

  <!-- reference to external schema -->
  <table name="ext_schema">
    <column name="ext_schema_id" required="true" primaryKey="true" type="INTEGER"/>
    <column name="ext_id" type="INTEGER"/>
    <column name="test" required="true" type="INTEGER"/>

    <index name="index_ext_id">
      <index-column name="ext_id"/>
    </index>
    <foreign-key foreignTable="ext">
      <reference local="ext_id" foreign="ext_id"/>
    </foreign-key>
  </table>

  <table name="extext_schema">
    <column name="extext_schema_id" required="true" primaryKey="true" type="INTEGER"/>
    <column name="extext_id" type="INTEGER"/>
    <column name="test" required="true" type="INTEGER"/>

    <foreign-key foreignTable="extext">
      <reference local="extext_id" foreign="extext_id"/>
    </foreign-key>
  </table>

  <!-- TRQS118 primary key of type FLOAT -->
  <table name="float_pk">
    <column name="test_key" required="true" primaryKey="true" type="FLOAT" />
  </table>

  <!-- TRQS143 Generated OM will not compile if table name is Base -->
  <table name="BASE" javaName="BaseTable">
    <column name="BASE_ID_CODE" primaryKey="true" required="true"
            size="22" type="DECIMAL" javaName="Id"/>
    <column name="BASE_NAME" size="100" type="VARCHAR" javaName="Title"/>
    <column name="BASE_STATE_CODE" size="2" type="VARCHAR"/>
    <column name="BASE_ZIP_CODE" size="10" type="VARCHAR"/>
    <column name="DATA_MODIFIED_ID_CODE" size="22" type="DECIMAL"/>
    <column name="DATA_MODIFIED_DATE" type="TIMESTAMP"/>
    <column name="DATA_CREATOR_ID_CODE" size="22" type="DECIMAL"/>
    <column name="DATA_CREATOR_DATE" type="TIMESTAMP"/>
    <column name="DATA_TRANSFER_CODE" size="1" type="VARCHAR"/>
    <column name="BASE_ADDRESS_TEXT" size="2000" type="LONGVARCHAR"/>
    <column name="BASE_TYPE_TEXT" size="100" type="VARCHAR"/>
    <column name="START_DATE" type="TIMESTAMP"/>
    <column name="END_DATE" type="TIMESTAMP"/>
  </table>

  <!-- test for hypersonic -->
  <table name="NATIVE_TEST">
    <column name="NATIVE_ID" required="true" primaryKey="true" type="INTEGER" autoIncrement="true"/>
    <column name="NAME" type="VARCHAR" size="250"/>
  </table>
  <table name="NATIVE_REF_TEST">
    <column name="NATIVE_ID" required="true" primaryKey="true" type="INTEGER" autoIncrement="true"/>
    <column name="NAME" type="VARCHAR" size="250"/>
    <column name="FK_ID" required="true" type="INTEGER"/>
  </table>

  <!-- TRQS159 Invalid syntaxes for Hypersonic when using indexes. -->
  <table name="payment_invoice_map"
         description="maps the many-to-many relationship between payments and invoices">
    <column name="payment_id" required="false" type="INTEGER"/>
    <column name="invoice_id" required="false" type="INTEGER"/>

    <index name="ix_uq_payment_invoice_map_pa_in">
      <index-column name="payment_id"/>
      <index-column name="invoice_id"/>
    </index>
  </table>

  <!-- test for autoincrement -->
  <table name="AUTOINCREMENT_NATIVE" idMethod="native">
    <column name="AUTOINCREMENT_NATIVE_ID" required="true" primaryKey="true" type="INTEGER" autoIncrement="true"/>
    <column name="NAME" type="VARCHAR" size="250"/>
  </table>
  <table name="AUTOINCREMENT_NONE" idMethod="none">
    <column name="AUTOINCREMENT_NONE_ID" required="true" primaryKey="true" type="INTEGER" autoIncrement="true"/>
    <column name="NAME" type="VARCHAR" size="250"/>
  </table>
  <table name="AUTOINCREMENT_IDBROKER" idMethod="idbroker">
    <column name="AUTOINCREMENT_IDBROKER_ID" required="true" primaryKey="true" type="INTEGER" autoIncrement="true"/>
    <column name="NAME" type="VARCHAR" size="250"/>
  </table>

  <!-- TRQS87  -->
<!--
  <table name="reserved_words">
    <column name="reserved_words_id" required="false" type="INTEGER"/>
    <column name="class" javaName="JavaClass" required="false" type="VARCHAR"/>
    <column name="package" javaName="JavaPackage" required="false" type="VARCHAR"/>
  </table>
-->

  <!-- BOOLEANCHAR not working? -->
  <table name="boolean_check" idMethod="none">
    <column name="test_key" required="true" primaryKey="true" type="CHAR" size="10" />
    <column name="bint_value" required="true" type="BOOLEANINT" />
    <column name="bchar_value" required="true" type="BOOLEANCHAR" />
  </table>

  <!-- TRQS97 -->
  <table name="LEAGUES_OBJECT" description="Contains all leagues">
    <column name="LEAGUEID" primaryKey="true" required="true" type="TINYINT" javaType="object"/>
    <column name="LEAGUENAME" required="false" size="100" type="VARCHAR"/>
    <column name="LEAGUEYEAR" required="false" type="INTEGER" javaType="object"/>
    <column name="LEAGUESCORETYPE" required="false" type="SMALLINT" default="0" javaType="object"/>
  </table>

  <table name="LEAGUES_PRIMITIVE" description="Contains all leagues">
    <column name="LEAGUEID" primaryKey="true" required="true" type="TINYINT" javaType="primitive"/>
    <column name="LEAGUENAME" required="false" size="100" type="VARCHAR"/>
    <column name="LEAGUEYEAR" required="false" type="INTEGER" javaType="primitive"/>
    <column name="LEAGUESCORETYPE" required="false" type="SMALLINT" default="0" javaType="primitive"/>
  </table>

  <!-- test primary keys which are foreign keys as well -->
  <table name="multi_pk_foreign_key" idMethod="none">
    <column name="id" primaryKey="true" required="true" type="INTEGER" />
    <column name="integer_pk_id" primaryKey="true" required="true" type="INTEGER"/>
    <column name="name" size="100" type="VARCHAR"/>

    <foreign-key foreignTable="integer_pk">
      <reference local="integer_pk_id" foreign="id"/>
    </foreign-key>
  </table>

  <table name="integer_pk">
    <column name="id" type="INTEGER" primaryKey="true" required="true"/>
    <column name="name" size="100" type="VARCHAR"/>
  </table>

  <table name="bit_test" idMethod="none">
    <column name="id" required="true" primaryKey="true" type="CHAR" size="10" />
    <column name="bit_value" required="true" type="BIT" />
  </table>

  <table name="blob_test">
    <column name="id" required="true" primaryKey="true" type="BIGINT" />
    <column name="blob_value" type="BLOB" required="false"/>
  </table>

  <table name="clob_test">
    <column name="id" required="true" primaryKey="true" type="INTEGER" />
    <column name="clob_value" type="CLOB" required="false"/>
  </table>

  <!-- TRQS263 -->
  <table name="DATE_TEST" description="Table to test Date formats">
    <column
      name="DATE_TEST_ID"
      required="true"
      primaryKey="true"
      type="INTEGER"
    />
    <column
      name="DATE_VALUE"
      required="true"
      type="DATE"
    />
    <column
      name="TIME_VALUE"
      required="true"
      type="TIME"
    />
    <column
      name="TIMESTAMP_VALUE"
      required="true"
      type="TIMESTAMP"
    />
  </table>


  <table name="INHERITANCE_TEST" description="Table to test inheritance">
    <column
      name="INHERITANCE_TEST"
      required="true"
      primaryKey="true"
      type="INTEGER"
    />
    <column
      name="CLASS_NAME"
      inheritance="single"
      type="CHAR"
      size="1">
      <inheritance
        key="B"
        class="InheritanceChildB"
        extends="org.apache.torque.test.InheritanceTest"
      />
      <inheritance
        key="C"
        class="InheritanceChildC"
        extends="org.apache.torque.test.InheritanceTest"
      />
      <inheritance
        key="D"
        class="InheritanceChildD"
        extends="org.apache.torque.test.InheritanceChildC"
      />
    </column>
    <column
      name="PAYLOAD_PARENT"
      required="true"
      type="VARCHAR"
      size="100"
      protected="false"
     />
    <column
      name="PAYLOAD_B"
      type="VARCHAR"
      size="100"
      protected="true"
    />
    <column
      name="PAYLOAD_C"
      type="VARCHAR"
      size="100"
    />
    <column
      name="PAYLOAD_D"
      type="VARCHAR"
      size="100"
    />
  </table>


  <table name="LARGE_PK" idMethod="none" description="Table to test large Primary keys">
    <column
      name="LARGE_PK_ID"
      required="true"
      primaryKey="true"
      type="BIGINT"
    />
    <column
      name="NAME"
      type="VARCHAR"
      size="100"
      required="false"
    />
  </table>

  <table name="SCALE_TEST" idMethod="none" description="Table to test scale attribute">
    <column
      name="SCALE_TEST_ID"
      required="true"
      primaryKey="true"
      type="BIGINT"
    />
    <column
      name="NUMERIC_1"
      type="NUMERIC"
      size="10"
      scale="2"
      required="false"
    />
  </table>

  <table name="CIRCULAR_REFERENCE_A" description="Table to test circular references">
    <column
      name="CIRCULAR_REFERENCE_A_ID"
      required="true"
      primaryKey="true"
      type="INTEGER"
    />
    <column
      name="CIRCULAR_REFERENCE_B_ID"
      type="INTEGER"
      required="false"
    />
    <foreign-key foreignTable="CIRCULAR_REFERENCE_B">
      <reference 
        local="CIRCULAR_REFERENCE_B_ID" 
        foreign="CIRCULAR_REFERENCE_B_ID"/>
    </foreign-key>
  </table>
  
  <table name="CIRCULAR_REFERENCE_B" description="Table to test circular references">
    <column
      name="CIRCULAR_REFERENCE_B_ID"
      required="true"
      primaryKey="true"
      type="INTEGER"
    />
    <column
      name="CIRCULAR_REFERENCE_A_ID"
      type="INTEGER"
      required="false"
    />
    <foreign-key foreignTable="CIRCULAR_REFERENCE_A">
      <reference 
        local="CIRCULAR_REFERENCE_A_ID" 
        foreign="CIRCULAR_REFERENCE_A_ID"/>
    </foreign-key>
  </table>

  <!-- Torque OM generated code did not compile if bean generation is activated and a table references an other table several times -->
  <table name="referenced" javaName="Referenced" description="Table referenced by several columns of an other table">
    <column name="referenced_pk" javaName="referencedPK" required="true" primaryKey="true" type="VARCHAR" size="12"/>
    <column name="other_information" javaName="otherInformation" type="VARCHAR" size="255"/>
  </table>

  <table name="multi_ref_same_table"  description="Table to test multi references to a same table">
    <column name="multi_ref_same_table_pk" required="true" primaryKey="true" type="VARCHAR" size="12"/>
    <column name="an_information" required="true" type="VARCHAR" size="128"/>
    <column name="reference_1" type="VARCHAR" size="12"/>
    <column name="reference_2" type="VARCHAR" size="12"/>
    <column name="reference_3" type="VARCHAR" size="12"/>
    <foreign-key foreignTable="referenced">
      <reference local="reference_1" foreign="referenced_pk"/>
    </foreign-key>
    <foreign-key foreignTable="referenced">
      <reference local="reference_2" foreign="referenced_pk"/>
    </foreign-key>
    <foreign-key foreignTable="referenced">
      <reference local="reference_3" foreign="referenced_pk"/>
    </foreign-key>
  </table>

<!-- Table for use by Database Map tests -->  
  <table name="Not_Used_Before_Map_Init" javaName="UninitializedTable"
  		 description="A table description">
    <column name="id" required="true" primaryKey="true" type="INTEGER" 
    		description="id column" autoIncrement="true" />
    <column name="one" required="true" type="VARCHAR" size="50" default="unknown" protected="true"/>
    <column name="two" required="true" type="VARCHAR" size="50" />
    <column name="three" required="true" type="INTEGER"/>
    <column name="CLASS_NAME" inheritance="single" type="CHAR" size="1">
      <inheritance key="B" class="MapInheritanceChildB" extends="org.apache.torque.test.UninitializedTable"/>
      <inheritance key="C" class="MapInheritanceChildC" extends="org.apache.torque.test.UninitializedTable"/>
      <inheritance key="D" class="MapInheritanceChildD" extends="org.apache.torque.test.MapInheritanceChildC"/>
    </column>
    <foreign-key foreignTable="CIRCULAR_REFERENCE_A">
      <reference 
        local="three" 
        foreign="CIRCULAR_REFERENCE_A_ID"/>
    </foreign-key>
  </table>
  <table name="After_NotUsedBeforeMapInit" javaName="AfterNotUsedBeforeMapInit">
    <column name="id" required="true" primaryKey="true" type="INTEGER" 
    		description="id column" autoIncrement="true"/>
  </table>

<!-- Used by TestOMSetByName but can be used to test all types as needed. 
     Modified from Generator domaintest-schema.xml -->  

  <table name="types_object" description="used to test the handling for all supported types">
    <column name="o_bit" type="BIT" javaType="object" />
    <column name="o_tinyint" type="TINYINT" javaType="object" />
    <column name="o_smallint" type="SMALLINT" javaType="object" />
    <column name="o_bigint" type="BIGINT" javaType="object" />
    <column name="o_float" type="FLOAT" javaType="object" />
    <column name="o_real" type="REAL" javaType="object" />
    <column name="o_numeric" type="NUMERIC" javaType="object" />
    <column name="o_decimal" type="DECIMAL" javaType="object" />
    <column name="o_char" type="CHAR" javaType="object" />
    <column name="o_varchar" type="VARCHAR" size="255" javaType="object" />
    <column name="o_longvarchar" type="LONGVARCHAR" javaType="object" />
    <column name="o_date" type="DATE" javaType="object" />
    <column name="o_time" type="TIME"  javaType="object"/>
    <column name="o_integer" type="INTEGER"  javaType="object"/>
    <column name="o_timestamp" type="TIMESTAMP"  javaType="object"/>
    <column name="o_binary" type="BINARY"  javaType="object"/>
    <column name="o_varbinary" type="VARBINARY"  javaType="object"/>
    <column name="o_longvarbinary" type="LONGVARBINARY" javaType="object"  />
    <column name="o_blob" type="BLOB" javaType="object" />
    <column name="o_clob" type="CLOB" javaType="object" />
    <column name="o_booleanint" type="BOOLEANINT" javaType="object" />
    <column name="o_booleanchar" type="BOOLEANCHAR" javaType="object" />
    <column name="o_double" type="DOUBLE" javaType="object" />

<!--
Column.getJavaObject() not implimented for these types, so skipping them for now

    <column name="cnull" type="NULL" />
    <column name="cother" type="OTHER" />
    <column name="cjavaobject" type="JAVA_OBJECT" />
    <column name="cdistinct" type="DISTINCT" />
    <column name="cstruct" type="STRUCT" />
    <column name="carray" type="ARRAY" />
    <column name="cref" type="REF" />
-->
  </table>

<!--  Primitive types in separate table to keep row size from exceeding limits -->
  <table name="types_primitive" description="used to test the handling for all supported types">
    <column name="p_bit" type="BIT" javaType="primitive" />
    <column name="p_tinyint" type="TINYINT" javaType="primitive" />
    <column name="p_smallint" type="SMALLINT" javaType="primitive" />
    <column name="p_bigint" type="BIGINT" javaType="primitive" />
    <column name="p_float" type="FLOAT" javaType="primitive" />
    <column name="p_real" type="REAL" javaType="primitive" />
    <column name="p_numeric" type="NUMERIC" javaType="primitive" />
    <column name="p_decimal" type="DECIMAL" javaType="primitive" />
    <column name="p_char" type="CHAR" javaType="primitive" />
    <column name="p_varchar" type="VARCHAR" size="255" javaType="primitive" />
    <column name="p_longvarchar" type="LONGVARCHAR" javaType="primitive" />
    <column name="p_date" type="DATE" javaType="primitive" />
    <column name="p_time" type="TIME"  javaType="primitive"/>
    <column name="p_integer" type="INTEGER"  javaType="primitive"/>
    <column name="p_timestamp" type="TIMESTAMP"  javaType="primitive"/>
    <column name="p_binary" type="BINARY"  javaType="primitive"/>
    <column name="p_varbinary" type="VARBINARY"  javaType="primitive"/>
    <column name="p_longvarbinary" type="LONGVARBINARY" javaType="primitive"  />
    <column name="p_blob" type="BLOB" javaType="primitive" />
    <column name="p_clob" type="CLOB" javaType="primitive" />
    <column name="p_booleanint" type="BOOLEANINT" javaType="primitive" />
    <column name="p_booleanchar" type="BOOLEANCHAR" javaType="primitive" />
    <column name="p_double" type="DOUBLE" javaType="primitive" />
  </table>
  
  <!--  Table to test SummaryHelper class  -->
  <table name="summarize1" description="Test table for summaryHelper class" >
    <column name="id" required="true" primaryKey="true" type="INTEGER" 
            description="id column" autoIncrement="true" />
    <column name="group_by1" type="VARCHAR" javaType="primitive" size="100" />
    <column name="group_by2" type="VARCHAR" javaType="primitive" size="100" />
    <column name="int_1" type="INTEGER" javaType="primitive" />
    <column name="float1" type="FLOAT" javaType="primitive" />
    <column name="type" type="INTEGER" javaType="primitive" />
  </table>
  
</database>
