#
# Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1998, 2019 IBM Corporation. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0,
# or the Eclipse Distribution License v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#

# Contributors:
#     Oracle - initial API and implementation from Oracle TopLink
#     03/02/2015-2.6.0 Dalia Abo Sheasha
#       - 461236: Running EclipseLink with Informix using a DB2 jdbc driver doesn't work
#     03/19/2015 - Rick Curtis
#       - 462586 : Add national character support for z/OS.
#     04/30/2015 - Will Dazey
#       - 465063 : Updated platform regex to match productName returned from a DB2/I connection.
#     05/22/2018 - Will Dazey
#       - 532160 : Add support for non-extension OracleXPlatform classes
#     05/06/2019 - Jody Grassel
#       - 547023 : Add LOB Locator support for core Oracle platform.

# Key-Value file containing mappings between DB product name, major version, product version and
# database platform class name.
#
# The key of the property is in the form of a java regular expression.
# At runtime, DatabaseMetaData.getDatabaseProductName() is concatenated with DatabaseMetaData.getDatabaseMajorVersion()
# and DatabaseMetaData.getDatabaseProductVersion(). That String is matched
# against the regular expression to determine which DatabasePlaform to set.
#
# This file is parsed sequentially, top to bottom; More specific regular expression
# to platform class entries should be placed before less specific entries. Each
# platform entry must be on its own line, an entry cannot span multiple lines.

(?is)oracle.*19.*=org.eclipse.persistence.platform.database.oracle.Oracle19Platform
(?is)oracle.*18.*=org.eclipse.persistence.platform.database.oracle.Oracle18Platform
(?is)oracle.*12.*=org.eclipse.persistence.platform.database.oracle.Oracle12Platform
(?is)oracle.*11.*=org.eclipse.persistence.platform.database.oracle.Oracle11Platform
(?is)oracle.*10.*=org.eclipse.persistence.platform.database.oracle.Oracle10Platform
(?is)oracle.*9.*=org.eclipse.persistence.platform.database.oracle.Oracle9Platform
(?is)core.oracle.*19.*=org.eclipse.persistence.platform.database.Oracle19Platform
(?is)core.oracle.*18.*=org.eclipse.persistence.platform.database.Oracle18Platform
(?is)core.oracle.*12.*=org.eclipse.persistence.platform.database.Oracle12Platform
(?is)core.oracle.*11.*=org.eclipse.persistence.platform.database.Oracle11Platform
(?is)core.oracle.*10.*=org.eclipse.persistence.platform.database.Oracle10Platform
(?is)core.oracle.*9.*=org.eclipse.persistence.platform.database.Oracle9Platform
(?is)oracle.*=org.eclipse.persistence.platform.database.oracle.OraclePlatform
SQL\ Anywhere.*=org.eclipse.persistence.platform.database.SQLAnywherePlatform
(?i)(sybase.*)|(adaptive\ server\ enterprise.*)|(SQL\ Server.*)=org.eclipse.persistence.platform.database.SybasePlatform
(?i)microsoft.*=org.eclipse.persistence.platform.database.SQLServerPlatform
#Use JavaDBPlatform as the platform for Derby
(?i).*derby.*=org.eclipse.persistence.platform.database.JavaDBPlatform
(?i).*db2.*dsn.*=org.eclipse.persistence.platform.database.DB2ZPlatform
(?i).*(db2|AS).*(AS/400|qsq).*=org.eclipse.persistence.platform.database.DB2MainframePlatform
(?i).*db2.*=org.eclipse.persistence.platform.database.DB2Platform
(?is)pointbase.*=org.eclipse.persistence.platform.database.PointBasePlatform
(?i)mysql.*=org.eclipse.persistence.platform.database.MySQLPlatform
(?i)(informix.*)|(ids.*)=org.eclipse.persistence.platform.database.Informix11Platform
(?is)postgresql.*=org.eclipse.persistence.platform.database.PostgreSQLPlatform
(?is)h2.*=org.eclipse.persistence.platform.database.H2Platform
(?is)hsql.*=org.eclipse.persistence.platform.database.HSQLPlatform
(?is)firebird.*=org.eclipse.persistence.platform.database.FirebirdPlatform
(?is).*symfoware.*=org.eclipse.persistence.platform.database.SymfowarePlatform
(?is)access.*=org.eclipse.persistence.platform.database.AccessPlatform
SAP\ DB.*=org.eclipse.persistence.platform.database.MaxDBPlatform
HDB.*=org.eclipse.persistence.platform.database.HANAPlatform
Pervasive\.SQL.*=org.eclipse.persistence.platform.database.PervasivePlatform

