github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/boil.sh (about)

     1  #!/bin/sh
     2  
     3  DB_USER="sqlboiler_root_user"
     4  DB_NAME="sqlboiler_model_test"
     5  DB_PASS="sqlboiler"
     6  MSSQLPASS="Sqlboiler@1234"
     7  
     8  DRIVER_USER="sqlboiler_driver_user"
     9  DRIVER_DB="sqlboiler_driver_test"
    10  
    11  # ====================================
    12  # Building
    13  # ====================================
    14  
    15  build() {
    16      driver=$1
    17  
    18      buildPath=github.com/volatiletech/sqlboiler/v4
    19      case "${driver}" in
    20          all)
    21              set -o xtrace
    22              go build "${buildPath}"
    23              { set +o xtrace; } 2>/dev/null
    24              drivers="psql mysql mssql"
    25              shift ;;
    26          psql)
    27              drivers="psql"
    28              shift ;;
    29          mysql)
    30              drivers="mysql"
    31              shift ;;
    32          mssql)
    33              drivers="mssql"
    34              shift ;;
    35          *)
    36              set -o xtrace
    37              go build "$@" "${buildPath}"
    38              { set +o xtrace; } 2>/dev/null
    39              return ;;
    40      esac
    41  
    42      for d in $drivers; do
    43          set -o xtrace
    44          go build "$@" ${buildPath}/drivers/sqlboiler-"${d}"
    45          { set +o xtrace; } 2>/dev/null
    46      done
    47  }
    48  
    49  # ====================================
    50  # Generation
    51  # ====================================
    52  
    53  gen() {
    54      db=$1
    55      shift
    56      set -o xtrace
    57      ./sqlboiler "$@" --wipe "${db}"
    58  }
    59  
    60  # ====================================
    61  # Testing
    62  # ====================================
    63  
    64  runtest() {
    65      set -o xtrace
    66      go test -v -race "$@" ./models
    67  }
    68  
    69  # ====================================
    70  # Test users
    71  # ====================================
    72  
    73  test_user() {
    74      driver=$1
    75  
    76      case "${driver}" in
    77          psql)
    78              # Can't use createuser because it interactively promtps for a password
    79              set -o xtrace
    80              psql --host localhost --username postgres --command "create user ${DB_USER} with superuser password '${DB_PASS}';"
    81              ;;
    82          mysql)
    83              set -o xtrace
    84              mysql --host localhost --execute "create user ${DB_USER} identified by '${DB_PASS}';"
    85              mysql --host localhost --execute "grant all privileges on *.* to ${DB_USER};"
    86              ;;
    87          mssql)
    88              set -o xtrace
    89              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "create login ${DB_USER} with password = '${MSSQLPASS}';"
    90              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "alter server role sysadmin add member ${DB_USER};"
    91              ;;
    92          mssql-docker)
    93              set -o xtrace
    94              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "create login ${DB_USER} with password = '${MSSQLPASS}';"
    95              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "alter server role sysadmin add member ${DB_USER};"
    96              ;;
    97          *)
    98              echo "unknown driver"
    99              ;;
   100      esac
   101  }
   102  
   103  # ====================================
   104  # Test DBs
   105  # ====================================
   106  
   107  test_db() {
   108      driver=$1
   109  
   110      case "${driver}" in
   111          psql)
   112              set -o xtrace
   113              env PGPASSWORD=${DB_PASS} dropdb --host localhost --username ${DB_USER} --if-exists ${DB_NAME}
   114              env PGPASSWORD=${DB_PASS} createdb --host localhost --owner ${DB_USER} --username ${DB_USER} ${DB_NAME}
   115              env PGPASSWORD=${DB_PASS} psql --host localhost --username ${DB_USER} --file testdata/psql_test_schema.sql ${DB_NAME}
   116              ;;
   117          mysql)
   118              set -o xtrace
   119              mysql --host localhost --user ${DB_USER} --password=${DB_PASS} --execute "drop database if exists ${DB_NAME};"
   120              mysql --host localhost --user ${DB_USER} --password=${DB_PASS} --execute "create database ${DB_NAME};"
   121              mysql --host localhost --user ${DB_USER} --password=${DB_PASS} ${DB_NAME} < testdata/mysql_test_schema.sql
   122              ;;
   123          mssql)
   124              set -o xtrace
   125              sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -Q "drop database if exists ${DB_NAME}";
   126              sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -Q "create database ${DB_NAME}";
   127              sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -d ${DB_NAME} -i testdata/mssql_test_schema.sql
   128              ;;
   129          mssql-docker)
   130              set -o xtrace
   131              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -Q "drop database if exists ${DB_NAME}";
   132              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -Q "create database ${DB_NAME}";
   133              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U ${DB_USER} -P ${MSSQLPASS} -d ${DB_NAME} -i testdata/mssql_test_schema.sql
   134              ;;
   135          *)
   136              echo "unknown driver"
   137              ;;
   138      esac
   139  }
   140  
   141  # ====================================
   142  # Driver test
   143  # ====================================
   144  
   145  driver_test() {
   146      driver=$1
   147      shift
   148  
   149      cd "drivers/sqlboiler-${driver}/driver"
   150      set -o xtrace
   151      go test "$@"
   152  }
   153  
   154  # ====================================
   155  # Driver test users
   156  # ====================================
   157  
   158  driver_test_user() {
   159      driver=$1
   160  
   161      case "${driver}" in
   162          psql)
   163              set -o xtrace
   164              env PGPASSWORD=${DB_PASS} psql --host localhost --username ${DB_USER} --command "create role ${DRIVER_USER} login nocreatedb nocreaterole password '${DB_PASS}';" ${DRIVER_DB}
   165              env PGPASSWORD=${DB_PASS} psql --host localhost --username ${DB_USER} --command "alter database ${DRIVER_DB} owner to ${DRIVER_USER};" ${DRIVER_DB}
   166              ;;
   167          mysql)
   168              set -o xtrace
   169              mysql --host localhost --execute "create user ${DRIVER_USER} identified by '${DB_PASS}';"
   170              mysql --host localhost --execute "grant all privileges on ${DRIVER_DB}.* to ${DRIVER_USER};"
   171              ;;
   172          mssql)
   173              set -o xtrace
   174              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "create user ${DRIVER_USER} with password = '${MSSQLPASS}'";
   175              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "grant alter, control to ${DRIVER_USER}";
   176              ;;
   177          mssql-docker)
   178              set -o xtrace
   179              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "create user ${DRIVER_USER} with password = '${MSSQLPASS}'";
   180              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "grant alter, control to ${DRIVER_USER}";
   181              ;;
   182          *)
   183              echo "unknown driver"
   184              ;;
   185      esac
   186  }
   187  
   188  # ====================================
   189  # Driver test databases
   190  # ====================================
   191  
   192  driver_test_db() {
   193      driver=$1
   194  
   195      case "${driver}" in
   196          psql)
   197              set -o xtrace
   198              env PGPASSWORD=${DB_PASS} createdb --host localhost --username ${DB_USER} --owner ${DB_USER} ${DRIVER_DB}
   199              ;;
   200          mysql)
   201              set -o xtrace
   202              mysql --host localhost --user ${DB_USER} --password=${DB_PASS} --execute "create database ${DRIVER_DB};"
   203              ;;
   204          mssql)
   205              set -o xtrace
   206              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "create database ${DRIVER_DB};"
   207              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "exec sp_configure 'contained database authentication', 1;"
   208              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "reconfigure"
   209              sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "alter database ${DRIVER_DB} set containment = partial;"
   210              ;;
   211          mssql-docker)
   212              set -o xtrace
   213              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "create database ${DRIVER_DB};"
   214              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "exec sp_configure 'contained database authentication', 1;"
   215              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "reconfigure"
   216              docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -d "${DRIVER_DB}" -Q "alter database ${DRIVER_DB} set containment = partial;"
   217              ;;
   218          *)
   219              echo "unknown driver"
   220              ;;
   221      esac
   222  }
   223  
   224  # ====================================
   225  # MSSQL stuff
   226  # ====================================
   227  
   228  mssql_run() {
   229      if test "attach" = "${1}"; then
   230          args="--interactive --tty"
   231      else
   232          args="--detach"
   233      fi
   234  
   235      set -o xtrace
   236  
   237      docker run $args --rm \
   238          --env 'ACCEPT_EULA=Y' --env "SA_PASSWORD=${MSSQLPASS}" \
   239          --publish 1433:1433 \
   240          --volume "${PWD}/testdata/mssql_test_schema.sql:/testdata/mssql_test_schema.sql" \
   241          --name mssql \
   242          mcr.microsoft.com/mssql/server:2019-latest
   243  }
   244  
   245  mssql_stop() {
   246      set -o xtrace
   247      docker stop mssql
   248  }
   249  
   250  mssql_sqlcmd() {
   251      set -o xtrace
   252      docker exec --interactive --tty mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQLPASS}" -Q "$@"
   253  }
   254  
   255  # ====================================
   256  # Clean
   257  # ====================================
   258  
   259  clean() {
   260      set -o xtrace
   261      rm -f ./sqlboiler
   262      rm -f ./sqlboiler-*
   263  }
   264  
   265  # ====================================
   266  # CLI
   267  # ====================================
   268  
   269  command=$1
   270  shift
   271  
   272  case "${command}" in
   273      build)     build "$@" ;;
   274      gen)       gen "$@" ;;
   275  
   276      test)      runtest "$@" ;;
   277      test-user) test_user "$1" ;;
   278      test-db)   test_db "$1" ;;
   279  
   280      driver-test)      driver_test "$@" ;;
   281      driver-test-db)   driver_test_db "$1" ;;
   282      driver-test-user) driver_test_user "$1" ;;
   283  
   284      mssql-run)    mssql_run "$@" ;;
   285      mssql-stop)   mssql_stop "$@" ;;
   286      mssql-sqlcmd) mssql_sqlcmd "$@" ;;
   287  
   288      clean) clean ;;
   289      *)
   290          echo "./boil.sh command [args]"
   291          echo "Helpers to build, test and develop on sqlboiler"
   292          echo
   293          echo "Commands:"
   294          echo "  build [all|driver]          - builds the driver (or all drivers if all), or sqlboiler if omitted"
   295          echo "  gen <driver> [args]         - generates models for driver, passing args along to sqlboiler"
   296          echo "  test [args]                 - runs model tests, passing args to the test binary"
   297          echo "  test-user <driver>          - creates a user for the tests (superuser)"
   298          echo "  test-db <driver>            - recreates test datbase for driver using test-user"
   299          echo "  driver-test <driver> [args] - runs tests for the driver"
   300          echo "  driver-test-db <driver>     - create driver db (run before driver-test-user)"
   301          echo "  driver-test-user <driver>   - creates a user for the driver tests (unprivileged)"
   302          echo "  mssql-run [attach]          - run mssql docker container, if attach is present will not daemonize"
   303          echo "  mssql-stop                  - stop mssql docker container"
   304          echo "  mssql-sqlcmd [args...]      - run sql query using sqlcmd in docker container"
   305  esac