#!/bin/bash

. zdb_constants

if [ "$#" -lt "2" -o "$#" -gt "3" ]; then
   echo "USAGE: `basename ${0}` table_one table_two [searchterm]"
   exit 1
fi

TABLE_ONE_ATTR=${ZDB_DIR}/${1}.def
TABLE_ONE_DATA=${ZDB_DIR}/${1}.dat
TABLE_TWO_ATTR=${ZDB_DIR}/${2}.def
TABLE_TWO_DATA=${ZDB_DIR}/${2}.dat

if [ ! -e "${TABLE_ONE_ATTR}" ]; then
   echo "Error, table ${1} is undefined"
   exit 1
fi
if [ ! -e "${TABLE_TWO_ATTR}" ]; then
   echo "Error, table ${2} is undefined"
   exit 1
fi

TEMP_HEADER=${ZDB_DIR}/$$.tmp

# print header row from each table
while read line
do
   echo -ne "$line\t"
done < ${TABLE_ONE_ATTR} > ${TEMP_HEADER}

# we ignore the key, which is the first column, because
# this is removed during the join operation
counter=0
while read line
do
   (( counter = $counter + 1 ))
   if [ "$counter" -ne "1" ]; then
      echo -ne "$line\t"
   fi
done < ${TABLE_TWO_ATTR} >> ${TEMP_HEADER}

echo "" >> ${TEMP_HEADER}

TEMP_DAT_ONE=${ZDB_DIR}/$$.one.tmp
TEMP_DAT_TWO=${ZDB_DIR}/$$.two.tmp

sort -t: < ${TABLE_ONE_DATA} > ${TEMP_DAT_ONE}
sort -t: < ${TABLE_TWO_DATA} > ${TEMP_DAT_TWO}


if [ "$#" -eq "3" ]; then    # user has supplied a searchterm
   case "${3}" in
       *=*) 
            cat ${TEMP_HEADER}
	    field=$( echo "${3}" | awk -F'=' '{ print $1 }' )
            value=$( echo "${3}" | awk -F'=' '{ print $2 }' )
            field_num=$( awk -v f=$field 'BEGIN {RS="\t"} { if ( $0 ~ f ) { print NR; } }' ${TEMP_HEADER} )
	    num=$( echo $field_num | awk '{print $1}' ) # just use the first field_num - no dups
	    join -t: ${TEMP_DAT_ONE} ${TEMP_DAT_TWO} | tr ':' '\t' |\
	           awk -v f=$num -v v="$value" '{ if ( $f ~ v ) { print $0 } }'
	    ;;
       *)   cat ${TEMP_HEADER}
	    join -t: ${TEMP_DAT_ONE} ${TEMP_DAT_TWO} | tr ':' '\t' |\
              grep "${3}" ;;
   esac
else
   cat ${TEMP_HEADER}
   join -t: ${TEMP_DAT_ONE} ${TEMP_DAT_TWO} | tr ':' '\t'
fi

rm -f ${TEMP_HEADER} ${TEMP_DAT_ONE} ${TEMP_DAT_TWO}

exit 0


# Generated with sh2html - freely available from http://www.zazzybob.com/sh2html.html