#! /bin/sh
#######################################################################
# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@
#######################################################################


if [ "$1" = "-h" -o "$1" = "-help" -o "$1" = "-?" ]; then
  cat << END_HELP_TEXT

 Usage:
 $0                -- run everything (ddl, ustat, dml)
    [-help]              -- this screen
    [-cleanup]           -- cleanup directory
    [-genshape]          -- prepend CONTROL QUERY SHAPE stmt to qat* tests
                         -- and create qat*.shp test files
    [-runshape]          -- run .shp tests. Both genshape and runshape
                         -- options could be specified along with other
                         -- options
    [-ddb] [-dropdb]     -- drop qat database
    [-cdb] [-createdb]   -- create qat database
    [-ust] [-updstats]   -- update statistics
    [-dml] [-rundml]     -- run all dml queries
    [-diff]              -- do not run, only do diffs
    [-post cmdfile]      -- postprocessing file
    [<qat tests>]        -- run the specified tests

END_HELP_TEXT
  exit 0
fi

if [ "$1" = "-cleanup" ]; then
  rm -f core dumpfile *.srt *.tmp *.dif aqat* dqat?????
  exit 0
fi


createdb=0
diffsonly=0
dropdb=0
genshape=0
# nsk=0		-- commented out, since tools/runregr sets it now
post=0
rundml=0
runshape=0
updstats=0

OK=-1
while [ $OK -ne 0 ]; do

  if [ $OK -gt 0 ]; then
    shift $OK
  fi
  OK=0

  if [ "$1" = "-genshape" ]; then
    genshape=1;
    OK=1;
  fi

  if [ "$1" = "-runshape" ]; then
    runshape=1;
    OK=1;
  fi

  if [ "$1" = "-createdb" -o "$1" = "-cdb" ]; then
    createdb=1;
    OK=1
  fi

  if [ "$1" = "-dropdb" -o "$1" = "-ddb" ]; then
    dropdb=1;
    OK=1
  fi

  if [ "$1" = "-nsk" ]; then
    nsk=1;
    OK=1
  fi

  if [ "$1" = "-updstats" -o "$1" = "-ust" ]; then
    updstats=1;
    OK=1
  fi

  if [ "$1" = "-rundml" -o "$1" = "-dml" ]; then
    rundml=1;
    OK=1
  fi

  if [ "$1" = "-diff" ]; then
    diffsonly=1;
    OK=1
  fi

  if [ "$1" = "-post" ]; then
    shift
    post=$1;
    OK=1
  fi

done

# ---------------- end of parsing command line options ----------------

if [ "$REGRCONCURRENT" -eq 1 ]; then
  test_suite=${REGRBASDIR:?'REGRBASDIR is undefined'}
  export TEST_CATALOG='cat'
  export TEST_SCHEMA_NAME="$test_suite"
else
  export TEST_CATALOG='cat'
  export TEST_SCHEMA_NAME='sch'
fi

seabase=0
sbdefsfile=
if [ "$SEABASE_REGRESS" -ne 0 ]; then
  export TEST_CATALOG='TRAFODION'
  seabase="$SEABASE_REGRESS"

  if [ -r $REGRTOOLSDIR/sbdefs ]; then
     sbdefsfile="$REGRTOOLSDIR/sbdefs"
  fi
fi

export TEST_SCHEMA="$TEST_CATALOG.$TEST_SCHEMA_NAME"

export BUILD_FLAVOR=`echo $BUILD_FLAVOR | tr a-z A-Z`

cd $REGRTSTDIR 2>$NULL

testfiles=

if [ $dropdb -eq 1 ]; then
  testfiles=qatddl00
fi

if [ $createdb -eq 1 ]; then
  testfiles="qatddl??"
fi

if [ $updstats -eq 1 ]; then
  testfiles="$testfiles qatust??"
fi

if [ $rundml -eq 1 ]; then
  testfiles="$testfiles qatdml??"
fi

testfiles=`echo $testfiles $*`

if [ "$testfiles" = "" ]; then
  if [ "$seabase" -ne 0 ]; then
    #dont run upd stats tests until support for seabase tables is in
    testfiles=`echo qatddl?? qatdml??`
  else
    testfiles=`echo qatddl?? qatust?? qatdml??`
  fi
fi

echo "Tests:\n$testfiles\n"

cd $REGRRUNDIR 2>$NULL

test $diffsonly -eq 0 && mv -f $rgrlog $rgrlog.bak 2>$NULL
echo "`date +'%D %T'`" > $rgrlog

export SQL_MXCI_CASE_INSENSITIVE_LOG=lowercase

for i in $testfiles; do

  echo
  if [ $diffsonly -ne 0 ]; then
    echo "Diff for test $i"
  else
    echo "Running test $i"
  fi

  tfile=$i
  tfileshp=$REGRRUNDIR/$i.shp
  if [ `uname` = "Linux" -a -f "$REGRTSTDIR/e$i.SB" ]; then
    efile=$REGRTSTDIR/e$i.SB
  elif [ `uname` = "Linux" -a -f "$REGRTSTDIR/e$i.LINUX" ]; then
    efile=$REGRTSTDIR/e$i.LINUX
  else
    efile=$REGRTSTDIR/e$i
  fi
  efileshp=$REGRRUNDIR/e$i.shp
  afile=$REGRRUNDIR/a$i
  dfile=$REGRRUNDIR/d$i
  dfileknown=$REGRTSTDIR/d$i.known
  logtxt=

  # If this test is executing concurrently with other tests, use
  # the parallel execution expected results file if one exists.
  if [ "$REGRCONCURRENT" -eq 1 ]; then
    if [ -r "${efile}-P" ]; then
      efile="${efile}-P"
    fi
  fi

  if [ $diffsonly -eq 0 ]; then
    if [ $genshape -eq 1 ]; then
      rm -f $tfileshp 2>$NULL
      echo "set showshape infile $REGRTSTDIR/$tfile outfile $tfileshp;"
      echo "set showshape infile $REGRTSTDIR/$tfile outfile $tfileshp;" > shape.cmd
      $sqlci -ishape.cmd
      rm -f shape.cmd 2>$NULL
    else
      if [ $runshape -eq 1 ]; then
        echo "$sqlci -i$tfileshp"
        $sqlci -i$tfileshp
      else
        if [ "$REGRCONCURRENT" -eq 1 ]; then
          echo "create schema ${TEST_SCHEMA}; set schema ${TEST_SCHEMA};" \
            | cat $sbdefsfile - $REGRTSTDIR/$tfile > $tfile.tmp
        else
          cat $sbdefsfile $REGRTSTDIR/$tfile > $tfile.tmp
        fi
        echo "$sqlci -i$tfile.tmp"
        $sqlci -i$tfile.tmp
        rm -f $tfile.tmp
      fi
    fi
    # save off the LOG file for later use
    if [ $nsk -eq 1 ]; then
      if [ $SQLMX_REGRESS -eq 1 ]; then
        rm -f $afile.MX 2>$NULL
        cp $afile $afile.MX 2>$NULL
      else
        rm -f $afile.MP 2>$NULL
        cp $afile $afile.MP 2>$NULL
      fi
    fi
  fi

  # use MP or MX log file from now on
  if [ $nsk -eq 1 ]; then
    if [ $SQLMX_REGRESS -eq 1 ]; then
      afile=$afile.MX
    else
      afile=$afile.MP
    fi
  fi

  #sort expected result file
  rm -f $efile.srt 2>$NULL
  if [ $runshape -eq 1 ]; then
    echo "$LOGSORT $efile $efile.srt -i >> $NULL"
    $LOGSORT $efile $efile.srt -i >> $NULL
  else
    echo "$LOGSORT $efile $efile.srt -i >> $NULL"
    $LOGSORT $efile $efile.srt -i >> $NULL
  fi

  #sort actual result file
  rm -f $afile.srt 2>$NULL
  echo "$LOGSORT $afile $afile.srt -i >> $NULL"
  $LOGSORT $afile $afile.srt -i >> $NULL

  rm -f $dfile $efile.tmp $afile.tmp
  if [ $nsk -eq 0 ]; then
    echo "$FILTER $efile.srt > $efile.tmp 2>&1"
    echo "$FILTER $afile.srt > $afile.tmp 2>&1"
    $FILTER $efile.srt > $efile.tmp 2>&1
    $FILTER $afile.srt > $afile.tmp 2>&1

    if [ -x "$REGRTSTDIR/FILTERqat" ]; then
      echo "RUNNING SPECIAL FILTER FOR qat"
      echo "$REGRTSTDIR/FILTERqat $efile.tmp > $efile.tmp2"
      echo "$REGRTSTDIR/FILTERqat $afile.tmp > $afile.tmp2"
      $REGRTSTDIR/FILTERqat $efile.tmp > $efile.tmp2
      $REGRTSTDIR/FILTERqat $afile.tmp > $afile.tmp2
    else
      cp -f $efile.tmp $efile.tmp2
      cp -f $afile.tmp $afile.tmp2
    fi

    echo "diff $efile.tmp2 $afile.tmp2 >> $dfile"
    if [ -z "$DUMA_FILL" ] ; then
      diff $efile.tmp2 $afile.tmp2 >> $dfile 2>&1
    else
      diff $efile.tmp2 $afile.tmp2 >> $dfile 2>/dev/null
    fi
  else
    if [ -x "$REGRTSTDIR/FILTERqat" ]; then
      echo "RUNNING SPECIAL FILTER FOR qat"
      echo "$REGRTSTDIR/FILTERqat $efile.srt > $efile.tmp2"
      echo "$REGRTSTDIR/FILTERqat $afile.srt > $afile.tmp2"
      $REGRTSTDIR/FILTERqat $efile.srt > $efile.tmp2
      $REGRTSTDIR/FILTERqat $afile.srt > $afile.tmp2
    else
      cp -f $efile.srt $efile.tmp2
      cp -f $afile.srt $afile.tmp2
    fi

    echo "diff $efile.tmp2 $afile.tmp2 >> $dfile"
    if [ -z "$DUMA_FILL" ] ; then
      diff $efile.tmp2 $afile.tmp2 >> $dfile 2>&1
    else
      diff $efile.tmp2 $afile.tmp2 >> $dfile 2>/dev/null
    fi
  fi
#  rm -f $efile.tmp $afile.tmp $efile.tmp2 $afile.tmp2

  diffsize=`wc -l $dfile`; diffsize=`echo $diffsize | cut -f1 -d' '`

  #----------------------------------------------------------------
  #  Capture filtered files                              --
  #----------------------------------------------------------------
      echo "cp $afile.tmp2 $FilteredLogs/logfiles/$(basename $afile)"
      cp $afile.tmp2 $FilteredLogs/logfiles/$(basename $afile)
      echo "cp $efile.tmp2 $FilteredLogs/expfiles/$(basename $afile)"
      cp $efile.tmp2 $FilteredLogs/expfiles/$(basename $afile)

  # diff the diff and the diff.known files.
  if [ -r "$dfileknown" ]; then
    # Filter known diff file to avoid schema differences
    knownfiltered="$(basename $dfileknown).flt"
    $FILTER $dfileknown > $knownfiltered 2>&1
    dfileknown="$knownfiltered"
  fi
  rm -f $dfile.dif
  diff $dfile $dfileknown >> $dfile.dif 2>&1
  diffofdiffsize=`wc -l $dfile.dif`; diffofdiffsize=`echo $diffofdiffsize | cut -f1 -d' '`
  rm -f $dfile.dif

  #print result
  if [ $diffsize -eq 0 -o $diffofdiffsize -eq 0 ]; then
    if [ $diffsize -eq 0 ]; then
      logtxt="### PASS ###"
    else
      logtxt="### PASS with known diffs ###"
    fi
    rm -f $dfile
  else
    logtxt="### FAIL ($diffsize lines) ###"
  fi

  echo $logtxt
  modtime=`stat --printf=%y $afile | cut -d'.' -f1`
  echo "$modtime  $tfile  $logtxt" >> $rgrlog

  # save off the DIFF file for debugging
  if [ $nsk -eq 1 ]; then
    if [ $SQLMX_REGRESS -eq 1 ]; then
      rm -f $dfile.MX 2>$NULL
      cp $dfile $dfile.MX 2>$NULL
    else
      rm -f $dfile.MP 2>$NULL
      cp $dfile $dfile.MP 2>$NULL
    fi
  fi

done # for i in $prettyfiles


echo
echo
echo 'Test Summary'
echo '============'
echo
cat $rgrlog
echo
#test "$post" != "" && $post

