blob: dc5b7f8bec1e56ce5a3905c637d4eb71171e4ef5 [file] [log] [blame]
#!/usr/bin/perl
#
# 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.
#
# SLZY_HDR_END
use POSIX;
use Pod::Usage;
use Getopt::Long;
use Data::Dumper;
use strict;
use warnings;
# SLZY_POD_HDR_BEGIN
# WARNING: DO NOT MODIFY THE FOLLOWING POD DOCUMENT:
# Generated by sleazy.pl version 6 (release Mon Aug 20 12:30:03 2012)
# Make any changes under SLZY_TOP_BEGIN/SLZY_LONG_BEGIN
=head1 NAME
B<caqluniqdef.pl> - convert uniqdef.json to external table format
=head1 VERSION
This document describes version 1 of caqluniqdef.pl, released
Tue Oct 30 15:57:43 2012.
=head1 SYNOPSIS
B<caqluniqdef.pl>
Options:
-help brief help message
-man full documentation
=head1 OPTIONS
=over 8
=item B<-help>
Print a brief help message and exits.
=item B<-man>
Prints the manual page and exits.
=back
=head1 DESCRIPTION
caqluniqdef.pl reads the calico.pl uniqdef.json doc and outputs a "|"
delimited flat file, suitable for input as an external table.
=head2 Usage
CREATE EXTERNAL TABLE
EXT_uniqdef (
uniq_qry text,
bcount integer,
bdelete integer,
binsert integer,
bupdate integer,
basequery_code integer,
base_qry text,
colnum char(64),
cql char(6),
tablename char(64),
uniqquery_code integer)
location ('file://some/file/location' )
FORMAT 'text' (delimiter '|');
=head1 AUTHORS
Apache HAWQ
Address bug reports and comments to: dev@hawq.apache.org
=cut
# SLZY_POD_HDR_END
# SLZY_GLOB_BEGIN
my $glob_id;
my $glob_glob;
# SLZY_GLOB_END
# stub for global validation function
sub glob_validate
{
# look for JSON on normal path, but if it isn't there, add the
# directory containing this script and look for it there...
unless (eval "require JSON")
{
use FindBin qw($Bin);
use lib "$Bin";
unless (eval "require JSON")
{
die("Fatal Error: The required package JSON is not installed -- please download it from www.cpan.org\n");
exit(1);
}
}
}
# SLZY_CMDLINE_BEGIN
# WARNING: DO NOT MODIFY THE FOLLOWING SECTION:
# Generated by sleazy.pl version 6 (release Mon Aug 20 12:30:03 2012)
# Make any changes under SLZY_TOP_BEGIN/SLZY_LONG_BEGIN
# Any additional validation logic belongs in glob_validate()
BEGIN {
my $s_help = 0; # brief help message
my $s_man = 0; # full documentation
my $slzy_argv_str;
$slzy_argv_str = quotemeta(join(" ", @ARGV))
if (scalar(@ARGV));
GetOptions(
'help|?' => \$s_help,
'man' => \$s_man,
)
or pod2usage(2);
pod2usage(-msg => $glob_id, -exitstatus => 1) if $s_help;
pod2usage(-msg => $glob_id, -exitstatus => 0, -verbose => 2) if $s_man;
$glob_glob = {};
# version and properties from json definition
$glob_glob->{_sleazy_properties} = {};
$glob_glob->{_sleazy_properties}->{version} = '1';
$glob_glob->{_sleazy_properties}->{slzy_date} = '1351637863';
$glob_glob->{_sleazy_properties}->{slzy_argv_str} = $slzy_argv_str;
glob_validate();
}
# SLZY_CMDLINE_END
# SLZY_TOP_BEGIN
if (0)
{
my $bigstr = <<'EOF_bigstr';
{
"args" : [
{
"alias" : "?",
"long" : "Print a brief help message and exits.",
"name" : "help",
"required" : "0",
"short" : "brief help message",
"type" : "untyped"
},
{
"long" : "Prints the manual page and exits.",
"name" : "man",
"required" : "0",
"short" : "full documentation",
"type" : "untyped"
}
],
"long" : "$toplong",
"properties" : {
"slzy_date" : 1351637863
},
"short" : "convert uniqdef.json to external table format",
"version" : "1"
}
EOF_bigstr
}
# SLZY_TOP_END
# SLZY_LONG_BEGIN
if (0)
{
# Construct a series of "Here" documents to contain formatted long
# strings for the JSON document.
my $toplong = <<'EOF_longstr';
caqluniqdef.pl reads the calico.pl uniqdef.json doc and outputs a "|"
delimited flat file, suitable for input as an external table.
{HEAD2} Usage
CREATE EXTERNAL TABLE
EXT_uniqdef (
uniq_qry text,
bcount integer,
bdelete integer,
binsert integer,
bupdate integer,
basequery_code integer,
base_qry text,
colnum char(64),
cql char(6),
tablename char(64),
uniqquery_code integer)
location ('file://some/file/location' )
FORMAT 'text' (delimiter '|');
EOF_longstr
}
# SLZY_LONG_END
if (1)
{
my $whole_file;
{
# $$$ $$$ undefine input record separator (\n)
# and slurp entire file into variable
local $/;
undef $/;
$whole_file = <>;
}
my $bigh = JSON::from_json($whole_file);
# my $d1 = $bigh->[0];
my $d1 = $bigh;
for my $k1 (keys(%{$d1}))
{
my @foo;
push @foo, $k1,
$d1->{$k1}->{bCount},
$d1->{$k1}->{bDelete},
$d1->{$k1}->{bInsert},
$d1->{$k1}->{bUpdate},
$d1->{$k1}->{basequery_code},
$d1->{$k1}->{basic},
$d1->{$k1}->{colnum},
$d1->{$k1}->{cql},
$d1->{$k1}->{tablename},
$d1->{$k1}->{uniqquery_code};
print join('|', @foo), "\n";
}
}