Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: Creating a provider without an access to DB #409

Open
AlexeyRaga opened this issue Jun 30, 2021 · 3 comments
Open

Question: Creating a provider without an access to DB #409

AlexeyRaga opened this issue Jun 30, 2021 · 3 comments

Comments

@AlexeyRaga
Copy link

Hi, thanks for the lib, looks great!

One question: it is possible (or can it be possible) to instantiate providers without requiring to have an access to DB?
Give them a schema file, or somehow similar?

This would allow building in CI easier, more reproducible builds, etc...

@jackfoxy
Copy link

Pretty sure there are other SQL TPs that work off provided schemas. This project needs some fixes to be net5.0 compatible., most especially #374

@charlesroddie
Copy link

You need to create a db based on a schema file. For example in our SSDT project we have this post-build event:

for /f "delims=" %%a in (' powershell -NoProfile -ExecutionPolicy Bypass "$(ProjectDir)SetPowershellPath.ps1" ') do set "psPath=%%a"

"%psPath%" -NoProfile -ExecutionPolicy Bypass -Command "& '$(ProjectDir)create_db.ps1' '$(ProjectDir)'"

The powershell files are:

param( 
    [string]$BasePath
)

$isEnv64Bit = [Environment]::Is64BitProcess
if (-Not ($isEnv64Bit)) {
	return [System.Environment]::ExpandEnvironmentVariables("%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe")
}

return [System.Environment]::ExpandEnvironmentVariables("%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe")

and

param( 
    [string]$ProjectDir
)

write-output "--- STARTING DB BUILD ---"
write-output "STARTING WITH PROJECT DIR: " $ProjectDir $Test
$isEnv64Bit = [Environment]::Is64BitProcess
if (-Not ($isEnv64Bit)) {
	write-output "THE POWERSHELL MUST RUN IN 64 BIT MODE"
	exit 1
}

write-output "GETTING MODULES..."
Import-Module -Name SqlServer
# Remove | Out-Null to print the output
Get-Command -Module SqlServer | Out-Null

write-output "DATABASE INFO..."
SqlLocalDB.exe info "MSSQLLocalDB"
write-output "STOPPING..."
SqlLocalDB.exe stop "MSSQLLocalDB"
write-output "DROPPING..."
Invoke-Sqlcmd -ServerInstance "(localdb)\MSSQLLocalDB" -Query "DROP DATABASE IF EXISTS MainDB" -ErrorAction 'Stop'

write-output "INVOKING DB INSTANCE WITH PATH:"

$create_sql = "$ProjectDir" + "bin\Output\MainDB_Create.sql"
write-output $create_sql

Invoke-Sqlcmd -ServerInstance "(localdb)\MSSQLLocalDB" -InputFile "$create_sql" -ErrorAction 'Stop'

IF ($LASTEXITCODE -ne 0) {
    Write-Host "--- DB CREATION FAILED ---"
    Write-Host $LASTEXITCODE
    exit 1
}
ELSE {
    Write-Host "--- DATABASE BUILD COMPLETE ---"
}

Took ages to get this right because of the terrible languages involved, but once setup the process becomes very smooth.

@smoothdeveloper
Copy link
Collaborator

One question: it is possible (or can it be possible) to instantiate providers without requiring to have an access to DB?
Give them a schema file, or somehow similar?

I've investigated approach of serializing the stuff to have the SqlCommandProvider working on top of a serialized .json of the schema metadata used by the provider at design time.

It is a viable approach, but it still requires, when updating .sql files (which invalidates the .json cache) to have a dbserver.

The usual approach, as far as I'm concerned with using this library, is to have db preparation in the build script, and indeed, having that db available on the development / integration machine.

I don't have free time to commit into taking this investigation/prototype towards a stable implementation and updated version of the library, I've seen the pros/cons of the above while experimenting and it doesn't help much in my current usecase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants