mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-15 09:35:37 -05:00
* Expose default database collation through 'sql-database-projects' extension API. For the purpose of schema conversion we would need to know whether target database is configured as CI or CS. This will be used to produce a warning, if we detect a case-sensitive identifier, but database is configured as CI. In order to support this scenario we need to access `<DefaultCollation/>` property of the project. This change adds new method to the `ISqlProject` interface that allows to read the value of the project property. There already was similar method for the SQL version/platform (`<DSP/>` property) and while working on the change, I took an opportunity to refactor the way project properties are extracted from the XML. Original code was hardcoded in the `getProjectTargetVersion` and I extracted it into separate `evaluateProjectPropertyValue` helper, that can be used in the future by any getter or access method that is supposed to return a value of the single property. This also allows us to improve the way properties are retrieved from the XML. Today the logic is very rudimentary - we read the first matching XML element with the required name. This is not correct as it does not verify the parent to be `<PropertyGroup/>`, neither it evaluates the `Condition` attributes nor property value itself. I did not invest in this, but added a TODO there explaining that the method may not perform as expected. After the helper method was added, I updated the existing `getProjectTargetVersion` method to leverage it. The only complication here was the error throwing logic, as it was using custom error message. I preserved that, as there were tests verifying it already. For the new accessor method I did not introduce a special error message and rely on generic one I defined for use within the helper method. Additionally, for the collation we return default value of `SQL_Latin1_General_CP1_CI_AS`, if project does not have the property defined. This is what SSDT for Visual Studio shows in the UI when property is missing and I decided to align with that. Finally, I added tests for both - original `getProjectTargetVersion` and new collation extraction method to make sure they work as expected. While working on the tests, I've noticed complaints that some rejected promises were not awaited. I added missing `await`s.
68 lines
3.5 KiB
XML
68 lines
3.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
|
<PropertyGroup>
|
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
<Name>TestProjectName</Name>
|
|
<SchemaVersion>2.0</SchemaVersion>
|
|
<ProjectVersion>4.1</ProjectVersion>
|
|
<ProjectGuid>{BA5EBA11-C0DE-5EA7-ACED-BABB1E70A575}</ProjectGuid>
|
|
<DSP><foo></foo><bar></bar></DSP>
|
|
<OutputType>Database</OutputType>
|
|
<RootPath>
|
|
</RootPath>
|
|
<RootNamespace>TestProjectName</RootNamespace>
|
|
<AssemblyName>TestProjectName</AssemblyName>
|
|
<ModelCollation>1033, CI</ModelCollation>
|
|
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
|
|
<DeployToDatabase>True</DeployToDatabase>
|
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
|
<TargetLanguage>CS</TargetLanguage>
|
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
<SqlServerVerification>False</SqlServerVerification>
|
|
<IncludeCompositeObjects>True</IncludeCompositeObjects>
|
|
<TargetDatabaseSet>True</TargetDatabaseSet>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
<OutputPath>bin\Release\</OutputPath>
|
|
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
|
|
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
|
|
<DebugType>pdbonly</DebugType>
|
|
<Optimize>true</Optimize>
|
|
<DefineDebug>false</DefineDebug>
|
|
<DefineTrace>true</DefineTrace>
|
|
<ErrorReport>prompt</ErrorReport>
|
|
<WarningLevel>4</WarningLevel>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
<OutputPath>bin\Debug\</OutputPath>
|
|
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
|
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
|
<DebugSymbols>true</DebugSymbols>
|
|
<DebugType>full</DebugType>
|
|
<Optimize>false</Optimize>
|
|
<DefineDebug>true</DefineDebug>
|
|
<DefineTrace>true</DefineTrace>
|
|
<ErrorReport>prompt</ErrorReport>
|
|
<WarningLevel>4</WarningLevel>
|
|
</PropertyGroup>
|
|
<PropertyGroup>
|
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
|
|
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
|
|
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
|
|
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
|
|
</PropertyGroup>
|
|
<Import Condition="'$(NetCoreBuild)' == 'true'" Project="$(NETCoreTargetsPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets"/>
|
|
<Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
|
|
<Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
|
|
<ItemGroup>
|
|
<PackageReference Condition="'$(NetCoreBuild)' == 'true'" Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
|
|
</ItemGroup>
|
|
<ItemGroup>
|
|
<Folder Include="Properties" />
|
|
</ItemGroup>
|
|
<Target Name="BeforeBuild">
|
|
<Delete Files="$(BaseIntermediateOutputPath)\project.assets.json" />
|
|
</Target>
|
|
</Project>
|