# 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 = All query tests with standard mapping, no testdata. 
jdo.tck.mapping.companyfactory =
jdo.tck.testdata = 
jdo.tck.standarddata = 
jdo.tck.mapping = 0
jdo.tck.requiredOptions =
jdo.tck.classes = \
org.apache.jdo.tck.query.api.AutoCloseable \
org.apache.jdo.tck.query.api.ChangeQuery \
org.apache.jdo.tck.query.api.Close \
org.apache.jdo.tck.query.api.CloseAll \
org.apache.jdo.tck.query.api.CompileQuery \
org.apache.jdo.tck.query.api.DeclareImports \
org.apache.jdo.tck.query.api.DeclareParameters \
org.apache.jdo.tck.query.api.DeclareVariables \
org.apache.jdo.tck.query.api.ExecuteQuery \
org.apache.jdo.tck.query.api.ExecuteQueryWithArray \
org.apache.jdo.tck.query.api.ExecuteQueryWithMap \
org.apache.jdo.tck.query.api.GetFetchPlan \
org.apache.jdo.tck.query.api.GetIgnoreCache \
org.apache.jdo.tck.query.api.GetPersistenceManager \
org.apache.jdo.tck.query.api.GetPersistenceManagerFromRestoredSerializedQuery \
org.apache.jdo.tck.query.api.InvalidNamedQuery \
org.apache.jdo.tck.query.api.MetadataSearchOrder \
org.apache.jdo.tck.query.api.NamedQueryNotFound \
org.apache.jdo.tck.query.api.NamedQueryRepeatableAnnotations \
org.apache.jdo.tck.query.api.NewNamedQuery \
org.apache.jdo.tck.query.api.NewQueryFromExistingQueryBoundToPMFromSameVendor \
org.apache.jdo.tck.query.api.NewQueryFromRestoredSerializedQuery \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClass \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndCollection \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndExtent \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndFilter \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassCollectionFilter \
org.apache.jdo.tck.query.api.NewQueryWithExtent \
org.apache.jdo.tck.query.api.NewQueryWithExtentAndFilter \
org.apache.jdo.tck.query.api.NewQueryWithSpecifiedLanguageAndQuery \
org.apache.jdo.tck.query.api.NewQuerySingleString \
org.apache.jdo.tck.query.api.QueryExtentions \
org.apache.jdo.tck.query.api.SampleQueries \
org.apache.jdo.tck.query.api.SaveAsNamedQuery \
org.apache.jdo.tck.query.api.SetCandidateCollection \
org.apache.jdo.tck.query.api.SetCandidateExtent \
org.apache.jdo.tck.query.api.SetFilter \
org.apache.jdo.tck.query.api.SetGrouping \
org.apache.jdo.tck.query.api.SetIgnoreCache \
org.apache.jdo.tck.query.api.SetOrdering \
org.apache.jdo.tck.query.api.SetRange \
org.apache.jdo.tck.query.api.SetResult \
org.apache.jdo.tck.query.api.SetResultClass \
org.apache.jdo.tck.query.api.SetUnique \
org.apache.jdo.tck.query.api.SetterReplacePreviousValues \
org.apache.jdo.tck.query.api.SingleStringQuery \
org.apache.jdo.tck.query.api.UnmodifiableQuery \
org.apache.jdo.tck.query.delete.DeleteCallback \
org.apache.jdo.tck.query.delete.DeletePersistentAll \
org.apache.jdo.tck.query.delete.DeleteQueryElements \
org.apache.jdo.tck.query.result.AggregateResult \
org.apache.jdo.tck.query.result.DefaultResult \
org.apache.jdo.tck.query.result.DefaultUnique \
org.apache.jdo.tck.query.result.DistinctCandidateInstances \
org.apache.jdo.tck.query.result.DistinctQuery \
org.apache.jdo.tck.query.result.Grouping \
org.apache.jdo.tck.query.result.IfElseResult \
org.apache.jdo.tck.query.result.ImmutableQueryResult \
org.apache.jdo.tck.query.result.MethodsInResult \
org.apache.jdo.tck.query.result.NPEInResultExpr \
org.apache.jdo.tck.query.result.NullResults \
org.apache.jdo.tck.query.result.ProjectedSCODoesNotTrackChanges \
org.apache.jdo.tck.query.result.ResultClassRequirements \
org.apache.jdo.tck.query.result.ResultExpressions \
org.apache.jdo.tck.query.result.ShapeOfResult \
org.apache.jdo.tck.query.result.Unique \
org.apache.jdo.tck.query.result.VariableInResult \
org.apache.jdo.tck.query.result.VariableInResultNavigation \
org.apache.jdo.tck.query.result.VariableInResultMultipleNavigation \
org.apache.jdo.tck.query.sql.ShapeOfResult \
org.apache.jdo.tck.query.sql.NoCandidateClass \
org.apache.jdo.tck.query.sql.AllowedAPIMethods \
org.apache.jdo.tck.query.sql.NewQuery \
org.apache.jdo.tck.query.sql.ExecuteWithMap
