Skip to content

Commit be5a458

Browse files
author
David Shiflet (from Dev Box)
committed
Merge branch 'main' of https://github.com/microsoft/go-sqlcmd into shueybubbles/hostnameincertificate
2 parents a06e35c + b7ec634 commit be5a458

24 files changed

Lines changed: 1989 additions & 1177 deletions

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*.dylib
77
bin
88
obj
9-
9+
.vscode/*
1010
# Test binary, built with `go test -c`
1111
*.test
1212

.pipelines/TestSql2017.yml

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
variables:
2-
# AZURE_CLIENT_SECRET and SQLPASSWORD must be defined as secret variables in the pipeline.
3-
# AZURE_TENANT_ID and AZURE_CLIENT_ID are not expected to be secret variables, just regular variables
4-
AZURECLIENTSECRET: $(AZURE_CLIENT_SECRET)
52
PASSWORD: $(SQLPASSWORD)
63
pool:
74
vmImage: 'ubuntu-latest'
@@ -21,34 +18,33 @@ steps:
2118
SQLCMDUSER: sa
2219
SQLPASSWORD: $(PASSWORD)
2320

24-
# The use of client secrets is disallowed now, so commenting out the Azure tests until we can switch to a federated credential.
25-
# - template: include-runtests-linux.yml
26-
# parameters:
27-
# RunName: 'SQLDB'
28-
# # AZURESERVER must be defined as a variable in the pipeline
29-
# SQLCMDSERVER: $(AZURESERVER)
30-
# AZURECLIENTSECRET: $(AZURECLIENTSECRET)
31-
32-
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
33-
displayName: Merge coverage data
21+
- task: AzureCLI@2
3422
inputs:
35-
reports: '**/*.coverage.xml"' # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported.
36-
targetdir: 'coverage' # REQUIRED # The directory where the generated report should be saved.
37-
reporttypes: 'HtmlInline_AzurePipelines;Cobertura' # The output formats and scope (separated by semicolon) Values: Badges, Clover, Cobertura, CsvSummary, Html, HtmlChart, HtmlInline, HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Dark, HtmlSummary, JsonSummary, Latex, LatexSummary, lcov, MarkdownSummary, MHtml, PngChart, SonarQube, TeamCitySummary, TextSummary, Xml, XmlSummary
38-
sourcedirs: '$(Build.SourcesDirectory)' # Optional directories which contain the corresponding source code (separated by semicolon). The source directories are used if coverage report contains classes without path information.
39-
verbosity: 'Info' # The verbosity level of the log messages. Values: Verbose, Info, Warning, Error, Off
40-
tag: '$(build.buildnumber)_#$(build.buildid)_$(Build.SourceBranchName)' # Optional tag or build version.
41-
- task: PublishCodeCoverageResults@1
23+
addSpnToEnvironment: true
24+
azureSubscription: $(AZURESUBSCRIPTION_SERVICE_CONNECTION_NAME)
25+
scriptType: pscore
26+
scriptLocation: inlineScript
27+
inlineScript: |
28+
Write-Host "##vso[task.setvariable variable=AZURESUBSCRIPTION_CLIENT_ID;]$env:AZURESUBSCRIPTION_CLIENT_ID"
29+
Write-Host "##vso[task.setvariable variable=AZURESUBSCRIPTION_TENANT_ID;]$env:AZURESUBSCRIPTION_TENANT_ID"
30+
gci env:* | sort-object name
31+
32+
- template: include-runtests-linux.yml
33+
parameters:
34+
RunName: 'SQLDB'
35+
# AZURESERVER must be defined as a variable in the pipeline
36+
SQLCMDSERVER: $(AZURESERVER)
37+
- task: UseDotNet@2
38+
inputs:
39+
packageType: 'runtime'
40+
version: '8.x'
41+
42+
- task: PublishCodeCoverageResults@2
4243
inputs:
43-
codeCoverageTool: Cobertura
4444
pathToSources: '$(Build.SourcesDirectory)'
45-
summaryFileLocation: $(Build.SourcesDirectory)/coverage/*.xml
46-
reportDirectory: $(Build.SourcesDirectory)/coverage
45+
summaryFileLocation: $(Build.SourcesDirectory)/**/*coverage.xml
4746
failIfCoverageEmpty: true
4847
condition: always()
4948
continueOnError: true
50-
env:
51-
disable.coverage.autogenerate: 'true'
5249

53-
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
54-
displayName: ‘Component Detection’
50+

.pipelines/include-runtests-linux.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ parameters:
77
- name: SQLPASSWORD
88
type: string
99
default: ''
10-
- name: AZURECLIENTSECRET
11-
type: string
12-
default: ''
1310
- name: SQLCMDSERVER
1411
type: string
1512
default: .
@@ -28,11 +25,11 @@ steps:
2825
SQLPASSWORD: ${{ parameters.SQLPASSWORD }}
2926
SQLCMDUSER: ${{ parameters.SQLCMDUSER }}
3027
SQLCMDPASSWORD: ${{ parameters.SQLPASSWORD }}
31-
AZURE_TENANT_ID: $(AZURE_TENANT_ID)
32-
AZURE_CLIENT_ID: $(AZURE_CLIENT_ID)
33-
AZURE_CLIENT_SECRET: ${{ parameters.AZURECLIENTSECRET }}
3428
SQLCMDSERVER: ${{ parameters.SQLCMDSERVER }}
3529
SQLCMDDBNAME: ${{ parameters.SQLCMDDBNAME }}
30+
AZURESUBSCRIPTION_CLIENT_ID: $(AZURESUBSCRIPTION_CLIENT_ID)
31+
AZURESUBSCRIPTION_TENANT_ID: $(AZURESUBSCRIPTION_TENANT_ID)
32+
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
3633
continueOnError: true
3734
3835
- task: PublishTestResults@2

NOTICE.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ This repository incorporates material as listed below or described in the code.
66
## github.com/Azure/azure-sdk-for-go/sdk/azcore
77

88
* Name: github.com/Azure/azure-sdk-for-go/sdk/azcore
9-
* Version: v1.11.1
10-
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/azcore/v1.11.1/sdk/azcore/LICENSE.txt)
9+
* Version: v1.18.0
10+
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/azcore/v1.18.0/sdk/azcore/LICENSE.txt)
1111

1212
```
1313
MIT License
@@ -37,8 +37,8 @@ SOFTWARE
3737
## github.com/Azure/azure-sdk-for-go/sdk/azidentity
3838

3939
* Name: github.com/Azure/azure-sdk-for-go/sdk/azidentity
40-
* Version: v1.6.0
41-
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/azidentity/v1.6.0/sdk/azidentity/LICENSE.txt)
40+
* Version: v1.10.1
41+
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/azidentity/v1.10.1/sdk/azidentity/LICENSE.txt)
4242

4343
```
4444
MIT License
@@ -68,8 +68,8 @@ SOFTWARE
6868
## github.com/Azure/azure-sdk-for-go/sdk/internal
6969

7070
* Name: github.com/Azure/azure-sdk-for-go/sdk/internal
71-
* Version: v1.8.0
72-
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/internal/v1.8.0/sdk/internal/LICENSE.txt)
71+
* Version: v1.11.1
72+
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/internal/v1.11.1/sdk/internal/LICENSE.txt)
7373

7474
```
7575
MIT License
@@ -99,8 +99,8 @@ SOFTWARE
9999
## github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys
100100

101101
* Name: github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys
102-
* Version: v1.0.1
103-
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/security/keyvault/azkeys/v1.0.1/sdk/security/keyvault/azkeys/LICENSE.txt)
102+
* Version: v1.3.1
103+
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/security/keyvault/azkeys/v1.3.1/sdk/security/keyvault/azkeys/LICENSE.txt)
104104

105105
```
106106
MIT License
@@ -129,8 +129,8 @@ SOFTWARE
129129
## github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal
130130

131131
* Name: github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal
132-
* Version: v1.0.0
133-
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/security/keyvault/internal/v1.0.0/sdk/security/keyvault/internal/LICENSE.txt)
132+
* Version: v1.1.1
133+
* License: [MIT](https://github.com/Azure/azure-sdk-for-go/blob/sdk/security/keyvault/internal/v1.1.1/sdk/security/keyvault/internal/LICENSE.txt)
134134

135135
```
136136
MIT License
@@ -159,8 +159,8 @@ SOFTWARE
159159
## github.com/AzureAD/microsoft-authentication-library-for-go/apps
160160

161161
* Name: github.com/AzureAD/microsoft-authentication-library-for-go/apps
162-
* Version: v1.2.2
163-
* License: [MIT](https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/v1.2.2/LICENSE)
162+
* Version: v1.4.2
163+
* License: [MIT](https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/v1.4.2/LICENSE)
164164

165165
```
166166
MIT License
@@ -6641,8 +6641,8 @@ THE SOFTWARE.
66416641
## golang.org/x/crypto
66426642

66436643
* Name: golang.org/x/crypto
6644-
* Version: v0.37.0
6645-
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/crypto/+/v0.37.0:LICENSE)
6644+
* Version: v0.38.0
6645+
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/crypto/+/v0.38.0:LICENSE)
66466646

66476647
```
66486648
Copyright 2009 The Go Authors.
@@ -6678,8 +6678,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
66786678
## golang.org/x/net
66796679

66806680
* Name: golang.org/x/net
6681-
* Version: v0.39.0
6682-
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/net/+/v0.39.0:LICENSE)
6681+
* Version: v0.40.0
6682+
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/net/+/v0.40.0:LICENSE)
66836683

66846684
```
66856685
Copyright 2009 The Go Authors.
@@ -6789,8 +6789,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
67896789
## golang.org/x/text
67906790

67916791
* Name: golang.org/x/text
6792-
* Version: v0.24.0
6793-
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/text/+/v0.24.0:LICENSE)
6792+
* Version: v0.25.0
6793+
* License: [BSD-3-Clause](https://cs.opensource.google/go/x/text/+/v0.25.0:LICENSE)
67946794

67956795
```
67966796
Copyright 2009 The Go Authors.

cmd/sqlcmd/sqlcmd.go

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"net"
1212
"os"
1313
"regexp"
14+
"runtime/trace"
1415
"strconv"
1516
"strings"
1617
"time"
@@ -79,6 +80,7 @@ type SQLCmdArguments struct {
7980
EnableColumnEncryption bool
8081
ChangePassword string
8182
ChangePasswordAndExit string
83+
TraceFile string
8284
// Keep Help at the end of the list
8385
Help bool
8486
}
@@ -315,7 +317,7 @@ func checkDefaultValue(args []string, i int) (val string) {
315317
'L': "|", // | is the sentinel for no value since users are unlikely to use it. It's "reserved" in most shells
316318
'X': "0",
317319
}
318-
if isFlag(args[i]) && (len(args) == i+1 || args[i+1][0] == '-') {
320+
if isFlag(args[i]) && len(args[i]) == 2 && (len(args) == i+1 || args[i+1][0] == '-') {
319321
if v, ok := flags[rune(args[i][1])]; ok {
320322
val = v
321323
return
@@ -382,6 +384,7 @@ func SetScreenWidthFlags(args *SQLCmdArguments, rootCmd *cobra.Command) {
382384
func setFlags(rootCmd *cobra.Command, args *SQLCmdArguments) {
383385
rootCmd.SetFlagErrorFunc(flagErrorHandler)
384386
rootCmd.Flags().BoolVarP(&args.Help, "help", "?", false, localizer.Sprintf("-? shows this syntax summary, %s shows modern sqlcmd sub-command help", localizer.HelpFlag))
387+
rootCmd.Flags().StringVar(&args.TraceFile, "trace-file", "", localizer.Sprintf("Write runtime trace to the specified file. Only for advanced debugging."))
385388
var inputfiles []string
386389
rootCmd.Flags().StringSliceVarP(&args.InputFile, "input-file", "i", inputfiles, localizer.Sprintf("Identifies one or more files that contain batches of SQL statements. If one or more files do not exist, sqlcmd will exit. Mutually exclusive with %s/%s", localizer.QueryAndExitFlag, localizer.QueryFlag))
387390
rootCmd.Flags().StringVarP(&args.OutputFile, "output-file", "o", "", localizer.Sprintf("Identifies the file that receives output from sqlcmd"))
@@ -395,7 +398,26 @@ func setFlags(rootCmd *cobra.Command, args *SQLCmdArguments) {
395398
rootCmd.Flags().StringVarP(&args.Query, "query", "Q", "", localizer.Sprintf("Executes a query when sqlcmd starts and then immediately exits sqlcmd. Multiple-semicolon-delimited queries can be executed"))
396399
rootCmd.Flags().StringVarP(&args.Server, "server", "S", "", localizer.Sprintf("%s Specifies the instance of SQL Server to which to connect. It sets the sqlcmd scripting variable %s.", localizer.ConnStrPattern, localizer.ServerEnvVar))
397400
_ = rootCmd.Flags().IntP(disableCmdAndWarn, "X", 0, localizer.Sprintf("%s Disables commands that might compromise system security. Passing 1 tells sqlcmd to exit when disabled commands are run.", "-X[1]"))
398-
rootCmd.Flags().StringVar(&args.AuthenticationMethod, "authentication-method", "", localizer.Sprintf("Specifies the SQL authentication method to use to connect to Azure SQL Database. One of: ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryPassword, ActiveDirectoryInteractive, ActiveDirectoryManagedIdentity, ActiveDirectoryServicePrincipal, ActiveDirectoryAzCli, ActiveDirectoryDeviceCode, SqlPassword"))
401+
rootCmd.Flags().StringVar(&args.AuthenticationMethod, "authentication-method", "", localizer.Sprintf(
402+
"Specifies the SQL authentication method to use to connect to Azure SQL Database. One of: %s",
403+
strings.Join([]string{
404+
azuread.ActiveDirectoryDefault,
405+
azuread.ActiveDirectoryIntegrated,
406+
azuread.ActiveDirectoryPassword,
407+
azuread.ActiveDirectoryInteractive,
408+
azuread.ActiveDirectoryManagedIdentity,
409+
azuread.ActiveDirectoryServicePrincipal,
410+
azuread.ActiveDirectoryServicePrincipalAccessToken,
411+
azuread.ActiveDirectoryAzCli,
412+
azuread.ActiveDirectoryDeviceCode,
413+
azuread.ActiveDirectoryWorkloadIdentity,
414+
azuread.ActiveDirectoryClientAssertion,
415+
azuread.ActiveDirectoryAzurePipelines,
416+
azuread.ActiveDirectoryEnvironment,
417+
azuread.ActiveDirectoryAzureDeveloperCli,
418+
"SqlPassword",
419+
}, ", "),
420+
))
399421
rootCmd.Flags().BoolVarP(&args.UseAad, "use-aad", "G", false, localizer.Sprintf("Tells sqlcmd to use ActiveDirectory authentication. If no user name is provided, authentication method ActiveDirectoryDefault is used. If a password is provided, ActiveDirectoryPassword is used. Otherwise ActiveDirectoryInteractive is used"))
400422
rootCmd.Flags().BoolVarP(&args.DisableVariableSubstitution, "disable-variable-substitution", "x", false, localizer.Sprintf("Causes sqlcmd to ignore scripting variables. This parameter is useful when a script contains many %s statements that may contain strings that have the same format as regular variables, such as $(variable_name)", localizer.InsertKeyword))
401423
var variables map[string]string
@@ -742,6 +764,18 @@ func isConsoleInitializationRequired(connect *sqlcmd.ConnectSettings, args *SQLC
742764
}
743765

744766
func run(vars *sqlcmd.Variables, args *SQLCmdArguments) (int, error) {
767+
if args.TraceFile != "" {
768+
traceFile, err := os.Create(args.TraceFile)
769+
if err != nil {
770+
return 1, localizer.Errorf("failed to create trace file '%s': %v", args.TraceFile, err)
771+
}
772+
defer traceFile.Close()
773+
err = trace.Start(traceFile)
774+
if err != nil {
775+
return 1, localizer.Errorf("failed to start trace: %v", err)
776+
}
777+
defer trace.Stop()
778+
}
745779
wd, err := os.Getwd()
746780
if err != nil {
747781
return 1, err

0 commit comments

Comments
 (0)