#!/bin/bash
# sqlsh - Script to launch SQL shell
#
# 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.
#
# Example:
# $ ./sqlsh select \* from du order by 1 limit 3

# The script updates the classpath on each execution,
# You might use CACHE_SQLLINE_CLASSPATH=Y environment variable to cache it
# To build classpath jar manually use ./gradlew buildSqllineClasspath

# Deduce whether we are running cygwin
case $(uname -s) in
(CYGWIN*) cygwin=true;;
(*) cygwin=;;
esac

# readlink in macOS resolves only links, and it returns empty results if the path points to a file
root=$0
if [[ -L "$root" ]]; then
  root=$(readlink "$root")
fi
root=$(cd "$(dirname "$root")"; pwd)

CP=$root/build/libs/sqllineClasspath.jar

if [ "x$CACHE_SQLLINE_CLASSPATH" != "xY" ] || [ ! -f "$CP" ]; then
  $root/gradlew --console plain -q :buildSqllineClasspath
fi

VM_OPTS=
export JAVA_OPTS=-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

exec java $VM_OPTS -cp "${CP}" $JAVA_OPTS org.apache.calcite.adapter.os.SqlShell "$@"
