#
# 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.
#

# Configuration for the Drill Metastore.
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md for more information.

drill.metastore: {
  # For Drill Iceberg Metastore use: org.apache.drill.metastore.iceberg.IcebergMetastore
  # For Drill Mongo Metastore use: org.apache.drill.metastore.mongo.MongoMetastore
  implementation.class: "org.apache.drill.metastore.rdbms.RdbmsMetastore",

  # If implementation class is RdbmsMetastore and no data source config is indicated,
  # file based embedded SQLine database will be used, can be used only for Drill in embedded mode.

  # For distriubuted mode, indicate data source details to the database accessible for all drillbits.
  rdbms: {
    # Connection details to the Drill Metastore database (PostgreSQL, MySQL)
    data_source: {
      # Note: driver must be inluded into Drill classpath before Drill start up
      # driver: "org.postgresql.Driver",
      # url: "jdbc:postgresql://localhost:1234/mydb?currentSchema=drill_metastore",
      # username: "user",
      # password: "password",
      properties: {
        # List of Hikari properties: https://github.com/brettwooldridge/HikariCP
        # maxIdle : 8
      }
    }
  }

  iceberg: {
    # File system config can be specified
    config.properties: {
      # Iceberg tables location will be created under default file system
      # taken from Hadoop configuration unless the below property is set
      # fs.defaultFS: "file:///"
    }

    # Iceberg Metastore location is constructed based on
    # combination of base_path and relative_path config values
    location: {
      # Iceberg table base path, if not indicated, user home directory will be used
      # base_path: "/app",

      # Iceberg table relative path unique among clusters
      # ${drill.exec.zk.root} value will be substituted from Drill main config
      # relative_path: ${drill.exec.zk.root}"/metastore/iceberg"
    }
  }

  mongo: {
    # connection: "mongodb://localhost:27017",
    # database: "meta",
    # table_collection: "tables"
  }
}
