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