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

# This file customizes SqlLine application.
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md for more information.

drill.sqlline {
  info_message_template: "Apache Drill %s%n\"%s\"",
  quotes: [
    "Start your SQL engine.",
    "This isn't your grandfather's SQL.",
    "A little SQL for your NoSQL.",
    "JSON ain't no thang.",
    "Drill, baby, Drill.",
    "Just Drill It.",
    "Say hello to my little Drill.",
    "What ever the mind of man can conceive and believe, Drill can query.",
    "The only truly happy people are children, the creative minority and Drill users.",
    "A Drill is a terrible thing to waste.",
    "Got Drill?",
    "A Drill in the hand is better than two in the bush.",
    "Drill never goes out of style.",
    "Everything is easier with Drill.",
    "You told me to, Drill Sergeant!",
    "You're gonna need a bigger Drill.",
    "Keep your data close, but your Drillbits closer.",
    "Let's Drill something more solid than concrete.",
    "Drill must go on.",
    "In Drill We Trust.",
    "Two things are infinite: the universe and Drill; and I'm not sure about the universe.",
    "A query result is never late, nor is it early, it arrives precisely when it means to.",
    "Think different, think Drill.",
    "There are two types of analysts in the world: those who use Drill and those who don't.",
    "Good friends, good books and Drill cluster: this is the ideal life.",
    "Data is the new oil. Ready to Drill some?",
    "You won't meet Santa, but Drill supports Clauses.",
    "Your Drill is the Drill that will pierce the heavens."
  ],
  drivers: [
    org.apache.drill.jdbc.Driver
  ],
  connection_url_examples: [
    "jdbc:drill:drillbit=localhost",
    "jdbc:drill:zk=local"
  ],
  commands.exclude: [
    describe,
    indexes,
    primarykeys,
    exportedkeys,
    manual,
    importedkeys,
    procedures,
    typeinfo,
    dropall,
    metadata,
    nativesql,
    dbinfo,
    rehash,
    batch,
    all,
    go,
    isolation,
    autocommit,
    commit,
    rollback,
    scan,
    sql,
    call
  ],
  opts: {
    incremental: false,
    isolation: TRANSACTION_NONE,
    maxWidth: 10000,
    maxColumnWidth: 80,
    colorScheme: obsidian,
    # display null values for varchar / char / boolean as null
    nullValue: "null",
    # will ask for the credentials if there is only one specified
    connectInteractionMode: useNPTogetherOrEmpty,
    showLineNumbers: true
  },
  # display prompt as `apache drill>` or when schema is set as `apache drill (dfs.tmp)>`
  prompt.with_schema: true
}
