#! /usr/bin/perl -w
# 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.
use strict;
use Data::Dumper;
my %primitive = (
  'int' => 1,
  'byte' => 1,
  'string' => 1,
  'float' => 1,
  'long' => 1,
);

sub get_hive_cols($)
{
  my $col = shift;
  my $cmd = "echo 'describe $col;' | /mnt/vol/hive/stable/bin/hive_cli.py | grep '|'";
  #print "$cmd\n";
  my @cols = `$cmd`;
  
  map { s/\|//g; s/^\s+//g; s/\s+$//g; s/\s+/ /g; } @cols;
  #print Dumper(\@cols);
  return @cols;
}

sub get_cols($$$)
{
  my ($msg, $c, $t) = @_;
  if ($primitive{lc($t)}) {
    print "$msg$t:$c\n";
    return;
  }
  elsif ($t =~ /List<(.*?)>/ and $primitive{lc($1)}) {
    print "$msg$t:$c\n";
    return;
  }
  my @cols = &get_hive_cols($c);
  die "no cols!" unless @cols;
  print "$msg$t {\n";
  foreach (@cols) {
    my ($name, $type) = split;
    $name = "$c.$name";
    &get_cols($msg."\t", $name, $type);
  }
  print "$msg}//$t\n";
}

#die "Usage: dump_schema tableName\n" unless @ARGV;
my $tablename = $ARGV[0];
$tablename = "." unless $tablename;
eval {
&get_cols("", $tablename, $tablename);
};
if ($@) {
  my $cmd = "echo show | /mnt/vol/hive/stable/bin/hive_cli.py | grep '|' | tr '|' '\\n' | awk '{print \$1}' | grep -v ^\$ | grep $tablename | sort";
  my @tables = `$cmd`;
  print @tables;
}
