Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions engines/mssql.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from typing import Any

from core.fields import Field
from core.specs import DatabaseSpec
from core.utils import generate_password
from engines.base import StandardSqlEngine
Expand All @@ -12,6 +13,24 @@ class MssqlEngine(StandardSqlEngine):
key, display, default_port = "mssql", "Microsoft SQL Server", 1433
template, slug, db_prefix = "engines/mssql.yml.j2", "mssql", "master"

def option_fields(self) -> list[Field]:
return [
Field(
"backup_format",
"Backup format",
"choice",
default="dacpac",
choices=("dacpac", "bacpac"),
help=(
"dacpac: sqlpackage Extract with all table data (default, works "
"with Windows principals). bacpac: sqlpackage Export, validated "
"against Azure SQL rules; fails with SQL71627 on databases holding "
"Windows principals such as NT AUTHORITY\\SYSTEM. Requires agent "
"1.22.0 or later."
),
),
]

Comment thread
RambokDev marked this conversation as resolved.
def generate(
self, *, auth: bool, ports: PortAllocator, answers: dict[str, Any]
) -> DatabaseSpec:
Expand Down
15 changes: 11 additions & 4 deletions tests/engines/mssql.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ def fields():
("password", "secret", None),
]
assert MSSQL.fields_new() == []
assert MSSQL.option_fields() == []
assert field_specs(MSSQL.option_fields()) == [
("backup_format", "choice", "dacpac"),
]
assert MSSQL.option_fields()[0].choices == ("dacpac", "bacpac")


def from_existing():
Expand Down Expand Up @@ -115,6 +118,10 @@ def compose_service_inline(render_engine):
]


def options_are_ignored(ports):
spec = MSSQL.generate(auth=True, ports=ports, answers={"options": {"x": 1}})
assert spec.options == {}
def only_non_default_options_reach_the_agent(ports):
spec = MSSQL.generate(auth=True, ports=ports, answers={})
bacpac = spec.with_options({"backup_format": "bacpac", "unknown": 1})
assert MSSQL.non_default_options(bacpac) == {"backup_format": "bacpac"}
assert MSSQL.agent_entry(bacpac)["options"] == {"backup_format": "bacpac"}
dacpac = spec.with_options({"backup_format": "dacpac"})
assert "options" not in MSSQL.agent_entry(dacpac)
Loading
Loading