# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  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.  For additional information regarding
# copyright in this work, please see the NOTICE file in the top level
# directory of this distribution.


# properties that control sql script generation

# list all databases to support, separated by spaces
databases=db2 derby hsqldb mssql mysql oracle postgresql

# list all db templates to generate, separated by spaces
templates=createdb 310-to-400-migration 400-to-500-migration  \
500-to-510-migration 510-to-520-migration 520-to-610-migration
