:: script upgrade database into sybase 12
:: script needs to sybase 12 64-bit has to be installed on this computer
:: script create directory "reloadPath" in current path
:: if upgrade is succesfull this directory can be removed
:: script makes also backup of upgrading database into <db_name>.backup
:: responsible: Adam Bella
::
:: arguments:
:: 1. - databse file (can be full or relative path)
:: [2. - databse user (default=dba)]
:: [3. - databse password (default=swx)]
:: 
:: return codes:
:: 0 - skript succesfully upgrade database
:: 1 - databse name is invalid or database does not exist
:: others - error code of dbunload, dbinit or dbisql

@echo off

:: cesta k databaze
SET "DB_NAME=%~f1"
SET "DB_USER=%2"
SET "DB_PASSWORD=%3"

SET "BIN_DIR=bin64"

:: error codes
SET ERROR_DB_UNKNOWN=0

IF ["%DB_NAME%"] == [""] (
  echo invalid database name
  exit /b %ERROR_DB_UNKNOWN%
)

IF ["%DB_USER%"] == [""] (
  echo using default user
  SET "DB_USER=dba"
)

IF ["%DB_PASSWORD%"] == [""] (
  echo using default password
  SET "DB_PASSWORD=swx"
)

echo databse name set into [%DB_NAME%]

IF not exist %DB_NAME% (
  echo neznama cesta k databaze [%DB_NAME%]
  exit /b %ERROR_DB_UNKNOWN%
)

SET "DB_LOG=%~dp1%~n1.log"

SET "RELOAD_PATH=%CD%\reloadPath"
SET "RELOAD_FILE=%RELOAD_PATH%\reload.sql"
SET "RELOAD_BACKUP_FILE=%RELOAD_FILE%.backup"

rd /S /Q "%RELOAD_PATH%"
md "%RELOAD_PATH%"

echo (1/4) creating backup:
echo database file into %DB_NAME%.backup
COPY "%DB_NAME%" "%DB_NAME%.backup" /Y
echo database log file into %DB_LOG%.backup
COPY "%DB_LOG%" "%DB_LOG%.backup" /Y

echo (2/4) unloading database [%DB_NAME%] into %RELOAD_FILE%
"%SqlAny12%\%BIN_DIR%\dbunload" -c "uid=%DB_USER%;pwd=%DB_PASSWORD%;dbf=%DB_NAME%" "%RELOAD_PATH%" -r "%RELOAD_FILE%" -o "%CD%\unload.log"
IF %errorlevel% neq 0 (
  echo dbunload was unsuccessfull: %errorlevel%
  exit /b %errorlevel%
)

attrib -R "%DB_NAME%"
DEL /Q "%DB_NAME%"
IF %errorlevel% neq 0 (
  echo deleting %DB_NAME% was unsuccessfull: %errorlevel%
  exit /b %errorlevel%
)

attrib -R "%DB_LOG%"
DEL /Q "%DB_LOG%"
IF %errorlevel% neq 0 (
  echo deleting %DB_LOG% was unsuccessfull: %errorlevel%
  exit /b %errorlevel%
)

echo (3/4) creating new database %DB_NAME%
"%SqlAny12%\%BIN_DIR%\dbinit" -p 16384 -z utf8 "%DB_NAME%"
IF %errorlevel% neq 0 (
  echo dbinit was unsuccessfull: %errorlevel% - restoring backup
  COPY "%DB_NAME%.backup" "%DB_NAME%" /Y
  COPY "%DB_LOG%.backup" "%DB_LOG%" /Y
  exit /b %errorlevel%
)

echo (4/4) loading data %RELOAD_FILE% to new database %DB_NAME%
"%SqlAny12%\%BIN_DIR%\dbisql" -c "uid=dba;pwd=sql;dbf=%DB_NAME%" -nogui SET TEMPORARY OPTION public.STRING_RTRUNCATION='OFF'; READ "%RELOAD_FILE%"
IF %errorlevel% neq 0 (
  echo dbisql was unsuccessfull: %errorlevel% - restoring backup
  COPY "%DB_NAME%.backup" "%DB_NAME%" /Y
  COPY "%DB_LOG%.backup" "%DB_LOG%" /Y
  exit /b %errorlevel%
)

echo Upgrade done successfully
goto :eof

:: params search_line replacing_line source_file
:replaceLines
@echo off
SETLOCAL enableextensions
SETLOCAL enabledelayedexpansion

SET "OLD_VALUE=%~1"
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
    set "line=%%B"
    if defined line (
        set "replaced=!line:%OLD_VALUE%=!"
        if not !replaced! == !line! (
          echo.%~2
        ) else (
          echo.!line!
        )
    ) else echo.
)