Skip to content

All versions since 5.7.0

5.7.0

Changed

  • apply and destroy capture the live schema before planning. Before the plan step of apply and destroy, the state is now refreshed. This helps capture drift and also bootstraps the state before a first apply, which is particularly helpful when using the ephemeral store. Replaying a saved plan with --plan-file is unaffected, since its statements were fixed when the plan was written.

5.7.1

Fixed

  • Environment overlays can declare schema again. Database objects declared in *.env.<name>.sql will now join the project alongside the base files, restoring the v4 behavior.

5.8.0

Changed

  • --quiet now summarizes the run’s output. A quiet plan or apply reports one line per artifact (Plan: 2 to add, 1 to change, 0 to destroy (5 statements).) instead of the full diff and SQL.
  • --quiet drops Info diagnostics. The run-once “already executed” advisories no longer repeat on every planned run.
  • --quiet suppresses the environment banner and secondary hint lines (such as lock acquire’s release hint), which previously printed regardless.

Fixed

  • --json no longer writes the confirmation prompt into the result stream. An interactive apply --json wrote its summary and question to stdout as raw markup, breaking nschema apply --json | jq; the prompt now renders on stderr with the rest of the narration. The same fix keeps a piped --format markdown job summary free of prompt text. Without a terminal, the summary is reported as a {"type":"log"} event so a redirected stderr stays uniform NDJSON.
  • --json reports a Detail line at its own log level. Secondary hint lines were emitted as "level":"announcement", indistinguishable from top-level narration.
  • format rejects the presentation flags instead of ignoring them. nschema format --json (and --format, --quiet, --verbose) because format’s output is the formatted code.
  • The NO_COLOR environment variable and --no-color args should now be respected correctly.

5.9.0

Added

Clustering and XML indexes. Added support for clustering, XML indexes and view indexes, all inherited from NSchema.Core 5.7.

5.10.0

Added

  • Plugins can be loaded from a path. A PLUGIN statement declaring path loads the assembly directly, skipping the package restore and the shared cache entirely.

5.11.0

Added

  • Diagnostic severities can be set in .editorconfig. nschema_diagnostic.<code>.severity configures one finding and nschema_diagnostic_source.<source>.severity every finding from a producer, taking Roslyn’s severity words (none, silent, suggestion, warning, error, default). A --destructive-actions flag still wins over the file.
  • The diagnostics table names each finding’s code, which is what a severity is configured by.

Fixed

  • import reports its diagnostics whether or not it succeeded. They were shown only on failure, so a successful import had no way to tell you what it could not carry into the project.

5.11.1

Added

  • plan --json names the action behind each statement. Every entry in sql carries the action it performs (CreateTable, AddForeignKey), so what a plan exercises can be read off it rather than inferred from the SQL text. Inherited from NSchema.Core.

Fixed

  • An unreadable .editorconfig no longer crashes init, new, plan show or completion install/uninstall.
  • plan show reports a corrupt plan file instead of crashing on it. Inherited from NSchema.Core: a well-formed JSON object that is not a plan deserialized into nulls, and showing it died with a NullReferenceException in the reporter rather than naming the file.
  • .editorconfig severities now reach the findings that reading a project produces, not only the engine’s.

5.11.2

Fixed

  • Migration plan file unable to be deserialized. An accidental breaking change was introduced in NSchema.Core 5.9.1 that now been fixed.

5.11.3

Fixed

  • Check constraints no longer cause permanent drift. Check constraints are engine-native SQL, so it gets reformatted by the database. We now store both sides of a check constraint and only compare like to like.

5.11.4

Fixed

  • Engines without comment support no-longer cause errors on comments. Engines that don’t support comments now correctly ignore them.

5.11.5

All inherited from the latest NSchema.Core update.

Fixed

  • Every remaining authored expression settles. Column defaults and generated expressions, index and exclusion predicates, and a domain’s checks and default are opaque SQL, rewritten by the engine, so a handwritten one would never match. All are now kept and declared like-for-like as they are for triggers, routines etc. An expression the database no longer reports is still drift, not a spelling to restore.
  • Renaming a type no longer retypes the columns declared against it. The rename moved the type but left every reference naming the old one, so each column read as a retype.
  • Recreate is now correctly blocked by dependents. Recreating a type that’s in use now causes an error.
  • An identity that explicitly declares no options no longer differs from one that does so implicitly. No options at all and a set of unstated ones now compare equal.
  • A sequence altered for one reason no longer restates the others. The change carries the folded options, so a plan that changes the cache does not also restate a start it never asked to change.
  • Identity and sequence restarts now warn correctly. Restarts are data hazards: restarting the counter, means duplicate values are issued, meaning inserts collide with what is already stored.

5.12.0 Latest

Added

  • NSQL extension. Project files can now be written as .nsql files, which can be syntax highlighted using NSchema.Core’s TextMate grammar.

Changed

  • Default extension. When scaffolding or importing project files, the default file extension is now .nsql