# 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
#
#     https://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.

jdo.tck.description = Completeness test with inheritance mapping 2: \
Separate table for each class in the inheritance hierarchy. \
No tables for abstract classes. \
Each table contains columns for all fields. \
Managers, mentors, hradvisors, and employees of the month  \
are fulltime employees. \
Only fulltime employees can have insurances, can be project members, \
and can be project reviewers. \
Separate phone number type tables for persons, fulltime employees, \
and parttime employees. \
Inheritance strategy: new-table for all classes.
jdo.tck.mapping.companyfactory =
jdo.tck.classes = org.apache.jdo.tck.mapping.CompletenessTest
jdo.tck.testdata = org/apache/jdo/tck/pc/company/companyAllRelationships.xml
jdo.tck.mapping = 2
jdo.tck.requiredOptions = javax.jdo.option.mapping.NonJoinedTablePerConcreteClass \
                          javax.jdo.option.mapping.RelationSubclassTable
