-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAdd-SqlCmd-to-Path-for-Linux-Container.sh
More file actions
81 lines (76 loc) · 3.5 KB
/
Add-SqlCmd-to-Path-for-Linux-Container.sh
File metadata and controls
81 lines (76 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash
# script=https://raw.githubusercontent.com/devizer/Universe.SqlServerJam/master/Add-SqlCmd-to-Path-for-Linux-Container.sh; (wget -q -nv --no-check-certificate -O - $script 2>/dev/null || curl -ksSL $script) | bash
set -eu; set -o pipefail;
SQL_SERVER_CONTAINER_NAME="${SQL_SERVER_CONTAINER_NAME:-}"
if [[ -z "$SQL_SERVER_CONTAINER_NAME" ]]; then
echo "Abort. Variable SQL_SERVER_CONTAINER_NAME is not defined"
exit 777
fi
tmp="${TMPDIR:-/tmp}"
echo '#!/bin/bash
set -eu; set -o pipefail;
if [[ -x /opt/mssql-tools/bin/sqlcmd ]]; then
/opt/mssql-tools/bin/sqlcmd "$@"
exit 0
else
exe="$(ls -1 /opt/mssql-tools*/bin/sqlcmd 2>/dev/null)"
if [[ -n "$exe" ]]; then
"$exe" "$@"
exit 0
fi
fi
echo "[sqlcmd shell] Error. Not found \"/opt/mssql-tools*/bin/sqlcmd\""
exit 7
' > /tmp/sqlcmd-smart-launcher.sh
chmod +x /tmp/sqlcmd-smart-launcher.sh
docker cp /tmp/sqlcmd-smart-launcher.sh "$SQL_SERVER_CONTAINER_NAME":/usr/local/bin/sqlcmd
docker exec "$SQL_SERVER_CONTAINER_NAME" sqlcmd -? 2>/dev/null | head -2 || true
function get_global_seconds() {
theSYSTEM="${theSYSTEM:-$(uname -s)}"
if [[ ${theSYSTEM} != "Darwin" ]]; then
# uptime=$(</proc/uptime); # 42645.93 240538.58
uptime="$(cat /proc/uptime 2>/dev/null)"; # 42645.93 240538.58
if [[ -z "${uptime:-}" ]]; then
# secured, use number of seconds since 1970
echo "$(date +%s)"
return
fi
IFS=' ' read -ra uptime <<< "$uptime"; # 42645.93 240538.58
uptime="${uptime[0]}"; # 42645.93
uptime=$(LC_ALL=C LC_NUMERIC=C printf "%.0f\n" "$uptime") # 42645
echo $uptime
else
# https://stackoverflow.com/questions/15329443/proc-uptime-in-mac-os-x
boottime=`sysctl -n kern.boottime | awk '{print $4}' | sed 's/,//g'`
unixtime=`date +%s`
timeAgo=$(($unixtime - $boottime))
echo $timeAgo
fi
}
if [[ -n "${SQL_PING_PARAMETERS:-}" ]]; then
SQL_PING_TIMEOUT="${SQL_PING_TIMEOUT:-30}"
echo "Waiting for SQL Server at container '$SQL_SERVER_CONTAINER_NAME' up to $SQL_PING_TIMEOUT seconds"
startAt="$(get_global_seconds)"
ok='';
VerFile="$(mktemp || echo "/tmp/$RANDOM")"
while [ 1 -eq 1 ]; do
query="Set NoCount On; Select Cast(Cast(SERVERPROPERTY('PRODUCTVERSION') as nvarchar(100)) + ' ' + Cast(SERVERPROPERTY('EDITION') as nvarchar(300)) as nvarchar(100));"
query="Set NoCount On; Select Replace(Cast(Cast(SERVERPROPERTY('PRODUCTVERSION') as nvarchar(100)) + ' ' + Cast(SERVERPROPERTY('ProductLevel') as nvarchar(100)) + + ' ' + IsNull(Cast(SERVERPROPERTY('ProductUpdateLevel') as nvarchar(100)),'') + ' ' + Cast(SERVERPROPERTY('EDITION') as nvarchar(300)) as nvarchar(200)), ' ', ' ');"
# docker exec -t "$SQL_SERVER_CONTAINER_NAME" sqlcmd ${SQL_PING_PARAMETERS:-} -Q "$query" || ok='true';
docker exec -t "$SQL_SERVER_CONTAINER_NAME" bash -e -c "sqlcmd -h -1 ${SQL_PING_PARAMETERS:-} -Q \"$query\"" > "$VerFile" 2>/dev/null && ok='true';
now="$(get_global_seconds)"
elapsed=$((now - startAt))
if [[ "$ok" == true ]]; then break; fi
if [ "$elapsed" -ge "$SQL_PING_TIMEOUT" ]; then break; fi
sleep 1
done
if [[ -n "$ok" ]]; then
echo "SQL Server Succesfully connected ($elapsed seconds)"
ver="$(cat "$VerFile" | head -1)"
ver="$(echo $ver | tr -d '\r' | tr -d '\n' | tr -d '\r')"
ver="${ver%%[[:space:]]}"
echo "SQL Server Version: '$ver'"
else
echo "Warning! Unable to connect to SQL Server ($elapsed seconds)"
fi
fi