blob: 7ec482d2ea12930f36f42e19249b4df67a6f29e4 [file] [log] [blame]
#!/bin/bash
# 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.
#
# add_thrift_python_namespace.sh IN_THRIFT_FILE OUT_THRIFT_FILE
#
# This script reads $IN_THRIFT_FILE and adds a python namespace
# (replacing any existing python namespace) with
# impala_thrift_gen.${BASE_NAME} where the BASE_NAME is the
# thrift filename without the ".thrift". i.e. Foo.thrift uses
# impala_thrift_gen.Foo python namespace. It writes the resulting
# thrift file to $OUT_THRIFT_FILE.
#
# This logic is taken from Impyla's impala/thrift/process_thrift.sh
# script with minor changes. This requires that the source thrift
# file have at least one preexisting non-python namespace. That is
# true for all of the Thrift files that we care about.
set -eou pipefail
THRIFT_FILE_IN=$1
THRIFT_FILE_OUT=$2
FILE_NAME=$(basename $THRIFT_FILE_IN)
BASE_NAME=${FILE_NAME%.*}
# Awk script to add the python namespace before the first namespace
# in the thrift file.
ADD_NAMESPACE_PY="
BEGIN {
n = 0
}
{
if (\$0 ~ /^namespace/ && n == 0) {
print \"namespace py impala_thrift_gen.$BASE_NAME\";
n += 1;
}
print \$0;
}"
# Remove any existing python namespace, then add our namespace
cat $THRIFT_FILE_IN | grep -v "^namespace py" | awk "$ADD_NAMESPACE_PY" > $THRIFT_FILE_OUT