
# Changelog 2021

<style scoped >
  em { font-style:normal; font-weight: 500 }
  em:after { content:" —" }
  li { margin: 5px 0; }
</style>

## December 2021

### Added

- _[cds-dk@4.7.0]_ `cds add data --for` can be passed a regular expression, allowing more flexible name filters. For example `--for '^Supplier$'` would only match entity `Supplier`, but not `SupplierAddress`. Note that as before, `--for Supplier` is interpreted as `--for '^Supplier.*'`, i.e. matches both entities.
- _[cds-dk@4.7.0]_ `cds init --add hana` and `cds add hana` now add a _undeploy.json_ file containing wildcards. This ensures that SAP HANA artifacts are automatically cleaned-up in case views, unique keys, or constraint definitions of associations have been changed in CDS model.
- _[eslint-plugin-cds@2.2.2]_ Added new rule 'no-join-on-draft-enabled-entities'
- _[vscode-cds@4.4.0]_ progress monitor for long runners like References and WorkspaceSymbols
- _[cds-compiler@2.11.0]_ Option `defaultBinaryLength` to set a `length` type facet for all definitions with type `cds.Binary`. This option
  overrides the default binary length in the database backends and is also used as `MaxLength` attribute in OData.
- _[cds-compiler@2.11.0]_ If doc-comments are ignored by the compiler, an info message is now emitted. A doc-comment is ignored,
  if it can't be assigned to an artifact. For example for two subsequent doc-comments, the first doc-comment
  is ignored. To suppress these info messages, explicitly set option `docComment` to `false`.
- _[cds-compiler@2.11.0]_ `cdsc`:
  - `cdsc explain list` can now be used to get a list of message IDs with explanation texts.
  - `cdsc` now respects the environment variable `NO_COLOR`. If set, no ANSI escape codes will be used.
    Can be overwritten by `cdsc --color always`.
- _[cds-compiler@2.11.0]_ to.sql/hdi: Support SQL window functions
- _[cds-compiler@2.11.0]_ to.sql/hdi/hdbcds:
  - Support configuration of `$session` and `$user` via option `variableReplacements`.
  - Restricted support for SQL foreign key constraints if option `assertIntegrityType` is set to `"DB"`.
    The behavior of this feature might change in the future.
- _[cds.java@1.21.0]_ Added support for IAS-based authentication with new feature `cds-feature-identity`.
- _[cds.java@1.21.0]_ Added a persistent outbox that stores enrolled messages in a database table and publishes them again asynchronously after the transaction finished. It is used by Messaging and AuditLog services to bind communication with these services to the current database transaction.
- _[cds.java@1.21.0]_ Added support for automatic audit logging based on `@PersonalData` and `@AuditLog` annotations
- _[cds.java@1.21.0]_ The goal `generate` of the `cds-maven-plugin` provides the new parameter `includes` to configure CDS namespaces or entities included into code generation.
- _[cds.java@1.21.0]_ Pool configurations of multi-tenant database bindings now support map-based parameters. This enables additional connection properties to be specified. For Hikari connection pool, you can use `cds.datasource.<binding-name>.hikari.data-source-properties.<key>: <value>`
- _[cds.java@1.21.0]_ Values for elements with arrayed types can now be specified in CSV files, by providing them as JSON arrays.
- _[cds.java@1.21.0]_ You can now configure the destination retrieval strategy and the token exchange strategy for a Remote Service, by setting `cds.remote.services.<key>.destination.retrievalStrategy` and `cds.remote.services.<key>.destination.tokenExchangeStrategy`.
- _[cds4j@1.25.0]_ Support deep insert on structured elements
- _[cds4j@1.25.0]_ Support aliased expands
- _[cds4j@1.25.0]_ Support managed to-one associations on the select list
- _[cds4j@1.25.0]_ Support paths in CdsStructuredType:get/findElement
- _[cds4j@1.25.0]_ Support structured FK/ref element values in updates
- _[cds4j@1.25.0]_ Code generator: Support includes configuration option
- _[cds@5.7.0]_ Deferred emitting via persistent outbox, enabled through service `outbox` of kind `persistent-outbox`
- _[cds@5.7.0]_ Support for compiler-generated referential constraints <Beta />
  - Activate via `cds.env.features.assert_integrity: '<preset>'`
  - Available presets:
    - `off`: no database constraints and no runtime checks
    - `app`: runtime checks by default
    - `db`: database constraints by default
  - "by default": if not excluded, the runtime check or database constraint applies
  - "opt-in": if included, the runtime check or database constraint applies
  - Behavior can be overridden via `@assert.integrity: <true/false/'RT'/'DB'>` on property, entity, or service level (lowest applies)
- _[cds@5.7.0]_ Allow `--with-mocks` in production via `cds.env.features.with_mocks = true`
- _[cds@5.7.0]_ Set media type from content type header while inbound streaming
- _[cds@5.7.0]_ Support for navigations with `$count` in `$filter`, for example `GET Entity?$filter=toMany/$count gt 0`
- _[cds@5.7.0]_ Draft: Generate UUIDs for request payloads to which extra data items are added (without the UUID keys) in a custom application handler.
- _[cds@5.7.0]_ Generate GraphQL schema via `cds compile -2 gql` (alpha)
- _[cds@5.7.0]_ Log requests to remote services if respective log level is set to `debug`
- _[cds@5.7.0]_ Beta OData URL to CQN parser (`cds.env.features.odata_new_parser`):
  - support for `$skiptoken` query option
  - limited support for `$apply` query option
    - Supported are following transformations and their combinations: `aggregate`, `groupby`, `topcount`, `bottomcount`, `filter`, `search`
    - Not supported:
      - Transformations `topsum`, `bottomsum`, `toppercent`, `bottompercent`, `expand`, `concat`, `compute`, `identity`
      - `rollup` and `$all` in `groupby` transformation
      - Filter function `isdefined`
      - Custom aggregation methods, arithmetic operators (`add`, `sub`, `mul` and so on) and keyword `from` in `aggregate` transformation
      - OData vocabulary for Data Aggregation, `@Aggregation.default` annotation
    - Out of scope:
      - Draft handling
- _[cds@5.7.0]_ Out-of-the-box audit logging for draft enabled entities
- _[cds@5.7.0]_ Support for `@sap/instance-manager`'s hybrid mode
  - Enable via `cds.env.features.hybrid_instance_manager`
  - Respective version of `@sap/instance-manager` required
- _[cds@5.7.0]_ `cds.minify()` (alpha) as static method
- _[cds@5.7.0]_ Annotation `@open` for actions in new Rest Adapter
- _[cds@5.7.0]_ Audit logging (`cds.env.features.audit_personal_data`) supports annotation `@PersonalData.EntitySemantics: 'Other'` and allows an arbitrary composition of entities with respect to `@PersonalData.EntitySemantics` annotations
- _[cds-mtx@2.5.0]_ Binding of both service-manager and managed-hana is now supported. To enable it, you have to
set the feature flag `cds.features.hybrid_instance_manager` to true. Please note that you also
need a compatible version of `@sap/instance-manager`.

### Changed

- _[cds-dk@4.7.0]_ `cds import` now adds annotations for missing ON conditions in associations instead of appending it in `doc`.
- _[cds-dk@4.7.0]_ `cds import` has updated mapping for OData V2 and V4
- _[cds-dk@4.7.0]_ `cds add lint` now configures `csv` files in _.vscode/settings.json_
- _[cds-dk@4.7.0]_ `cds add hana` for Java projects now adds an `engines.node` version of `^16` to the generated _db/package.json_, to pin the Node.js version.  This will help in the future when runtime environments change their default to some version higher than the one supported by `@sap/hdi-deploy`.
- _[cds-dk@4.7.0]_ `cds add mta` for Node.js projects now adds `npm ci` commands instead of `npm install`.  This makes use of _package-lock.json_ to enforce reproducible builds.
- _[cds-dk@4.7.0]_ `cds watch` now ignores folders named `target`, to avoid restarts when Maven's build output changes
- _[eslint-plugin-cds@2.2.2]_ Compile 'model' files based on CSN flavor 'inferred'
- _[eslint-plugin-cds@2.2.2]_ Compile 'outsider' files based on CSN flavor 'parsed'
- _[vscode-cds@4.4.0]_ new 'cold start' start-up behaviour:
  - workspace is not scanned unless required (references, workspace symbols)
  - file contents read during compilation is cached, incl. tried missing paths during path resolution
  - many changes to improve performance and reduce required memory
- _[vscode-cds@4.4.0]_ `cds preview` now opens a read-only editor to show the cds file preview.
- _[cds-compiler@2.11.0]_ Updated OData vocabularies 'Common' and 'UI'.
- _[cds-compiler@2.11.0]_ to.sql/hdi/hdbcds: The default length of `cds.Binary` is set to `5000` similar to `cds.String`.
- _[cds.java@1.21.0]_ Changed the Outbox API to behave more like a Messaging Service. Outbox messages can be enrolled in the outbox and are later published by the outbox again. Event handlers can be registered at the Outbox to listen for published messages. The outbox takes care of binding the message to the current ChangeSetContext (transaction).
- _[cds.java@1.21.0]_ The parameter `excludes` of goal `generate` of the `cds-maven-plugin` now expects an Ant Glob style pattern. The new default value for this parameter is `localized.**`.
- _[cds@5.7.0]_ `if-match` and `if-none-match` headers are  ignored for entities without etags
- _[cds@5.7.0]_ Improve response time of `SELECT` queries that check referential integrity by adding an upper bound `LIMIT 1`
- _[cds@5.7.0]_ Leaner implementation for `sap-statistics`
- _[cds@5.7.0]_ Leading and trailing whitespaces are allowed for `$search` query parameter
- _[cds@5.7.0]_ Insert / Update of Composition of one with empty object is not allowed for non UUID keys
- _[cds@5.7.0]_ Search behavior of whitespaces changed as follow:
  - Searches for plain whitespace, for example, `"$search= "` matches the complete data set.
  - Searches for whitespace surrounded by double-quotes, for example, `$search=" "` matches all entries containing whitespaces.
- _[cds@5.7.0]_ In single tenant mode, the default SQLite database is used, regardless of `context.tenant`
- _[cds@5.7.0]_ `cds build` for Node.js projects now copies _package-lock.json_ files into the staging folder (usually `gen/srv`). This allows the execution of `npm ci` there.
- _[cds@5.7.0]_ Relaxed UUIDs in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.7.0]_ Authentication strategies `dummy` and `mock` no longer require `passport`
- _[cds@5.7.0]_ In production, debug logs of `cds.DatabaseService` and `cds.RemoteService` have sanitized values
  - Deactivate via `cds.env.log.sanitize_values = false`

### Fixed

- _[cds-dk@4.7.2]_ `cds add lint` uses JSONC parser to read ESLint config files of type _.eslintrc[.js,.cjs,.json]_.
- _[cds-dk@4.7.1]_ `cds activate` authentication no longer fails
- _[cds-dk@4.7.1]_ `cds.compile.to.openapi` does no longer crash if `cds.compile` was already initialized
- _[cds-dk@4.7.0]_ `cds import` throws warning messages for unsupported data types.
- _[cds-dk@4.7.0]_ `cds watch` allows the explicit `--with-mocks` option, although this is anyways included by default
- _[cds-dk@4.7.0]_ `cds watch` no longer runs into multiple restarts if many files are changed at once, like in git branch changes
- _[cds-compiler@2.11.4]_ CDL parser: in many situations, improve message when people use reserved keywords as identifier
- _[cds-compiler@2.11.4]_ Improve error text and error location for ambiguous auto-redirection target
- _[cds-compiler@2.11.4]_ to.sql/hdi/hdbcds:
  - Correctly detect `exists` in projections
  - Correctly handle elements starting with `$` in the on-condition of associations
  - Correctly handle sub queries in an entity defined with `projection on`
  - Correctly handle associations in sub queries in a `from` of a sub query
  - foreign key constraints: respect @assert.integrity: false for compositions
- _[cds-compiler@2.11.4]_ to.hdbcds: Correctly quote elements named `$self` and `$projection`
- _[cds-compiler@2.11.4]_ to.cdl: `when` was added to the keyword list for smart quoting
- _[cds-compiler@2.11.4]_ Compiler support for code completion for `$user` and `$session` now respect user provided variables in `options.variableReplacements`.
- _[cds-compiler@2.11.4]_ API: `deduplicateMessages()` no longer removes messages for `duplicate` artifact/annotation errors. Prior to this version, only one of the duplicated artifacts had a message, leaving the user to guess where the other duplicates were.
- _[cds-compiler@2.11.2]_ to.sql/hdi/hdbcds:
  - No foreign key constraint will be rendered for managed `composition of one` if annotated with `@assert.integrity: false`
  - Correctly handle managed associations with other managed associations as foreign keys in conjunction with `exists`
- _[cds-compiler@2.11.0]_ CSN parser: doc-comment extensions are no longer ignored.
- _[cds-compiler@2.11.0]_ Properly check for duplicate annotation definitions.
- _[cds-compiler@2.11.0]_ Correctly apply annotations on inherited enum symbols.
- _[cds-compiler@2.11.0]_ Correctly apply annotations on elements in an inherited structure array.
- _[cds-compiler@2.11.0]_ Fix a bug in API `defaultStringLength` value evaluation.
- _[cds-compiler@2.11.0]_ Fix crash if named arguments are used in a function that's inside a `CASE` statement.
- _[cds-compiler@2.11.0]_ to.sql/hdi/hdbcds:
  - Properly flatten ad-hoc defined elements in `returns` / `params` of `actions` and `functions`.
  - Correctly handle `*` in non-first position.
  - Correctly handle action return types
  - Correctly handle mixin association named `$self`
- _[cds-compiler@2.11.0]_ to.cdl: doc-comments are no longer rendered twice.
- _[cds-compiler@2.11.0]_ to.edm(x):
  - Fix a bug in V2/V4 partner ship calculation.
  - Remove warning of unknown types for Open Types in `@Core.Dictionary`.
  - An empty CSN no longer results in a JavaScript type error
- _[cds.java@1.21.1]_ Fixed a bug, causing the `TenantProviderService` to return tenants that were not (yet) successfully subscribed.
- _[cds.java@1.21.1]_ Fixed a bug, causing exceptions when events were emitted to `MessagingService` or `AuditLogService` without an explicit `RequestContext`
- _[cds.java@1.21.1]_ Fixed a bug, causing `ConcurrentModificationException` during processing of personal data annotations.
- _[cds.java@1.21.1]_ Fixed a bug, causing `NullPointerException` during the outbox message deserialization of the audit-log outbox handler.
- _[cds.java@1.21.1]_ Fixed a bug, causing asynchronous messaging events to be received multiple times, in case multiple event handlers for the asynchronous event were registered on a Remote Service.
- _[cds.java@1.21.1]_ Fixed a bug, causing `NullPointerException` during the namespace handling in the `EnterpriseMessagingService`, in case no namespace was available. This enables usage of the service plan `dev`.
- _[cds.java@1.21.1]_ Fixed a bug, causing blocked messaging requests in case of a high amount of parallel business requests.
- _[cds.java@1.21.0]_ Fixed a bug causing `404 Not Found` errors, when configuring an OData V2 base path with trailing `/`
- _[cds.java@1.21.0]_ Fixed a bug causing the error message for `@assert.range` validations to be incorrectly rendered.
- _[cds.java@1.21.0]_ Fixed a bug in the `cds-maven-plugin` causing the goal `version` to completely fail if only the command `cds version` fails. Now it prints at least the Java SDK related version information on console.
- _[cds4j@1.25.0]_ Code generator: Fix support for excludes
- _[cds4j@1.25.0]_ Fix serialization of CQL statements with null values in data
- _[cds@5.7.4]_ Complex `@restrict.where: 'exists [...] or (... or ...) or ...'` in draft union scenario no longer crashes the application
- _[cds@5.7.4]_ Sanitization of null values for `cds.RemoteService`
- _[cds@5.7.4]_ Handling of boolean values in draft union scenario with `$expand` query option
- _[cds@5.7.4]_`_4odata` flag in CQN stays non-enumerable when forwarding to another application service
- _[cds@5.7.4]_ Handling of type references on properties of associations in `cds.minify`
- _[cds@5.7.3]_ Message Queuing now accepts `amqp` options
- _[cds@5.7.3]_ OData requests using lambda expressions with `contains` function
- _[cds@5.7.3]_ Result of OData query option `$count=true` when using `$apply`
- _[cds@5.7.3]_ `$filter` with navigation to-one equals value crashes
- _[cds@5.7.3]_ `$skiptoken` query option allows to use arbitrary symbols except of `&` with beta OData URL to CQN parser (`cds.env.features.odata_new_parser`). In this non-integer value case the value will not be parsed into CQN.
- _[cds@5.7.3]_ Function names in `$filter` can now be case insensitive (as per OData 4.01)
- _[cds@5.7.3]_ `$count` in `$expand` caused server to crash
- _[cds@5.7.2]_ Instance-based restriction for activation of draft enabled entities
- _[cds@5.7.2]_`.columns('*')` on projections of remote services using renamed properties
- _[cds@5.7.2]_ GraphQL filters on nested fields are now applied correctly
- _[cds@5.7.2]_ Performance degradation during processing of `where exists`
- _[cds@5.7.2]_ Read drafts via navigation with complex filter expression
- _[cds@5.7.1]_ Draft (OData flavors `w4`, `x4` and `v4` with structs): Flags `HasActiveEntity`, `HasDraftEntity`, and `IsActiveEntity` are now included in the HTTP response for GET requests.
- _[cds@5.7.1]_ Instance-based restriction on entities using localized fields in draft
- _[cds@5.7.1]_ Results of actions/functions do not ignore nested data if query options are present
- _[cds@5.7.0]_ Path resolution for references in sub selects
- _[cds@5.7.0]_ Where exists without infix filter, for example, `@restrict.where: 'exists author'`
- _[cds@5.7.0]_ `@restrict.where: 'exists [...]'` in draft union scenario
- _[cds@5.7.0]_ Select query with path exists predicates, for example, `WHERE EXISTS books[year = 2000].pages[wordcount > 1000]`
- _[cds@5.7.0]_ Proper registration of audit log event handlers
- _[cds@5.7.0]_ Draft: Generate foreign keys for request payloads to which extra data items are added in a custom application handler.
- _[cds@5.7.0]_ `cds build` correctly merges `hdbmigrationtable` files that have multiple new migration versions defined.
- _[cds@5.7.0]_ `cds.test` converts response data of failed requests to JSON to prevent lost error details
- _[cds@5.7.0]_ Instance based restriction for draft enabled entities
- _[cds@5.7.0]_ Delete requests for localized with compositions
- _[cds@5.7.0]_ Ignore input for static and calculated fields during draft activate
- _[cds@5.7.0]_ Clear extension map entry on error during CSN fetching
- _[cds@5.7.0]_ Do not ignore errors during diff calculation
- _[cds@5.7.0]_ Requests to mocked remote service when using custom service name with `.service` property
- _[cds@5.7.0]_ Rollback on already backrolled or committed transactions are ignored
- _[cds@5.7.0]_ Rollback handling in spawned background job
- _[cds@5.7.0]_ `cds.spawn()` throws error if passed option is an instance of `cds.EventContext`
- _[cds@5.7.0]_ Delete `timestamp` from options passed to `cds.spawn()` (transactions create their own timestamp)
- _[cds@5.7.0]_ Type error during programmatic action/function call if no params defined
- _[cds@5.7.0]_ Fully qualified bound actions/ functions in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.7.0]_ Draft handling: `GET` requests with navigation via `SiblingEntity` and expand to-one
- _[cds@5.7.0]_ No audit log if sensitive data not selected
- _[cds@5.7.0]_ Kibana formatter: do not log authorization header value
- _[cds@5.7.0]_ Audit logging (`cds.env.features.audit_personal_data`) no longer crashes the application
  - when using the same entity as a composition child in different parent entities
  - when accessing a not existing entity
- _[cds-mtx@2.4.2]_ Authentication request for cds extension client is now returning token again
- _[cds-mtx@2.4.2]_ `hdbmigrationtable` files from an updated model with multiple new migration versions
are now correctly merged with tenant-specific `hdbmigrationtable` files
- _[cds-odata-v2-adapter-proxy@1.8.4]_ Unquote action/function parameter of types `cds.UUID`, `cds.Binary`, `cds.LargeBinary`, `cds.Date`, `cds.Time`, `cds.DateTime`, `cds.Timestamp`
- _[cds-odata-v2-adapter-proxy@1.8.3]_ Prevent parsing body for HEAD requests against $batch
- _[cds-odata-v2-adapter-proxy@1.8.3]_ Fix single quotes of URL parameters for request body conversion respecting line breaks
- _[cds-odata-v2-adapter-proxy@1.8.3]_ Introduce proxy option `quoteSearch` to control search expression quoting. Default is `true`
- _[cds-odata-v2-adapter-proxy@1.8.3]_ Fix bound action call to entity key having association type
- _[cds-odata-v2-adapter-proxy@1.8.3]_ Fix action/function parameter of types date, time, datetime
- _[cds-odata-v2-adapter-proxy@1.8.2]_ Catch and handle unexpected errors during proxy request processing
- _[cds-odata-v2-adapter-proxy@1.8.2]_ Validate request body and content-type in request
- _[cds-odata-v2-adapter-proxy@1.8.2]_ Switch of internal npm repository (Nexus -> Artifactory)

### Removed

- _[cds-compiler@2.11.0]_ to.hdbcds: Doc comments on view columns are not rendered anymore. Doc comments on string literals will make the deployment fail
  as the SAP HANA CDS compiler concatenates the doc comment with the string literal. Besides that, doc comments on view columns
  are not transported to the database by SAP HANA CDS.
- _[cds-compiler@2.11.0]_ to.hdbcds/sql/hdi: Forbid associations in filters after `exists` (except for nested `exists`), as the final behavior is not yet specified.
- _[cds@5.7.0]_ Deprecated feature flags `cds.env.runtime.skipWithParameters` and `cds.env.features.skip_with_parameters`. Use `cds.env.features.with_parameters` instead.

## November 2021

### Added

- _[cds-dk@4.6.0]_ `cds bind` binds the given service to a hana instance by storing the credentials in _.cdsrc.json_ in your user home directory [beta].
- _[cds-dk@4.6.0]_ `cds import` introduced option `--include-namespaces`, which imports the custom defined namespaces.
- _[cds-dk@4.6.0]_ `cds import` preserve documentation in CSN file for actions and functions from OData V4 EDMX file.
- _[cds-dk@4.6.0]_ `cds import` now supports reading values of the `as` option from cds.env
- _[eslint-plugin-cds@2.2.2]_ Added new rule 'no-join-on-draft-enabled-entities'
- _[eslint-plugin-cds@2.2.1]_ Optimized model loading and fixed bug in loading of 'outsider' files
- _[cds.java@1.20.1]_ The value of `DraftIsCreatedByMe` of `DraftAdministrativeData` is now properly calculated.
- _[cds.java@1.20.0]_ Built-in validations based on annotations now set the corresponding target in error messages. This ensures that error messages in Fiori are shown directly at the relevant field, instead of in a generic popup.
- _[cds.java@1.20.0]_ It is now possible to build a destination for a Remote Service declaratively in the configuration. All destination properties supported by SAP Cloud SDK can be used under the new section `cds.remote.services.<key>.destination.properties`. For a full list of supported destination properties take a look at SAP Cloud SDK's `com.sap.cloud.sdk.cloudplatform.connectivity.DestinationProperty` class.
- _[cds.java@1.20.0]_ New configuration options `cds.remote.services.<key>.destination.headers` and `cds.remote.services.<key>.destination.queries` have been added and allow to configure key-value pairs of headers / queries to be added to every outgoing request of the Remote Service.
- _[cds.java@1.20.0]_ The requested OData version is now passed to mtx-sidecar, when loading EDMX files. This enables MTX-enabled applications to use OData V2 and V4 in parallel.
- _[cds.java@1.20.0]_ ApplicationInfo and ServiceBindings from CdsEnvironment are now added to the CDS Actuator. In addition, the loaded providers are listed. Also configurations of Remote Services and Messaging Services are now correctly displayed.
- _[cds.java@1.20.0]_ Support for looking up service-manager bindings by tag `service-manager`
- _[cds.java@1.20.0]_ A warning is now printed during startup, if CAP detects a potential mismatch in the `DataSource` and `PlatformTransactionManager` used to create the default Persistence Service.
- _[cds-mtx@2.4.0]_ Added parameter `subscriptionData` to `TenantPersistenceService.deleteTenant` so that
custom handlers get more information about the tenant that is deleted. Can be `{}`
if there was a failed deletion attempt before that already removed the metadata.
- _[cds-mtx@2.4.0]_ Database deployment is now internally called via cds service `TenantPersistenceService` that
  applications can add handlers for:

  ```cds
  @protocol:'rest'
  service TenantPersistenceService {
      type JSON {
          // any json
      }
      ...
      action deployToDb(sourceDir: String, instanceData: JSON, deploymentOptions: JSON, additionalServices: JSON);
  }
  ```

  Note that this API is not meant to be called by applications but has been
  introduced to allow applications to create handlers for custom logic to be executed
  with the database deployment.
- _[cds-mtx@2.4.0]_ You can now diagnose deployed tables using `mtx/v1/diagnose/tables/<tenantId>`.

### Changed

- _[cds-dk@4.6.4]_ `cds init` uses latest Maven Java archetype version `1.20.3` for creating Java projects.
- _[cds-dk@4.6.1]_ `cds init` uses latest `Maven Java archetype` version `1.20.0` for creating Java projects.
- _[cds-dk@4.6.1]_ `cds watch` now resolves local node modules like `hdb` even though `@sap/cds` is not installed locally.  This is useful during development where `@sap/cds` shall only be installed in a 'central' location, while extra modules shall still be found in the app's dir.
- _[eslint-plugin-cds@2.2.2]_ Compile 'model' files based on CSN flavor 'inferred'
- _[eslint-plugin-cds@2.2.2]_ Compile 'outsider' files based on CSN flavor 'parsed'
- _[eslint-plugin-cds@2.2.1]_ Optimized model loading and fixed bug in loading of 'outsider' files
- _[cds.java@1.20.0]_ The enterprise-messaging multitenancy onboarding no longer restricts the application to use asynchronous onboarding by throwing an exception. Nevertheless using synchronous onboarding with enterprise-messaging is highly discouraged, as it can lead to timeout issues.
- _[cds.java@1.20.1]_ The value of `IsActiveEntity` is now removed later in the `@Before` phase of `CREATE` and `UPDATE` events. Specifically after validations have run, in order to give them the chance to build the correct message target.
- _[cds.java@1.20.0]_ The `CdsModelProvider` is now also triggered when using `CdsRuntime.getCdsModel(UserInfo, FeatureTogglesInfo)` with a `UserInfo` object where the tenant is set to `null`. Earlier the method always returned the default CDS model directly.
- _[cds-mtx@2.4.0]_ Parallel tenant upgrades have been optimized so that build results for non-extended tenants are shared and the number of database interactions is reduced.
- _[cds-mtx@2.4.0]_ An `EventTypeMissingError` is now thrown when the `eventType` parameter is missing at tenant creation.

### Fixed

- _[cds-compiler@2.10.4]_ to.sql/hdi/hdbcds:
  - Correctly complain about `exists` in conjunction with non-associations/compositions
  - Don't resolve types in action returns, as this causes issues with $self-resolution
- _[cds-compiler@2.10.4]_ to.edm(x): Be robust against transitively untyped keys in stacked view hierarchies
- _[cds-dk@4.6.4]_ `cds import` fix for TypeError issue during OData V2 EDMX conversion to CSN.
- _[cds-dk@4.6.4]_ `cds import <file_name>` fix now updates the service name in the _package.json_ with only the file name. Earlier, the service name sometimes used to be of the form `A.B`, with `A` being file name and `B` being a part of the schema namespace value in the EDMX file
- _[cds-dk@4.6.3]_ `cds watch` recovers again from compilation errors and properly prints these
- _[cds-dk@4.6.3]_ `cds import` fix for omitting empty `doc` components.
- _[cds-dk@4.6.3]_ `cds add lint` no longer duplicates initial contents in _package.json_
- _[cds-dk@4.6.3]_ `cds add data` no longer ignores imported services for which credentials are stored in the project
- _[cds-dk@4.6.2]_ `cds add lint` now correctly detects missing local `eslint`
- _[cds-dk@4.6.2]_ `cds add lint` no longer removes parts of _package.json_
- _[cds-dk@4.6.2]_ `cds add lint` no longer creates duplicate configuration entries
- _[cds-dk@4.6.1]_ `cds repl` now finds modules like `hdb` that are installed locally in the app folder
- _[cds-dk@4.6.1]_ `cds repl` now enables the `await` statement also on Windows
- _[cds-dk@4.6.1]_ `cds lint` now limits all file extensions to those allowed by the @sap/eslint-plugin-cds ESLint configuration
- _[cds-dk@4.6.0]_ `cds import` fix for reflecting only supported data types in csn for actions and functions for OData V4.
- _[cds-dk@4.6.0]_ `cds import` fix for TypeError issue during OData V4 EDMX conversion to CSN.
- _[cds-dk@4.6.0]_ `cds watch` no longer omits starting some services every other time it is restarting the process
- _[cds-dk@4.6.0]_ `cds-ts watch` now honors a local _tsconfig.json_ file
- _[cds-dk@4.6.0]_ `cds import` fix for TypeError issue during OData V2 EDMX conversion to CSN.
- _[cds-dk@4.6.0]_ `cds import` fix to generate the CSN during OData V2 EDMX conversion to CSN.
- _[cds-dk@4.6.0]_ `cds import` fix to replace the aliases with original schema namespace value.
- _[cds-dk@4.6.0]_ `cds import` adds `@cds.persistence.skip` back to imported models. Its accidental removal in 4.5.0 caused wrong database deployments of imported entities.
- _[cds@5.6.4]_ Preserve log level in Kibana formatter
- _[cds@5.6.4]_ RFC 3986 compliant segment recognition in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.6.4]_ Support for `$skiptoken` OData query option when using beta URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.6.4]_ OData requests with `$skip` and without `$top` query option to services with defined default limit (`cds.query.limit.default`)
- _[cds@5.6.4]_ Creating entities with binary keys. Currently the binary keys may be provided only as Node.js `Buffer` instances using a custom handler.
- _[cds@5.6.4]_Requests with payload containing nested arrayed elements no longer crash the application
- _[cds@5.6.3]_ `cds run` does not fail if `cds.requires.multitenancy` is explicitly set to `false`
- _[cds@5.6.3]_ Calculation of `DraftIsCreatedByMe` or `DraftIsProcessedByMe` when expanding or navigating to `DraftAdministrativeData`
- _[cds@5.6.3]_ Nested `any` in `$filter` query option
- _[cds@5.6.3]_ Crash on draft activate after draft edit for not existing composition of one, if no explicit DB service is defined
- _[cds@5.6.3]_ Typescript definition of `srv.delete` no longer leads to a duplication error
- _[cds@5.6.2]_ Handle arrayed elements using templating mechanism
- _[cds@5.6.2]_ OData requests to `$count` endpoint of ETag enabled entity
- _[cds@5.6.2]_ `cds.test` does no longer crash if executed in `cds repl` on a remote service call
- _[cds@5.6.2]_ Crash on draft activate after draft edit for not existing composition of one
- _[cds@5.6.2]_ Ensure request correlation (with default server)
- _[cds@5.6.2]_ `<entity>.texts` points to real text entity
- _[cds@5.6.2]_ Draft union with expand to to-one and to-many
- _[cds@5.6.2]_ No columns in draft lock statement (i.e., use `SELECT 1`)
- _[cds@5.6.1]_ UAA credentials lookup
- _[cds@5.6.1]_ Revert return type validation for `cds.String` for compatibility with older `@sap/cds-mtx` versions
- _[cds@5.6.1]_ Messaging: Ill-defined incoming AMQP messages will not crash the app
- _[cds@5.6.1]_ `cds compile -l` does no longer crash if called without `--to` option
- _[cds.java@1.20.3]_ Fixed a regression causing inconsistent OData responses when querying active entities and expanding `DraftAdministrativeData` (e.g. `GET /odata/v4/<service>/<entity>(ID=<id>,IsActiveEntity=true)?$expand=DraftAdministrativeData`). In case there is no corresponding draft entity (`IsActiveEntity=false`) the response unexpectedly contains the expanded association `DraftAdministrativeData` with the single field `"DraftIsCreatedByMe": false`.
- _[cds.java@1.20.1]_ Fixed a bug causing incorrectly normalized locales to be passed to the mtx-sidecar, when loading EDMX metadata. This caused metadata for locales like `zh-CN` or `1Q` to not load properly.
- _[cds.java@1.20.1]_ Fixed a bug causing message targets of validations to miss `IsActiveEntity` key values in case of draft-enabled entities.
- _[cds.java@1.20.0]_ Fixed a bug causing the row types to miss on the `Result` in case of draft queries.
- _[cds.java@1.20.0]_ Fixed a bug for remote OData requests where data types were not correctly converted for CQN `in` predicates which lead to `400` responses from remote services
- _[cds.java@1.20.0]_ Fixed a bug causing `NullPointerException` in case an OData V2 bound action was called on an entity with an ETag
- _[cds.java@1.20.0]_ Fixed a bug in the `cds-maven-plugin` causing the base directory to be calculated incorrectly in case an external parent POM was referenced in the project.
- _[cds.java@1.20.0]_ Fixed a bug in the `cds-maven-plugin` causing the goal `build` to fail if there are parameters in plugin configuration which are not valid for the goals `install-node`, `install-cdsdk`, `cds` and `generate`.
- _[cds4j@1.24.1]_ Fix result structure of deeply nested to-one expands
- _[cds-odata-v2-adapter-proxy@1.8.1]_ Change action/function return type value representation for primitive types to include nesting to conform to OData standard
- _[cds-odata-v2-adapter-proxy@1.8.1]_ Introduce proxy options `returnPrimitiveNested: false` to keep previous action/function return value representation for primitive types
- _[cds-odata-v2-adapter-proxy@1.8.1]_ Introduce proxy option `returnCollectionNested` to control collection of entity type nesting into a `results` section. Default is `true`
- _[cds-odata-v2-adapter-proxy@1.8.1]_ Fill standardized `x-correlation-id` request header in addition to `x-correlationid` for proxy requests
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Add README documentation for annotation `@Core.ContentDisposition.Type`
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Change `content-disposition` header default from `inline` to `attachment`
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Proxy option `contentDisposition` to specify default content disposition for media streams (inline, attachment)
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Unescape single quotes of action URL parameters for request body conversion
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Fix action/function return type representation for `cds.LargeString`
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Improve formatting of README and CHANGELOG
- _[cds-odata-v2-adapter-proxy@1.8.0]_ Adjust repository url
- _[cds-odata-v2-adapter-proxy@1.7.16]_ `Content-Disposition` header filename is now url encoded
- _[cds-odata-v2-adapter-proxy@1.7.16]_ Annotation `@Core.ContentDisposition.Type` to specify content disposition type (for example, inline (default), attachment, etc.)
- _[cds-odata-v2-adapter-proxy@1.7.15]_ Quote key parts of type `cds.LargeString` for uri generation
- _[cds-odata-v2-adapter-proxy@1.7.14]_ Decode url key values before conversion
- _[cds-mtx@2.4.0]_ APIs `mtx.getEdmx(tenantId, service, language, odataVersion)` and the endpoint
`/mtx/v1/metadata/edmx/<tenant-id>?name=<service>&language=<lang>&odataVersion=<version>`
now reuse the pre-build EDMX if `odataVersion` equals configured version (`cds.odata.version`)
- _[cds-mtx@2.4.1]_ Additional HDI_DEPLOY_OPTIONS do no longer affect the stability of the meta tenant creation
- _[cds-mtx@2.4.1]_ Reduction of redundant file system operations to improve stability of tenant upgrade
- _[cds-mtx@2.4.0]_ Job list returned by diagnose API now contains correct results
- _[cds-mtx@2.4.0]_ Offboarding via CDS transactions is now working without an explicit `where` clause, i.e. you can simplify

  ```js
  await transaction.delete('tenant', tenantId).where({ subscribedTenantId: tenantId })
  ```

  into

  ```js
  await transaction.delete('tenant', tenantId)
  ```

## October 2021

### Added

- _[eslint-plugin-cds@2.2.0]_ Added typings to javascript for all exposed APIs
- _[cds-compiler@2.10.2]_ Support arbitrary paths after `$user` - similar to `$session`.
- _[cds-compiler@2.10.2]_ Support scale `floating` and `variable` for `cds.Decimal` in CDL and CSN. Backend specific handling is described in their sections.
- _[cds-compiler@2.10.2]_ Allow select item wildcard (`*`) in a `select`/`projection` at any position, not just the first.
- _[cds-compiler@2.10.2]_ to.edm(x):
  - In OData V4 generate transitive navigation property binding paths along containment hierarchies and terminate on the
    first non-containment association. The association target is either an explicit Edm.EntitySet in the same EntityContainer
    or in a referred EntityContainer (cross service references) or an implicit EntitySet identified by the containment path
    originating from an explicit EntitySet. This enhancement has an observable effect only in structured format with containment
    turned on.
  - Support for scales `variable` and `floating`:
    - V4: `variable` and `floating` are rendered as `Scale="variable"`. Since V4 does not support `floating`, it is approximated as `variable`.
    - V2: `variable` and `floating` are announced via property annotation `sap:variable-scale="true"`
- _[cds-compiler@2.10.2]_ to.sql/hdi/hdbcds:
  - Reject scale `floating` and `variable`.
  - Reject arbitrary `$user` or `$session` paths that cannot be translated to valid SQL.
  - Following a valid `exists`, further `exists` can be used inside of the filter-expression: `exists assoc[exists another[1=1]]`
  - `exists` can now be followed by more than one association step.
  `exists assoc.anotherassoc.moreassoc` is semantically equivalent to `exists assoc[exists anotherassoc[exists moreassoc]]`
- _[cds-compiler@2.10.2]_ Allow defining unmanaged associations in anonymous aspects of compositions.
- _[cds-compiler@2.10.2]_ Enable extensions of anonymous aspects for managed compositions of aspects.
- _[cds-compiler@2.10.2]_ When the option `addTextsLanguageAssoc` is set to true and
  the model contains an entity `sap.common.Languages` with an element `code`,
  all generated texts entities additionally contain an element `language`,
  which is an association to `sap.common.Languages` using element `local`.
- _[cds-compiler@2.10.2]_ for.odata:
  - In `--odata-format=flat`, structured view parameters are flattened like elements.
- _[cds-compiler@2.10.2]_ to.hdbcds
  - Use "smart quotes" for naming mode "plain" - automatically quote identifier, which are reserved keywords or non-regular.
- _[cds4j@1.24.0]_ Allow to use refs with path prefix with anyMatch/allMatch
- _[cds4j@1.24.0]_ Support `byParams` to simplify updates and deletes by parameters
- _[cds4j@1.24.0]_ ORDER BY
  - new  `CQL.sort` method to create a `CqnSortSpecification`
  - new `Modifier.sort` method to modify a single `CqnSortSpecification`
- _[cds4j@1.24.0]_ Support paths to extract data from nested rows
- _[cds@5.6.0]_ New REST protocol adapter <Beta />
  - Makes use of the beta OData URL to CQN parser. Hence, almost all OData requests are supported (see the following limitations).
  - Activate via `cds.env.features.rest_new_adapter = true`
  - Out of scope (compared to OData protocol adapter):
    - OData query option `$apply`
    - Batch requests (with or without atomicity groups)
    - Draft handling
- _[cds@5.6.0]_ New GraphQL protocol adapter (alpha)
  - Serves single endpoint for all services based on `served` event at `/graphql` (subject to change).
  - Activate via `cds.env.features.graphql = true`
  - Required additional dependencies: `@graphql-tools/schema`, `express-graphql`, and `graphql`
  - Not meant for productive use! For example, authentication and authorization are out of scope.
- _[cds@5.6.0]_ Support of the following features when using beta OData URL to CQN parser (`cds.env.features.odata_new_parser`):
  - REST-style URLs (example: `GET /Foo/1`)
  - `$expand=*` query option on different nested expand levels (`$levels` is not yet supported)
  - draft handling
  - structured keys
  - streaming
  - navigation to primitive properties without `$value` query option
- _[cds@5.6.0]_ Optimized Search: Support `$filter` query option in combination with optimize `$search` and localized data (when the environment variable `cds.env.features.optimized_search` is set to `true`)
- _[cds@5.6.0]_ `GET` requests support static values in ON-conditions of composition parents when using unmanaged backlinks
- _[cds@5.6.0]_ `destinationOptions` can be configured for Remote Services
  - Example:

    ```json
      {"cds":{"requires":{
        "S4": {
          "destinationOptions": {
            "selectionStrategy": "subscriberFirst",
            ...
          }
        }
      }}}
    ```

- _[cds@5.6.0]_ `forwardAuthToken` can be configured for Remote Services
  - Example:

    ```json
      {"cds":{"requires":{
        "credentials": {
          "url": "...",
          "forwardAuthToken": true
          }
        }
      }}}
    ```

- _[cds@5.6.0]_ File to store private project settings _.cdsrc-private.json_ (should not be checked in source code management)
- _[cds@5.6.0]_ Read additional configuration from JSON files or directory structures using `CDS_CONFIG` env variable
- _[cds@5.6.0]_ Missing typescript definitions for services' `.send` shortcuts `get`, `put`, `post`, `patch`, and `delete`
- _[cds@5.6.0]_ Build VCAP_SERVICES env variable dynamically for compatibility (`cds.env.features.emulate_vcap_services`)
- _[cds@5.6.0]_ GET requests to Remote OData Service are automatically sent as `$batch` if the generated URL is too long
  - Can be configured via `cds.env.remote.max_get_url_length` (beta, default: 1028).
- _[cds@5.6.0]_ Provide ETag in response headers in case of `prefer: return=minimal`
- _[cds@5.6.0]_ Kibana formatter: log the user's id via `cds.env.log.user = true` <Beta />
  - Consider the data privacy implications!
- _[cds@5.6.0]_ Experimental support for uiflex running locally on sqlite by setting `cds.requires.extensibility.kind = uiflex`
- _[cds@5.6.0]_ Minified `cds.model` (deactivate via `cds.env.features.skip_unused = false`)
- _[cds-mtx@2.3.2]_ Additional user-provided services are now accessible for the deployment

### Changed

- _[eslint-plugin-cds@2.2.0]_ Aligned rule creation and tester api with ESLint
- _[eslint-plugin-cds@2.1.2]_ Allow not only _.js but also other file types (i.e._.ts, etc) to bypass plugin rules
- _[eslint-plugin-cds@2.1.1]_ Added preprocessor to avoid (other plugins) parsing errors on CDS files
- _[cds-compiler@2.10.2]_ to.odata: Inform when overwriting draft action annotations like `@Common.DraftRoot.ActivationAction`.
- _[cds-compiler@2.10.2]_ to.edm(x): Raise `odata-spec-violation-type` to a downgradable error.
- _[cds-compiler@2.10.2]_ for.odata:
  - In `--data-format=structured`, anonymous sub elements of primary keys and parameters are set to `notNull:true`,
    an existing `notNull` attribute is _not_ overwritten. Referred named types are _not_ modified.
- _[cds-compiler@2.10.2]_ to.edm(x):
  - Improve specification violation checks of (nested) keys:
    - All (sub-)elements must be `Nullable: false` (error).
    - Must represent a single value (error).
    - In V4 must be a specification-compliant Edm.PrimitiveType (warning).
- _[cds-compiler@2.10.2]_ to.hdi/hdbcds/sql: `$user.\<xy\>` now has `\<xy\>` added as alias - `$user.\<xy\> as \<xy\>`
- _[cds4j@1.24.0]_ the `com.sap.cds:cds4j-multitenant` module is replaced by `com.sap.cloud.mt:cds-mtx`
- _[cds4j@1.24.0]_ the execution order of the individual statements of a deep insert is now guaranteed to be parent first
- _[cds4j@1.24.0]_ GROUP BY - groups is now represented as a `List<CqnValue>`. This affects:
  - the return type of the `CqnSelect.groupBy()` method
  - the parameter types of the `Select.groupBy` methods
- _[cds4j@1.24.0]_ ORDER BY - the sort item is now represented as a `CqnValue`
- _[cds@5.6.0]_ Query API: Specified keys are now part of the target path, for example, `SELECT.from('Books', 1)` will move the key condition into `SELECT.from.ref`.
  - Deactivate during two month grace period via compat feature flag `cds.env.features.keys_into_where = true`
- _[cds@5.6.0]_ Removed duplicate integrity checks
- _[cds@5.6.0]_ Optimized search: Optimize queries for non-localized elements
- _[cds@5.6.0]_ OData to CQN parsing changed to enable remote service consumption. As a side effect, application code in `srv.on('READ', handler)` custom handlers relaying on CQN might need to be adapted. The following has changed:
  - Previously, columns in `req.query.SELECT.columns` were always defined. Now, in case there is no `$select` and `$expand` query options in the OData query, `req.query.SELECT.columns` is `undefined`.
  - Previously, if the `$expand` query option was specified in the OData query, all elements of the expanded navigation property were listed explicitly in the CQN query. Now, an `*` (asterisk) is listed instead.
- _[cds@5.6.0]_ Non-specified columns are resolved at database layer
- _[cds@5.6.0]_ `cds deploy` no longer enforces the presence of SAP CommonCryptoLib (checked with env variable `SECUDIR`) on Windows since it uses now the built-in security libraries
- _[cds@5.6.0]_ Target keys are not included into a body when sending `PATCH` requests to external services

### Fixed

- _[cds-dk@4.5.4]_ `cds watch` no longer fails if started with `--ext`, `--livereload`, or `--open` arguments
- _[cds-dk@4.5.3]_ `cds import` fix for `--dry` shortcut `-`
- _[cds-dk@4.5.3]_ `cds import` fix for missing type properties in CSN for unbounded action and function in OData V4.
- _[cds-dk@4.5.3]_ A bug with `cds init` when called in SAP Business Application Studio project wizard
- _[cds-compiler@2.10.2]_ to.sql/hdi/hdbcds: Correctly handle `exists` in conjunction with mixin-associations
- _[cds-compiler@2.10.2]_ to.edm(x):
  - Fix a bug in annotation propagation to foreign keys.
  - Don't render annotations for not rendered stream element in V2.
- _[cds-compiler@2.10.2]_ to.hdi:
  - for naming mode "hdbcds" and "quoted" parameter definitions are not quoted anymore.
- _[cds-compiler@2.10.2]_ to.hdi/sql/hdbcds:
  - Correctly handle explicit and implicit alias during flattening.
  - Raise an error for `@odata.draft.enabled` artifacts with elements without types - instead of crashing with internal assertions.
- _[cds-compiler@2.10.2]_ Properly generate auto-exposed entities for associations in parameters.
- _[cds-compiler@2.10.2]_ Correctly apply extensions to anonymous array item types.
- _[cds-compiler@2.10.2]_ Correctly apply/render annotations to anonymous action return types.
- _[cds-compiler@2.10.2]_ With CSN flavor `plain` (`gensrc`), correctly render annotations on elements
  of referred structure types as `annotate` statements in the CSN's `extensions` property.
- _[cds-compiler@2.10.2]_ to.cdl:
  - Correctly render extensions on array item types
  - Correctly render annotations on action return types
- _[cds-compiler@2.10.2]_ to/for: Correctly handle CSN input where the prototype of objects is not the "default"
- _[cds-compiler@2.10.2]_ to.hdi:
  - for naming mode "hdbcds" and "quoted" parameter definitions are now quoted.
  - for naming mode "plain", smart quotation is applied to parameter definitions if they are reserved words.
- _[cds-compiler@2.10.2]_  to.hdi/hdbcds/sql:
  - Ensure that cdl-style casts to localized types do not lose their localized property
  - Fix a small memory leak during rendering of SQL/HDBCDS.
- _[cds-compiler@2.10.2]_ to.edm(x): Remove ambiguous `Partner` attribute from `NavigationProperty`. A forward association referred
  to by multiple backlinks (`$self` comparisons) is no longer partner to an arbitrary backlink.
- _[cds4j@1.24.0]_ Fix support for associations in ON condition
- _[cds@5.6.0]_ Audit logging of non-string values
- _[cds@5.6.0]_ Query API compilation error when keys start with `{`
- _[cds@5.6.0]_ Handling of wrong `Edm.DateTimeOffset` values
- _[cds@5.6.0]_ Using UUIDs in search with beta OData URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.6.0]_ Runtime exception for READ requests with deeply nested navigation and structured keys, for example:
`GET foo/Bar/b708ad6c-2dd4-40d5-91c0-2e3eacf306d2/Info/sales(a='1010',b='10',c='00')/functions(functionName='error')`
- _[cds@5.6.0]_ The check for the minimum Node.js version now properly enforces version 12.18, i.e. aborts server startup.
- _[cds@5.6.0]_ `cds.test` fails with a clearer error message if the server wasn't started at all
- _[cds@5.6.0]_ Audit logging for modification of personal or sensitive data when using same entity as a composition child in different parent entities
- _[cds@5.6.0]_ Deleting an entity defined with managed composition of one, whereas a dependent entity is defined having an independent managed association to its composition parent no longer crashes the application
- _[cds@5.6.0]_ Audit logging for entities having arrayed elements
- _[cds@5.6.0]_ Filtering for `cds.Date` on Remote OData V2 services
- _[cds@5.6.0]_ Crash when `rollup` function was used in groupBy in OData requests
- _[cds@5.6.0]_ Or for $filter with IsActiveEntity=true for access to active entities
- _[cds@5.6.0]_ Reading draft-enabled entity with `$expand` targeting non-draft associations
- _[cds@5.6.0]_ Delete with sub-select
- _[cds@5.6.0]_ Runtime exception when streaming property annotated with `@Core.MediaType: 'application/json'`
- _[cds@5.6.0]_ Reading streams via navigation when entity containing large data is a part of a draft-enabled composition tree
- _[cds@5.6.0]_ Read draft entity with nested exists restriction
- _[cds@5.6.0]_ Activate draft of entity having `to-one` and `to-many` compositions
- _[cds@5.6.0]_ Caching issue that causes the OData `omit-values` preference in `Prefer` HTTP headers to misbehaves
- _[cds@5.6.0]_ Deletion of draft instances if multiple draft enabled entities are used within one service
- _[cds@5.6.0]_ Queries with `contains` filter targeting a remote OData V2 service
- _[cds@5.6.0]_ Schema evolution support for nested CDS entities in `cds build`
- _[cds@5.6.0]_ i18n texts with quotes and other special characters get escaped correctly if they appear in XML and JSON documents
- _[cds@5.6.0]_ Execution of plain SQL statements on SQLite
- _[cds@5.6.0]_ `Content-Disposition` header is now URL encoded
- _[cds@5.5.5]_ Action parameters set to null
- _[cds@5.5.5]_ Restrictions with "where exists" clause and filter on ambiguous fields
- _[cds@5.5.5]_ Nulled user attribute in restrictions with "where exists" clause
- _[cds@5.5.5]_ Wait for all queries to settle during deep operation
- _[cds@5.5.4]_ Backwards compatibility for `cds.tx({ user: new User ({ tenant, locale }) })`
- _[cds@5.5.4]_ Transaction API fix: `cds.tx ({ tenant }, tx => { ... })` instead of `cds.tx (tx => { ... }, { tenant })`
- _[cds@5.5.4]_ Writable and reliable `query._target`
- _[cds@5.5.4]_ `req.target` in REST with navigations in URL
- _[cds@5.5.3]_ Resolving of views for view definitions using aliases
- _[cds@5.5.3]_ `cds.test` in `cds repl` no longer yields an error with the beforeEach function not found
- _[cds@5.5.3]_ Aliasing in case of draft union when expanding more than one `to-one` association
- _[cds@5.5.3]_ Resolving of views if intermediate views are defined in database namespace
- _[cds-mtx@2.3.4]_ Fixed full build logs not being part of the jobs logs.
- _[cds-mtx@2.3.3]_ Job status reports for asynchronous tenant base model updates now contain the correct build and deployment logs.
- _[cds-mtx@2.3.3]_ With SAP HANA build task configurations having subfolders, for example, `sap/db` instead of `db`, native SAP HANA artifacts and CSV files are now deployed correctly.
- _[cds-mtx@2.3.3]_ API `mtx/v1/model/content` now also works with tenant from URL as specified
- _[cds-mtx@2.3.3]_ Update of tenant metadata containers on SAP HANA Cloud no longer fails
- _[cds-mtx@2.3.2]_ The `mtx/v1/diagnose/jobs` API will now correctly deliver job information about jobs in memory.
- _[cds-mtx@2.3.2]_ Compatibility with cds < `@sap/cds@5.5.0` when running onboarding, upgrade, or extend on java projects has been fixed.
- _[sap/ux-cds-odata-language-server-extension@1.3.5]_ Unjustified error "path does not exist" for paths pointing to entity elements defined as structured type.
- _[cds-odata-v2-adapter-proxy@1.7.13]_ Escape quotes in search string before quoting
- _[cds-odata-v2-adapter-proxy@1.7.12]_ Proxy option `propagateMessageToDetails` to always propagate root error or message to details section
- _[cds-odata-v2-adapter-proxy@1.7.12]_ Support for fetching EDMX metadata locally via `cds.mtx.getEdmx`
- _[cds-odata-v2-adapter-proxy@1.7.12]_ Support for fetching EDMX metadata remotely via MTX service URL

### Removed

- _[cds@5.6.0]_ Usage of `@sap/xsenv` is superseded with `cds.env` in Node.js cds-runtime
- _[cds@5.6.0]_ `@odata.on.insert/update` and `#user/now` are deprecated and will be removed in the next major version. Use `@cds.on.insert/update` and `$user/now` instead.

## September 2021

### Added

- _[cds-dk@4.5.1]_ `cds import` introduced option `--as` which converts EDMX file to different file formats such as CDS, CSN, and JSON.
- _[cds-dk@4.5.1]_ `cds import` introduced flag `--f`, which forcefully overwrite the content of existing cds file when specified with `--as` option.
- _[cds-dk@4.5.0]_ `cds import` supports import of functions, action, functionimport, and actionimport from both OData v2 and v4 edmx files.
- _[vscode-cds@4.3.0]_ doc comments are automatically aligned
- _[vscode-cds@4.3.0]_ new command: Restart CDS Language Support
- _[cds-compiler@2.7.0]_ to.hdi.migration: Support changes to HANA comments.
- _[cds-compiler@2.7.0]_ Support managed associations without foreign keys. Associations targeting a definition without primary keys or with an explicit empty foreign key tuple or with empty structured elements as foreign keys and their corresponding `$self` comparisons do not describe the relationship between the source and the target entity. These associations can be used to establish API navigations but cannot be used to access elements in the target entity as they cannot be transformed into a valid JOIN expression. Consequently, these associations are not added to the `WITH ASSOCIATIONS` clause or forwarded to SAP HANA CDS.
- _[cds-compiler@2.7.0]_ to.sql/hdi/hdbcds/edm(x)/for.odata: Structure/managed association comparisons (tuple comparisons) are now
also expanded in infix filters, all expressions, and all on-conditions.
- _[cds-compiler@2.7.0]_ to.hdbcds: Better locations for messages - mostly concerning keywords and duplicates
- _[cds.java@1.19.0]_ The CSV import is now more robust, for example simply ignoring files with empty content.
- _[cds.java@1.19.0]_ The Correlation ID is now stored in the Request Context and propagated in outgoing HTTP requests using header `X-CorrelationID`. On incoming requests the correlation ID is obtained from the SLF4j MDC (ensuring compatibility with [cf-java-logging-support](https://github.com/SAP/cf-java-logging-support)) or from headers `X-CorrelationID` or `X-Correlation-Id`. If no correlation ID is present when a new Request Context is opened an ID will be generated automatically and also placed in the SLF4j MDC.
- _[cds.java@1.19.0]_ The tenant ID is obtained from the `UserInfo` and placed in the SLF4j MDC on incoming requests (ensuring compatibility with [cf-java-logging-support](https://github.com/SAP/cf-java-logging-support)).
- _[cds.java@1.19.0]_ The destination name of a Remote Service now defaults to the name of the Remote Service.
- _[cds.java@1.19.0]_ The initial version of the logical messaging layer has been added, enabling applications to receive events on Remote Services and emit events from their Application Services from/to an external message broker.
- _[cds.java@1.19.0]_ Improved resilience of JMS connections, by additional reconnect attempts if the built-in JMS reconnect eventually fails. The default amount of JMS reconnect attempts was lowered from `17280` to `10` as part of this change. To increase the reconnect attempts again set `cds.messaging.services.<key>.connection.properties.MaxReconnectAttempts`
- _[cds.java@1.19.0]_ The AMQP Idle-Timeout is now configurable for Enterprise Messaging services, by setting `cds.messaging.services.<key>.connection.properties.AmqpIdleTimeout`. The default has changed from `60000` to `-1` (infinite), which is in line with the new default of the updated Enterprise Messaging library.
- _[cds.java@1.19.0]_ SAP Event Mesh service bindings can now be detected in the environment based on the `enterprise-messaging` tag.
- _[cds.java@1.19.0]_ Support [$user values](https://cap.cloud.sap/docs/guides/security/authorization#user-attrs) as [function](https://cap.cloud.sap/docs/java/working-with-cql/query-api#scalar-functions) parameters in `where`-conditions of `@restrictions`. Make sure that the `$user`attribute has a single value only (`$user.<attribute>` could be empty or a list of values, in general). Otherwise, the authorization check fails with error code 403.
- _[cds.java@1.19.0]_ The `Message` and `ServiceException` API has been extended by the following:
  - `Message#target(String, Function)`
  - `Message#target(String, Class, Function)]`
  - `ServiceException#messageTarget(String, Function)`
  - `ServiceException#messageTarget(String, Class, Function)`
  These newly added methods allow the generation of message targets with a target parameter. The target parameter defines to which event context parameter the message refers to. Based on this information the OData v4 adapter can automatically add the binding parameter in case of actions or functions to the target, if required.
- _[cds.java@1.19.0]_ Testability improvements for the `MessageTarget` by having added `MessageTarget#getRef()` to the interface. The new method `getRef()` returns a `CqnReference`, which provides `toJson()` to return it as a `Json` string. You can now, for example, use `target1.getRef().toJson()` and `target2.getRef().toJson()` of `MessageTarget` `target1` and `target2`, and compare the respective string values.
- _[cds.java@1.19.0]_ The `cds-maven-plugin` provides the new goal `version`, which prints detailed version information about a CAP Java project on the console.
- _[cds.java@1.19.0]_ Added support for `exists` predicate in `where`-conditions of instance-based authorizations. The new predicate `exists` conveniently allows to define authorization rules that are derived from associated entities (1:n). For instance, the `where`-clause `exists members[userId = $user and role = ''Editor'']'` filters all instances, which have an associated entity in `members` with matching `userId` and `role`.
- _[cds4j@1.23.0]_ Support batch selects <Beta />
- _[cds4j@1.23.0]_ Support deep bulk updates
- _[cds4j@1.23.0]_ Support deep searched updates
- _[cds4j@1.23.0]_ Support bulk updates with heterogeneous entries
- _[cds4j@1.23.0]_ Support updates on structured elements
- _[cds4j@1.23.0]_ Optimize execution of to-one expand all expands
- _[cds4j@1.23.0]_ Optimize execution of nested to-one expands
- _[cds4j@1.23.0]_ Make max batch size configurable via `cds.sql.max-batch-size`
- _[cds4j@1.23.0]_ Support `any/allMatch(<predicate>)` to apply filters on associated collections in update and delete statements
- _[cds4j@1.23.0]_ Add processing modes for the `CdsDataProcessor` validator
- _[cds4j@1.23.0]_ Use 100 ns precision for timestamps on HANA and MySQL
- _[cds4j@1.23.0]_ Support Java String datatype for `@Core.isURL`
- _[cds@5.5.1]_ Support for casting SQL function input
- _[cds@5.5.0]_ Support for minified models
- _[cds@5.5.0]_ Messaging: Webhooks use 'application/json' as the default content type
- _[cds@5.5.0]_ Messaging: If senders don't use `data` as a property of the payload, then the whole payload is interpreted as `data`
- _[cds@5.5.0]_ Messaging: Support for `$namespace` placeholder in queue name
- _[cds@5.5.0]_ Support for deletable singletons with `@odata.singleton.nullable`
- _[cds@5.5.0]_ Remote requests set the `accept-language` header according to the original request or the user's locale
- _[cds@5.5.0]_ Support for choosing data source names different from names of respective service definitions.
Example:

    ```json
      {"cds":{"requires":{
        "S4": {
          "model": "...", "service": "API_BUSINESS_PARTNER"
        }
      }}}
    ```

- _[cds@5.5.0]_ When calling `cds.tx()` to create new transactions, this now automatically inherits the current event context from `cds.context`. In case that creates issues set `cds.env.features.cds_tx_inheritance = false` to restore the former behaviour. You can still overwrite individual context settings, for example:

    ```js
    const tx = cds.tx() // inherits tenant and user
    const tx = cds.tx({ // inherits tenant
      user: new cds.User.Privileged
    })
    ```

- _[cds@5.5.0]_ Method `cds.tx()` now allows to pass a function, which will be executed within a new managed transaction, with `tx.commit/rollback()` handled automatically. For example:

    ```js
    await cds.tx (tx => {
      await tx.insert (...)
      await tx.read (...)
    })
    ```

    is equivalent to:

    ```js
    const tx = cds.tx ()
    try {
      await tx.insert (...)
      await tx.read (...)
      await tx.commit()
    } catch {
      await tx.rollback()
    }
    ```

- _[cds@5.5.0]_ Method `cds.tx({user})` now allows specifying a user as a plain string, for example:

    ```js
    cds.tx ({ user:'me' })
    ```

    is equivalent to:

    ```js
    cds.tx ({ user: new cds.User('me') })
    ```

- _[cds@5.5.0]_ Newly introduced method `cds.spawn()` allows correctly and conveniently spawning background jobs from within event handlers. Thereby ensuring a detached fully managed ACID transaction set as `cds.context` for each execution of the background job, inheriting the current event context from the outer `cds.context` by default. Usage options:

    ```js
    cds.spawn (async ()=>{
      await INSERT.into ('Ticker') ...
    })
    ```

    ```js
    cds.spawn (async ()=>{
      await INSERT.into ('Ticker') ...
    },{ after: 111 /* ms */ })
    ```

    ```js
    let n=0, handle = cds.spawn (async ()=>{
      await INSERT.into ('Ticker') ...
      if (++n>9) clearTimeout (handle)
    },{ every: 111 /* ms */ })
    ```

    ```js
    cds.spawn (async ()=>{
      await INSERT.into ('Ticker') ...
    },{ // inherits tenant
      every: 111 /* ms */,
      user: new cds.User.Privileged
    })
    ```

- _[cds@5.5.0]_ Default server is CORS-enabled for all origins if not in production
- _[cds@5.5.0]_ Default lock acquire timeout for `SELECT FOR UPDATE` via `cds.env.sql.lock_acquire_timeout`
- _[cds@5.5.0]_ Optimized search: Support `groupby` for localized data (when the environment variable `cds.env.features.optimized_search` is set to `true` on SAP HANA)
- _[cds@5.5.0]_ Out-of-the-box audit logging for deep structures without own association to data subject limited to one data subject per role per composition tree
- _[cds@5.5.0]_ Support for reading streams via `GET /<Entity>(<ID>)/$value`
- _[cds@5.5.0]_ Draft choreography: support of navigation with `SiblingEntity`
- _[cds@5.5.0]_ Support for where exists with infix filters in `@restrict`
- _[cds@5.5.0]_ Support annotation `@Capabilities.ExpandRestrictions.NonExpandableProperties`
- _[cds@5.5.0]_ `@Core.ContentID` added to OData error responses if `content-id` header is specified
- _[cds@5.5.0]_ New OData URL to CQN parser (`cds.env.features.odata_new_parser`):
  - support of navigation to primitive properties using `$value`
  - support of `not` operator with string functions (`contains`, `startswith`, `endswith`)
- _[cds@5.5.0]_ Support for default values for virtual fields
- _[cds@5.5.0]_ Payload for non-writable navigation targets removed from `req.data`
- _[cds@5.5.0]_ `cds build` supports i18n message bundles for Java and Nodejs apps and a default CSN format option for Java
- _[cds@5.5.0]_ View resolving considers renaming of foreign keys and `excluding` names when `columns` are explicitly provided in CQN
- _[cds@5.5.0]_ Resilient acquire for SAP HANA via `cds.env.requires.db.connection_attempts = <number>` (alpha; hard max of 3 enforced)
- _[cds@5.4.6]_ Support for nested where exists in `@restrict` (CRUD-only; beta)
- _[cds-mtx@2.3.0]_ Tenant upgrade is now internally called via CDS service `TenantPersistenceService` that
applications can add handlers for:

  ```cds
  @protocol:'rest'
  service TenantPersistenceService {
      type JSON {
          // any json
      }
      ...
      action upgradeTenant(tenantId: UUID, instanceData: JSON, deploymentOptions: JSON) returns JSON;
  }
  ```

Please note that this API is not meant to be called by applications but has been introduced to allow applications to create handlers for custom logic to be executed with the tenant upgrade.

- _[cds-mtx@2.3.0]_ <Beta /> It is now possible to get the EDMX for services with a different OData version than the version configured
for the build. API `mtx.getEdmx(tenantId, service, language, odataVersion)` and the endpoint
`/mtx/v1/metadata/edmx/<tenant-id>?name=<service>&language=<lang>&odataVersion=<version>` now supports a parameter `odataVersion`.
Please note that the output is compiled on-the-fly if `odataVersion` is specified which has potential impact on the performance. You will also have to run a tenant upgrade for existing tenants (`/mtx/v1/model/upgrade`) to get a correct result.
- _[cds-mtx@2.3.0]_ Extensions can now be reset via API `/mtx/v1/model/reset` and `/mtx/v1/model/asyncReset`.
- _[cds-mtx@2.3.0]_ The job removal timeout is now configurable using `cds.mtx.jobs.removalTimeout`.
- _[cds-mtx@2.3.0]_ `mtx.jobs.maxParallelExecutions` can now be used to parallelize asynchronous jobs. The default is `2`.

### Changed

- _[cds-dk@4.5.2]_ `cds init` uses latest `Maven Java archetype` version `1.19.0` for creating Java projects.
- _[cds-dk@4.5.1]_ Marked `cds lint` as beta again to further investigate issues from 'extends' via prettier plugin.
- _[cds-dk@4.5.0]_ `cds init` uses latest `Maven Java archetype` version `1.18.1` for creating Java projects.
- _[eslint-plugin-cds@2.1.0]_ Source code is now Javascript only
- _[eslint-plugin-cds@2.1.0]_ Rule API simplified to only include report and cds
- _[eslint-plugin-cds@2.1.0]_ Added new rules `no-db-keywords` and `require-2many-oncond`
- _[eslint-plugin-cds@2.1.0]_ Filter out lint messages when run from command line with custom formatter
- _[vscode-cds@4.3.0]_ consume `cds-lsp 5.3.0`
- _[vscode-cds@4.3.0]_ consume `cds-compiler 2.7.0`
- _[vscode-cds@4.3.0]_ translation support is now lazy
- _[vscode-cds@4.3.0]_ performance improvements when translation files changed
- _[vscode-cds@4.3.0]_ last workspace/symbols are cached now to speed up CAP explorer
- _[vscode-cds@4.3.0]_ user setting `cds.workspace.scanCsn` has now three modes: Off, ByFileExtension (new default) and InspectJson
- _[cds-compiler@2.7.0]_ Updated OData vocabularies 'Common', 'Core'
- _[cds-compiler@2.7.0]_ to.sql/hdi/hdbcds: Invalid (i.e. not expandable) usage of structures is now checked - an error is raised
- _[cds.java@1.19.0]_ The technical messaging layer no longer replaces `.` with `/` in topic names that match the qualified name of an event definition in the CDS model.
- _[cds.java@1.19.0]_ Methods for message target generation in the `Message` and `ServiceException` API that accept a target prefix have been deprecated. Instead, methods are provided that enable to specify a target parameter of the event context that the message refers to.
- _[cds.java@1.19.0]_ In both `Message` and `ServiceException` the API to pass a prefix and an entity name has been deprecated:
  - `Message#target(String, String, Function)`
  - `ServiceException#messageTarget(String, String, Function)`
  Instead, paths can now also be built with arbitrary parameters (for example, entity-typed action input parameters) using:
  - `Message#target(Function)`
  - `ServiceException#messageTarget(Function)`
  Specifying a prefix is no longer necessary as it is added automatically if required.
- _[cds.java@1.19.0]_ `TenantProviderService#readTenants()` resp. `TenantProviderService#readTenantsInfo()` return a `List` with a single `null` entry resp. a `TenantInfo` with `null` indicating the default provider tenant in case of a **single tenant**(ST) application. In previous versions the returned lists was empty. There is no change for multitenant(MT) applications.
- _[cds.java@1.19.0]_ When switching to privileged user with `RequestContextRunner#privilegedUser()`, not only the tenant, but also additional user attributes from the current user are propagated which contain more detailed tenant information.
- _[cds@5.5.1]_ Support for casting SQL function input
- _[cds@5.5.0]_ Messaging: Webhooks will always generate tokens
- _[cds@5.5.0]_ Messaging: In multitenancy mode, messaging artifacts are only deployed to subscribers (unless the service option `deployForProvider` is set to `true`)
- _[cds@5.5.0]_ Messaging: Incoming messages without corresponding handlers are not acknowledged
- _[cds@5.5.0]_ If a service executes a query targeting a projection on one of its entities, the query is resolved along with projections to an entity known by the executing service. The result is post-processed to reflect the expected result of the incoming query. The reason is that no handlers of the executing service were executed as they did not know the query target.
  - Deactivate during two month grace period via compact feature flag `cds.env.features.resolve_views = false`
- _[cds@5.5.0]_ Use `@sap/cds-compiler`'s `smartId` function to determine whether a reference needs to be quoted.
  - Allows the use of non-word characters in column names, for example `entity Foo { ![bar/bz]: String; }`.
  - Support for columns with spaces with feature flag `cds.env.features.spaced_columns`.
  - Note: Restrictions in other layers (example: OData's simple identifier schema) still apply.
  - Note: Expressions in references (example: `ref: ['foo as bar']`) currently works but was never intended to and will be removed in future versions.
- _[cds@5.5.0]_ Clear draft data based on their draft UUID instead of via deep delete
- _[cds@5.5.0]_ Support `@sap/cds-compiler`'s changes for DB constraints: managed and unmanaged compositions of one behave like associations. This means that only `$self`-managed composition of one gets `DELETE CASCADE` constraint. Since all other "2one" cases require extra `DELETE` handled by the runtime, that constraint is ignored.
- _[cds@5.5.0]_ Value with regards to date and time functions are not converted to strings in the OData protocol adapter
- _[cds@5.5.0]_ No placeholders for `LIMIT` to enable statement caching during pagination
- _[cds@5.5.0]_ Arrayed elements stringified in DB layer
- _[cds@5.5.0]_ Return values of handlers will have precedence over database reads
- _[cds@5.5.0]_ Error of a failed request to a Remote Service contains now the response payload if available
- _[cds@5.5.0]_ Configuring ad-hoc destinations via `credentials.url` is now allowed in `NODE_ENV=production`
- _[cds@5.5.0]_ New OData URL to CQN parser (`cds.env.features.odata_new_parser`):
  - CQN for `$select` and `$expand` columns
- _[cds@5.4.6]_ Support for nested where exists in `@restrict` (CRUD-only; beta)
- _[cds-mtx@2.3.0]_ Tenant updates are now parallelized. You can set the pool size using `mtx.jobs.parallelUpgradeLimit`. The default is `4`.
- _[cds-mtx@2.3.0]_ `mtx.jobs.intervalTimeout` is now deprecated, as the job queue does not require polling any more.
- _[cds-mtx@2.3.0]_ The default queue size for asynchronous jobs has been increased to `1000`.
- _[cds-mtx@2.3.0]_ In case of errors, the full `hdi-deploy` logs are now also printed for the default logging level.
- _[cds-sidecar-client@1.2.0]_ This package is no longer maintained.  Use `@sap/cds-dk` instead.

### Fixed

- _[cds-dk@4.5.2]_ `cds deploy --to sqlite` now writes `credentials.database` again to package.json
- _[cds-dk@4.5.0]_ `cds watch` additional CLI args were not passed to launched process, e.g. `--odata x4`.
- _[cds-dk@4.5.0]_ `cds import` fix for TypeError issue during OData v4 edmx conversion to csn.
- _[cds-dk@4.5.0]_ `cds import` fix for multi-line documentation text in OData v2 edmx file.
- _[cds-dk@4.5.0]_ `cds import` fix for v4 csn generation when non standard OData vocabularies are referred.
- _[cds-dk@4.5.0]_ `cds add data`
  - no longer fails for entities without keys
  - no longer creates csv files for synthetic draft entities
  - no longer creates entries for virtual fields
  - no longer skips over entities marked with `@cds.persistence.skip`, which is true for 'external' entities created by `cds import`.
- _[cds-dk@4.5.0]_ `cds init --add` handles comma list correctly.
- _[cds-dk@4.4.2]_ Use latest `cds-sidecar-client` to fix file upload in `cds activate`
- _[cds-dk@3.5.3]_ Use latest `cds-sidecar-client` to fix file upload in `cds activate`
- _[vscode-cds@4.3.0]_ certain localized elements were still indexed
- _[vscode-cds@4.3.0]_ new i18n entry in properties file has corrupted existing last entry
- _[vscode-cds@4.3.0]_ inconsistency in dependency calculation could have led to incorrect re-validations after a change
- _[cds-compiler@2.7.0]_ Fix memory issue: do not keep reference to last-compiled model.
- _[cds-compiler@2.7.0]_ Fix dump, which occurred when trying to report that the user has defined an element to be both `key` and `localized` if
  `localized` was inherited via the provided type, or in the generated entity for a managed composition of aspect.
- _[cds-compiler@2.7.0]_ Properly auto-expose targets of associations in parameters and `many`.
- _[cds-compiler@2.7.0]_ for.Odata:
  - Fix handling of annotation `@cds.odata.valuelist` in conjunction with associations in structures using flat-mode and sqlMapping set to plain.
  - Set correctly the $localized property in the OData backend resulting CSN for artifacts that have localized convenience views.
- _[cds-compiler@2.7.0]_ to.edm(x):
  - Fix rendering of structured referential constraints and nested partnerships in combination with `$self` comparisons.
  - Fix merging of `@Capabilities` annotations while transforming them into `NavigationCapabilities` from the containee into the container.
- _[cds-compiler@2.7.0]_ to.sql/hdi/hdbcds:
  - Fix a bug in Association to Join translation in multi-level association redirection in combination with `$self`.
  - Correctly flatten paths with filters or parameters.
  - Improve error message in case of invalid `exists`.
- _[cds-compiler@2.7.0]_ to.sql/hdi/hdbcds/edm(x)/for.odata: Correctly handle tuple expansion in subqueries of Unions.
- _[cds-compiler@2.7.0]_ Make `;` optional before `}` in all circumstances (was not the case with `many`).
- _[cds-compiler@2.7.0]_ to.sql/hdi/hdbcds/edm(x): More graceful handling of CSN input where associations do not have `keys` or an `on`-condition
- _[cds.java@1.19.0]_ Fixed a bug causing element paths (e.g. `details.filename`) to be handled incorrectly in `@Core.MediaType` or `@Core.ContentDisposition.Filename` annotations.
- _[cds.java@1.19.0]_ Fixed a bug causing synchronous tenant subscription to fail with the exception message "Only asynchronous SaaS subscription is supported when using enterprise-messaging with multitenancy" but messaging is actually configured with single tenant mode.
- _[cds.java@1.19.0]_ Fixed a bug causing a draft child entity to have the wrong `DraftUuid` if it was created through a cqn path expression via an association.
- _[cds.java@1.19.0]_ Fixed a bug that caused invalid OData aggregation requests with `$apply` when defined on target entities with instance-based authorizations.
- _[cds.java@1.19.0]_ Fixed a bug where the `LastChangeDateTime` of a draft was not changed if a child entity was deleted or added.
- _[cds.java@1.19.0]_ Fixed a bug in `cds-maven-plugin`, where it incorrectly determines the working directory with maven 3.8.x and a remote parent pom.
- _[cds.java@1.18.3]_ Fixed a bug in OData V4 adapter, which caused a `BufferOverflowException` when processing batch requests with exact size of 16376 characters.
- _[cds.java@1.18.2]_ Fixed a bug causing the Multitenancy HealthCheck to run into a `NullPointerException` resulting in the database being considered as `DOWN`.
- _[cds.java@1.18.2]_ Fixed a bug causing issues in decoding Base64 Strings in responses from remote OData services.
- _[cds.java@1.18.1]_ Fixed a bug causing `401 Unauthorized` errors when accessing the SaaS Registry due to the usage of expired JWT tokens.
- _[cds.java@1.18.1]_ Fixed a bug causing the `MtUnsubscriptionClearDatasourceHandler` to not be loaded in a valid multi-tenant scenario.
- _[cds.java@1.18.1]_ Adopted fixes of cds4j `1.22.1`
- _[cds4j@1.23.0]_ Code generator:
  - Fix case of inherited interface name
  - Fix return type of inline defined arrayed type for EventContext interfaces
  - Support structured elements as parameter of action/function
- _[cds4j@1.23.0]_ Apply @cds.on.insert also for excluded elements
- _[cds4j@1.23.0]_ Use 1 ms precision for timestamps on Mongo DB
- _[cds4j@1.23.0]_ Fix NotNullConstraintException for temporal aspects
- _[cds4j@1.23.0]_ Non-matching single updates now return a result with a single empty row to be consistent with the result of bulk updates
- _[cds4j@1.22.1]_ Code generator: Fix of return type of inline structured type
- _[cds@5.5.2]_ `$expand` requests with virtual fields with the same name in root and child
- _[cds@5.5.2]_ Requests expanding `DraftAdministrativeData` when compound keys are used
- _[cds@5.5.2]_ `SELECT.columns` with an empty array as argument
- _[cds@5.5.2]_ Queries with complex lambda filters
- _[cds@5.5.1]_ Typo in `DELETE` method of `cds.test`
- _[cds@5.5.1]_ View resolving for intermediate queries
- _[cds@5.5.1]_ Result post processing for renamed expands
- _[cds@5.5.1]_ Don't use placeholder values for `null`
- _[cds@5.5.0]_ `SELECT.from (Foo, f => f.bar('*').where(...))` resulted in a runtime exception
- _[cds@5.5.0]_ Preserved locales are now considered when accessing database tables
- _[cds@5.5.0]_ Integrity checks for compositions by draft enabled entities
- _[cds@5.5.0]_ Constant columns must not be quoted anymore, i.e. `{ val: "'myValue'", as: "myColumn"}` must be changed to `{ val: "myValue", as: "myColumn" }`
- _[cds@5.5.0]_ Accidental `tx.run()` after prior `tx.commit/rollback()` lead to acquired connections not returned to pool. This is detected and disallowed now. In case that creates issues set `cds.env.features.cds_tx_protection = false` to restore the former behaviour.
- _[cds@5.5.0]_ Structured keys are correctly resolved with pegjs-based parser
- _[cds@5.5.0]_ Template processing for columns with spaces in their name
- _[cds@5.5.0]_ Deep delete with recursions in composition tree (with limited recursion depth)
- _[cds@5.5.0]_ Draft edit with recursions in composition tree (with limited recursion depth)
- _[cds@5.5.0]_ `emit` for messaging services now also works in custom express middlewares
- _[cds@5.5.0]_ `req.query` is a CQN object (previously array with one entry) in case of batch insert in REST adapter
- _[cds@5.5.0]_ HasActiveEntity flag with expand
- _[cds@5.5.0]_ `compile.to.serviceinfo` now honors default Java endpoint paths if none are configured in _application.yaml_
- _[cds@5.5.0]_ `PATCH` request to a non-existent entity annotated with the `@PersonalData` annotation
- _[cds@5.5.0]_ `req.diff()` while deep updating via composition
- _[cds@5.5.0]_ Convert data type of elements in sub-entities (to one association) when forwarding responses to external services
- _[cds@5.5.0]_ Update children of a composition of many (`INSERT > DELETE`) with `PATCH/PUT` having at the same time another association to one composition child respects foreign key constraints.
- _[cds@5.5.0]_ Handling of virtual fields used in the `$filter` query option of navigation requests
- _[cds@5.5.0]_ Copy texts in default language from active to draft table on draft edit
- _[cds@5.5.0]_ Optimized search: Escape double quotation marks and backslashes (when the environment variable `cds.env.features.optimized_search` is set to `true`)
- _[cds@5.5.0]_ Update for multiple rows
- _[cds@5.5.0]_ Expand during draft union
- _[cds@5.5.0]_ Validate content type for `$batch` requests
- _[cds@5.5.0]_ Support for `SELECT` statements in `where` clauses when resolving views
- _[cds@5.5.0]_ `INSERT.rows()` does not silently fill in `INSERT.entries` anymore &rarr; use `INSERT.entries()` to do so instead.
- _[cds@5.5.0]_ `UPDATE(Foo).with({foo:{'=':'bar'})` erroneously produced:

  ```js
  {UPDATE:{..., with:{foo:{ref:['bar']}}}} //> wrong
  ```

  instead of:

  ```js
  {UPDATE:{..., data:{foo:'bar'}}} // correct
  ```

  &rarr; to produce the ref, use one of:

  ```js
  UPDATE(Foo).with ({foo:{ref:['bar']}})
  UPDATE(Foo).with `foo=bar`
  ```

- _[cds@5.5.0]_ `UPDATE.with` property stays undefined until actually filled with data
- _[cds@5.5.0]_ Differentiate between require and initialize error of audit logging client
- _[cds@5.5.0]_ The built-in model tree-shaking erroneously deleted explicitly modeled `.texts` entities
- _[cds@5.5.0]_ Actions and functions with `Integer` response type in REST services
- _[cds@5.5.0]_ Occasional drop of conditions in `WHERE` depending on the value when using structured types
- _[cds@5.5.0]_ `PATCH` fixed for singletons and when having a keyless, for example, managed to-one navigation path
- _[cds@5.5.0]_ Internal server error when forwarding a query to an external service whose target entity does not contain keys
- _[cds@5.5.0]_ Nested where exists in `@restrict` via navigation (CRUD-only; beta)
- _[cds@5.5.0]_ Expand to one in draft union
- _[cds@5.5.0]_ Patch to autoexposed entity through composition of aspect from Fiori Elements
- _[cds@5.5.0]_ Diff for delete in draft
- _[cds@5.5.0]_ Streaming requests on views with joins no longer crash the application
- _[cds@5.4.6]_ Inverse transition mapping calculation
- _[cds@5.4.6]_ Skip empty structures during deep update
- _[cds@5.4.5]_ Processing of null elements during deep update
- _[cds@5.4.5]_ Performance issue during template processing
- _[cds@5.4.4]_ For drafts, the query parameter `$top=0` in combination with `$count=true` now returns the correct `@odata.count` value
- _[cds@5.4.4]_ Deep delete with composition of one with structured key in target
- _[cds@5.4.4]_ Implicit delete of child with structured key
- _[cds@5.4.4]_ Update of deeply nested entity with structured key
- _[cds@5.4.4]_ Order by join column during draft union
- _[cds@5.4.4]_ Skip calculated properties while following projections
- _[cds@5.4.4]_ The `with parameters` clause is now correctly handled in sub selects if the locale parameter exceeds 3 characters
- _[cds@5.4.4]_ Statement already finalized error on SQLite
- _[cds-mtx@2.3.1]_ Configuration `mtx.jobs.parallelUpgradeLimit` is now correctly limiting the number of parallel tenant upgrades.
- _[cds-mtx@2.3.0]_ The maximum filename length of sources files that are stored with the tenant metadata has been increased from 200 to 500. The tenant metadata store will be updated accordingly with any tenant operation (extend, upgrade).
- _[cds-mtx@2.3.0]_ Exceptions from asynchronous jobs are now visible in the application log again
- _[cds-sidecar-client@1.1.23]_ Re-enabled compatibility with CDS Compiler v1
- _[cds-odata-v2-adapter-proxy@1.7.11]_ Convert ContentID for warning messages and error body and propagate to details
- _[cds-odata-v2-adapter-proxy@1.7.11]_ Fix batch boundary parsing from content type with charset definition
- _[cds-odata-v2-adapter-proxy@1.7.11]_ Functions `startswith` and `endswith` respect proxy option `caseInsensitive`
- _[cds-odata-v2-adapter-proxy@1.7.10]_ Fix query options not part of action parameters
- _[cds-odata-v2-adapter-proxy@1.7.10]_ Proxy option `caseInsensitive` to transform search function for example, `substringof` to case insensitive variant
- _[cds-odata-v2-adapter-proxy@1.7.9]_ Add metadata type of inline return type for actions and functions
- _[cds-odata-v2-adapter-proxy@1.7.9]_ Proxy option `messageTargetDefault` to specify default message target, if undefined
- _[cds-odata-v2-adapter-proxy@1.7.9]_ Empty proxy option `messageTargetDefault` leaves message target untouched

### Removed

- _[cds-compiler@2.7.0]_ The internal non-enumerable CSN property `$env` has been removed from the compiled CSN.
- _[cds@5.5.0]_ Direct usage of body-parser
- _[cds@5.5.0]_ Queries constructed from `cds.ql` do not have the _internal_ property `cqn` anymore
- _[cds@5.5.0]_ Unofficial variant `SELECT({'expand(foo)':['a','b']})` is not supported anymore
&rarr; use one of these official APIs for expands instead:

  ```js
  SELECT(x => { x.a, x.foo (f =>{ f.b, f.c }) })
  SELECT(['a',{ref:['foo'], expand:['b','c']}])
  ```

- _[cds@5.5.0]_ Unofficial variant `SELECT.orderBy('foo','desc')` is not supported anymore
&rarr; use one of these official APIs instead:

  ```js
  SELECT.from(Foo).orderBy({foo:'desc'})
  SELECT.from(Foo).orderBy('foo desc')
  ```

- _[cds@5.5.0]_ Unofficial variant `SELECT.orderBy('foo, bar desc')` is not supported anymore
&rarr; use one of these official APIs instead:

  ```js
  SELECT.from(Foo).orderBy({foo:1,bar:-1})
  SELECT.from(Foo).orderBy('foo','bar desc')
  SELECT.from(Foo).orderBy `foo, bar desc`
  ```

- _[cds@5.5.0]_ Unofficial variant `SELECT.where({ or: [{ foo: 'bar' }, { foo: 'baz' }] })` is not supported anymore
&rarr; use one of these official APIs instead:

  ```js
  SELECT.from(Foo).where({ foo: 'bar', or: { foo: 'baz' } })
  SELECT.from(Foo).where `foo='bar' or foo='baz'`
  ```

- _[cds@5.5.0]_ Usage of SQL window functions during expand on HANA
- _[cds@5.5.0]_ Hidden symbol for where clause elements originating from `@restrict`
- _[cds@5.5.0]_ Error masking gate keeper for `cds.env.log.levels.cli`

## August 2021

### Added

- _[cds.java@1.18.0]_ If the new property `cds.errors.combined` is set to `true` (default setting) CAP's default validations are gathered using the `Messages` API. This allows multiple validation errors to be returned at once to the client. At the end of the Before handler phase `Messages.throwIfError()` is automatically called to abort the event processing in case of errors. Applications are encouraged to replace places where they use `ServiceException` for validations with calls to the `Messages` API to contribute to the set of validation errors and remove explicit calls of `Messages.throwIfError()` and rather rely on the framework for this.
- _[cds.java@1.18.0]_ Multitenant Enterprise Messaging Services now support receiving events through webhooks. They integrate with the tenant onboarding process to create webhooks, queues and subscriptions for each tenant in the enterprise-messaging service instance.
- _[cds.java@1.18.0]_ Added initial version of the `AuditLogService` with a default handler using a logger as target.
- _[cds.java@1.18.0]_ Added new feature `cds-feature-auditlog-v2` providing a handler to send auditlog messages to AuditLog Service V2.
- _[cds.java@1.18.0]_ Added Spring Boot logger groups to group multiple CAP loggers under a well-defined stable name.
- _[cds.java@1.18.0]_ Added the possibility to explicitly load a _default-env.json_ file from classpath resources, by prefixing the path passed to the property `cds.environment.local.defaultEnvPath` with `classpath:`
- _[cds4j@1.23.0]_ prefixing the path passed to the property `cds.environment.local.defaultEnvPath` with `classpath:`
- _[cds4j@1.23.0]_ Support resolving views with literals in the projections
- _[cds4j@1.23.0]_ Support session context variables ($user.id, $user.locale, $at, $now) in on-conditions of associations
- _[cds4j@1.23.0]_ Support simple insert and select on structured elements
- _[cds4j@1.23.0]_ Anonymize literals when logging CQN select statements (configurable via cds.ql.logging.log-values)
- _[cds4j@1.23.0]_ Static evaluation and optimization of predicate expressions
- _[cds4j@1.22.0]_ Support resolving views with literals in the projections
- _[cds4j@1.22.0]_ Support session context variables ($user.id, $user.locale, $at, $now) in on-conditions of associations
- _[cds4j@1.22.0]_ Support simple insert and select on structured elements
- _[cds4j@1.22.0]_ Anonymize literals when logging CQN select statements (configurable via cds.ql.logging.log-values)
- _[cds4j@1.22.0]_ Static evaluation and optimization of predicate expressions
- _[cds-compiler@2.5.0]_ Allow to extend existing array annotation values via the ellipsis operator `...`.
  An ellipsis may appear exactly once at an arbitrary position in the top level array of an `annotate` directive. Only array values can be merged into arrays and unapplied ellipses are removed from the final array value. Annotation layering rules remain unaffected.
- _[cds-compiler@2.5.0]_ to.sql/hdi/hdbcds:
  - Doc comments are translated into HANA comments (or into `@Comment` annotation for `to.hdbcds`).
  Such comments are possible on entities, views, elements of entities and `to.hdbcds` also supports comments on view columns.
  Generation can be disabled via option `disableHanaComments`. Entities/views (and their elements/columns)
  annotated with `@cds.persistence.journal` for `to.hdi`/`to.sql` will not have comments rendered.
  - Generation of temporal `WHERE` clause can be suppressed by annotating the `validFrom`/`validTo` elements of the projection with `false` or `null`.
- _[cds-compiler@2.5.0]_ to.sql/hdi/hdbcds/edm(x)/for.odata: Structure/managed association comparisons (tuple comparisons) are now
  also expanded in `WHERE` and `HAVING` - this was previously only supported in on-conditions.
- _[cds-compiler@2.5.0]_  `cdsc` now internally uses SNAPI.
- _[cds-compiler@2.5.0]_ to.hdi.migration:
  - Validate that the two supplied CSNs are compatible.
  - Improve delta-mechanism to not render superfluous `[ALTER|DROP|ADD]` statements for unchanged SQL.
- _[cds@5.4.0]_ Messaging: Support for format `cloudevents`
- _[cds@5.4.0]_ Messaging: Support for `@topic`
- _[cds@5.4.0]_ Messaging: Support for `subscribePrefix` and `publishPrefix`
- _[cds@5.4.0]_ Support for `ReadByKeyRestrictions` annotations
- _[cds@5.4.0]_ Support for OData `omit-values` preference in `Prefer` HTTP header
- _[cds@5.4.0]_ Object variant of service methods
- _[cds@5.4.0]_ Brazilian portuguese (`pt_BR`) is now in the list of [normalized locales](https://cap.cloud.sap/docs/guides/uis/i18n#normalized-locales)
- _[cds@5.4.0]_ Support for actions and functions on Remote Service
- _[cds-mtx@2.2.2]_ There are new APIs for diagnosing memory, asynchronous jobs, and HDI containers. They can be called via
  - `/mtx/v1/diagnose/memory`
  - `/mtx/v1/diagnose/jobs`
  - `/mtx/v1/diagnose/container/<tenantId>`
  Note that with this change, the `/mtx/v1/model/diagnose` API is not available any more.
  The new API will work out of the box with `@sap/cds >= 5.5.0`, but you have to opt-in with earlier versions by setting:

  ```json
  "mtx": {
    "api": {
      "diagnose": true
    }
  }
  ```

  in your _package.json_.
- _[cds-mtx@2.2.1]_ `working_set` and `exclude_filter` can now be used as `HDI_DEPLOY_OPTIONS`
- _[cds-mtx@2.2.1]_ Job log is now cleaned up with each startup to avoid garbage after application shutdowns or crashes.
Maximum age of entries can be configured via cds configuration `mtx.jobs.cleanup.regular` and `mtx.jobs.cleanup.stale` (in milliseconds). "Regular" refers to finished or failed jobs (default is 30 min), "Stale" refers to queued or running jobs (default is 7 days).
- _[cds-mtx@2.2.1]_ <Beta /> The tenant specific URL returned to the `saas-registry` can now be specified
via two environment variables `SUBSCRIPTION_URL` and `SUBSCRIPTION_URL_REPLACEMENT_RULES`.<br>
The following example uses the MTX application URL and turns it into the UI
application URL by replacing the application name suffix:

  ```yaml
  SUBSCRIPTION_URL: ${protocol}://\${tenant_subdomain}-${default-uri}
  SUBSCRIPTION_URL_REPLACEMENT_RULES: [['srv', 'app']]
  ```

  `\${tenant_subomain}` will be replaced by the domain of the subscribed tenant.

### Changed

- _[cds-dk@4.4.0]_ `cds init` uses latest `Maven Java archetype` version `1.17.0` for creating Java projects.
- _[cds.java@1.18.0]_ The cds-maven-plugin now installs `@sap/cds-dk` in version `^4` by default.
- _[cds.java@1.18.0]_ The archetype now generates a project that uses H2 instead of SQLite as in-memory database.
- _[cds.java@1.18.0]_ Remote Services and Application Services now both try to project queries targeting entities defined outside of their service's namespace onto entities inside of their service's namespace, before dispatching the event to event handlers.
- _[cds.java@1.18.0]_ Environment information such as service bindings, application information or properties are no longer statically available through `Properties` or `PlatformEnvironment` classes, but can now be accessed through the `CdsRuntime` via `CdsRuntime.getEnvironment()`. This enables to create multiple CDS runtimes with different service bindings or properties in a single process. This is especially useful for Spring Boot tests in which multiple different ApplicationContext instances are launched, which is now finally supported with CAP Java.
- _[cds.java@1.18.0]_ Service bindings or application information can now be contributed by `ServiceBindingProvider` or `ApplicationInfoProvider` implementations, which are registered on the `CdsRuntime` through the `CdsRuntimeConfigurer`. They can be registered on the `CdsRuntimeConfigurer` using an implementation of `CdsRuntimeConfiguration` during the `environment` phase. With this change the internal `PlatformEnvironment` approach has been removed.
- _[cds.java@1.18.0]_ The events on the `MtSubscriptionService`, which are triggered by a callback from the `mtx-sidecar` (e.g. `EVENT_ASYNC_SUBSCRIBE_FINISHED`), are now asynchronous to the sidecar's request. This allows long-running tasks to be implemented during the processing of these events and before the SaaS Registry is updated with the new subscription state.
- _[cds-compiler@2.5.0]_ - If the first source provided to the compile command has a `$sources` property (whether enumerable or not) which is an array of strings,
  use that instead of calculating one.
- _[cds-compiler@2.5.0]_   Updated OData vocabularies 'Aggregation', 'Analytics', 'Authorization', 'Capabilities', 'CodeList', 'Common', 'Communication', 'Core', 'Graph', 'HTML5', 'Measures', 'ODM', 'PersonalData', 'Repeatability', 'Session', 'UI', 'Validation'
- _[cds@5.4.0]_ In multitenant `enterprise-messaging`: If a tenant subscribes, the messaging artifact generation is awaited. In your provisioning service configuration, make sure to set `onSubscriptionAsync` to `true` and `callbackTimeoutMillis` to more than 10 minutes.
- _[cds@5.4.0]_ In `enterprise-messaging`: Messages are sent via HTTP
- _[cds@5.4.0]_ Computed values are preserved during draft activate
- _[cds@5.4.0]_ Messaging: No more topic manipulation per default
- _[cds@5.4.0]_ For consistency reasons `cds build` now determines the default model path using cds resolve
- _[cds@5.4.0]_ Match XSUAA's user attribute value `$UNRESTRICTED` case insensitive
- _[cds-mtx@2.2.2]_ Fixed a regression where the `ExtendCDSdelete` scope was required for extension activations even without `undeployExtension` set to `false`.
- _[cds-mtx@2.2.2]_ Fixed an application crash at startup when `MTX_DISABLE_META_TENANT_CREATION` is set and no Instance/Service Manager credentials are available.
- _[cds-mtx@2.2.1]_ Native HANA table data properties files are now supported.
- _[cds-mtx@2.2.1]_ `MT_LIB_TENANT-*`-prefixed tenants are now ignored when requesting `mtx/v1/provisioning/tenant`. This fixes a compatibility problem when using the `CDS_MULTITENANCY_DATASOURCE_HANADATABASEIDS` environment variable.
- _[cds-mtx@2.2.1]_ To reduce the number of logs, the HDI deployment output is now only logged in debug mode.
- _[cds-mtx@2.2.1]_ Tenant metadata request via `mtx/v1/provisioning/tenant/` are now cached.
- _[cds-mtx@2.2.1]_ `/mtx/v1/metadata/edmx/` will now throw `ServiceMissingError` if no `name` query parameter is passed, instead of defaulting to `CatalogService`.

### Fixed

- _[cds-dk@4.4.1]_ Use `@sap/eslint-plugin-cds@2.0.4`
- _[cds-dk@4.4.0]_ Fixed bug when logging in Business Application Studio during `New Project from Template` wizard.
- _[cds-dk@4.4.0]_ `cds import` fix for `<documentation>` tag in Odata V2 for EntityType and ComplexType.
- _[cds-dk@4.4.0]_ `cds help` does not crash with `this.load is not a function` in exotic installations
- _[cds.java@1.18.1]_ Fixed a bug causing element paths (for example, `details.filename`) to be handled incorrectly in `@Core.MediaType` or `@Core.ContentDisposition.Filename` annotations.
- _[cds.java@1.18.1]_ Fixed a bug causing the Multitenancy HealthCheck to run into a `NullPointerException` resulting in the database being considered as `DOWN`.
- _[cds.java@1.18.1]_ Fixed a bug causing issues in decoding Base64 Strings in respones from remote OData services.
- _[cds.java@1.18.0]_ Fixed a bug causing incorrectly serialized errors from remote OData requests in log lines.
- _[cds.java@1.18.0]_ Fixed a bug causing aliases in projections used in expands of to many associations on remote OData V2 services to be incorrectly handled.
- _[cds.java@1.18.0]_ Fixed a bug causing an explicitly configured_default-env.jso_ file to be ignored in case a _default-env.json_ file was available as classpath resource.
- _[cds.java@1.18.0]_ Fixed a bug that caused a `NullPointerException` because `featureTogglesInfo` is `null` when trying to access the `RequestContext` in an async thread where no `RequextContext` exists, yet.
- _[cds.java@1.18.0]_ Adopted fixes of cds4j 1.21.1
- _[cds4j@1.23.0]_ Remove unrecognized warning for 'doc' property in simple CDS types
- _[cds4j@1.22.0]_ Remove unrecognized warning for 'doc' property in simple CDS types
- _[cds-compiler@2.5.2]_ to.hdbcds: Fixed a bug introduced with 2.5.0 that caused virtual elements to be rendered in views.
- _[cds-compiler@2.5.0]_ Remove warnings 'Ignoring annotation “@odata.draft.enabled” as the artifact is not part of a service'
  and 'Ignoring draft node for composition target ... because it is not part of a service'
- _[cds-compiler@2.5.0]_ Doc comments are no longer ignored after enum values and on view columns in parseCdl mode.
- _[cds-compiler@2.5.0]_ to.cdl:
  - Doc comments for enum values are correctly rendered.
  - Enum value and doc comments are now correctly rendered if the enum is called `doc`.
  - Doc comments at type references are correctly rendered.
  - Empty doc comments are correctly rendered and not left out.
  - Doc comments on view columns are correctly rendered.
- _[cds-compiler@2.5.0]_ to.edm(x):
  - OData V2: Ignore `@odata.singleton`.
  - OData V4: Do not render an `edm:NavigationPropertyBinding` to a singleton if the association has cardinality 'to-many'.
- _[cds-compiler@2.5.0]_ forOData:
  - Fix automatic renaming of shortcut annotation (eg. `@label`) with value `null`.
- _[cds-compiler@2.5.0]_ CSN parser:
  - Empty doc comments are correctly parsed and not complained about.
- _[cds@5.4.3]_ Skip calculated properties while following projections
- _[cds@5.4.3]_ Unrestricted subclauses in `@restrict.where`
- _[cds@5.4.2]_ Where condition in draft union in case of multiple keys
- _[cds@5.4.2]_ Handling of nulled properties in Service Consumption
- _[cds@5.4.2]_ Requests to Remote Services returning `text/html` result in an error
- _[cds@5.4.2]_ View resolving is more robust for path expressions
- _[cds@5.4.2]_ Skip foreign properties (e.g., mixins via associations) while following projections
- _[cds@5.4.2]_ UPDATE entity with composition to aspect with structure type property
- _[cds@5.4.1]_ Erroneously added Brazilian portuguese (`pt_BR`) removed from the list of normalized locales
- _[cds@5.4.0]_ Disable persistency check for requests without a target
- _[cds@5.4.0]_ Expand at draft edit
- _[cds@5.4.0]_ Remove restriction for `$search` queries not accepting brackets
- _[cds@5.4.0]_ Select query with infix filter in custom handler
- _[cds@5.4.0]_ Order by on same named properties of different associations in draft
- _[cds@5.4.0]_ Allow to call bound actions and functions of read-only entities
- _[cds@5.4.0]_ Writing draft-enabled entities with composition of aspects (a.k.a. managed compositions)
- _[cds@5.4.0]_ Expand to autoexposed association/composition in draft case
- _[cds@5.4.0]_ `cds.parse.xpr()` always returns an array
- _[cds@5.4.0]_ Allow boolean options in `cds build` CLI
- _[cds@5.4.0]_ Integrity check in case of bulk query execution
- _[cds-mtx@2.2.1]_ Access to metadata API (edmx, csn, languages, services) is now restricted
to owner or provider tenant again
- _[cds-mtx@2.2.1]_ Allowed `HDI_DEPLOY_OPTIONS` are now filtered correctly
- _[cds-mtx@2.2.1]_ Correlation ids of requests are now forwarded correctly to asynchronous jobs for
better supportability of MTX tenant operations.

### Removed

- _[cds-compiler@2.5.0]_ Removed internal property `$viaTransform` from CSN produced by OData/SAP HANA transformation
- _[cds@5.4.0]_ Messaging: The topic prefix `topic:` is deprecated
- _[cds@5.4.0]_ Messaging: No default headers for format not equal to `cloudevents`

## July 2021

### Added

- _[cds-dk@4.3.0]_ `cds import` now supports OData V4 edmx files.
- _[cds-dk@4.3.0]_ `cds-ts` executable starts `cds` CLI with [ts-node](https://www.npmjs.com/package/ts-node) to allow JIT compilation of Typescript
- _[cds-dk@4.3.0]_ `cds` CLI will give you a best guess if a command cannot be found, e.g. in case of a typing mistake.
- _[cds-dk@4.3.0]_ `cds.import` as API alternative to `cds import` command to convert edmx files to csn [beta]
- _[cds-dk@4.3.0]_ `cds.compile.to.openapi` as API alternative to `cds compile --to openapi` to convert CDS models to OpenAPI definitions
- _[cds-dk@4.2.0]_ `cds add data` creates csv files with basic header lines for the entities in the project.  `--for` option allows for selecting individual entities or namespaces.
- _[vscode-cds@4.2.0]_ validation mode _ActiveEditorOnly_ (new default). The new mode reduces number of compilations during editing and thus improves responsiveness.
- _[vscode-cds@4.2.0]_ new command _Visualize CDS file dependencies_ to analyze using dependencies of CDS model files. Getting an overview of file dependencies can help to keep your project architecture clean.
  Requires the 3rd party extension _Graphviz (dot) language support for Visual Studio Code_ (joaompinto), which can be installed with a single click.
- _[vscode-cds@4.1.1]_
    This is a quality release focusing on performance for large models.
    There are new user settings and some have changed their defaults.
    Best performance is achieved with default settings,
    except `cds.contributions.enablement.odata` which should be switched `off` to speed up compilation, unless feature is needed.

    Additional hints to increase performance:
  - Within _SAP Business Application Studio_: close `CAP Data Models and Services` view. Otherwise it will ask for all workspace symbols at every change.
  - Settings: `Cds › Contributions › Enablement: Odata`: switch off as already mentioned above
  - Settings: `Editor › Goto Location: Alternative Definition Command`: do not select `goToReferences`. Otherwise being already on a definition will trigger find references which requires all dirty models to be recompiled.
  - Settings: `Workbench › Editor › Limit: Enabled`: switch on
  - Settings: `Workbench › Editor › Limit: Value`: lower the number. If open editors have `using` dependencies, a change in one editor will lead to a recompile of related editors.
  - Commands `Go to References` / `Find All References` will recompile all models that might have changed due to a change in a depending model. If there are index models it often means the complete workspace is being recompiled.
    Until a further change, reference calculation is reasonably fast.
  - Command `Go to Symbol in Workspace` will recompile the complete workspace once, then it is reasonable fast.
  - Changing settings in `CDS` section will currently perform a complete workspace invalidation, i.e. required indexes will lead to recompilations on-demand as described above.
  - Changing certain `cds.env` settings, for example, folder configurations will invalidate the workspace as well.
- _[cds-compiler@2.4.4]_ to.edm(x):
  - Warn if an `edm:Property` has no `Type` attribute.
  - Warn about using the protected names 'Edm', 'odata', 'System', 'Transient' as `edm:Schema` `Namespace` values.
  - Allow `$edmJson` inline annotations in `edm:Collection` and nested annotations.
- _[cds-compiler@2.4.4]_ to.hdi/sql/hdbcds: Transform a `exists <association>` into a `exists <subselect>`, where the subselect
  selects from the target of `<association>` and establishes the same relation as `<association>` would via the WHERE clause.
  Infix-filters of `<association>` are added to the WHERE clause.
- _[cds-compiler@2.4.4]_ `cdsc` got a new option `--fallback-parser <cdl|csn>` that is used
  if an unknown or no file extension is used.
- _[cds-compiler@2.4.4]_ to.hdi/sql: Allow association publishing in UNIONs - this was previously forbidden, but this limitation only applies to HANA CDS.
- _[cds-compiler@2.4.4]_ to.edm(x): Support dynamic expressions as $edmJson inline code
- _[cds@5.3.2]_ `enterprise-messaging`: Experimental support to send messages via HTTP (`emitPerHTTP: true`)
- _[cds@5.3.0]_ `cds serve` and `cds deploy` now also load `.ts` Typescript files if started with [ts-node](https://www.npmjs.com/package/ts-node)
- _[cds@5.3.0]_ Log formatter for Kibana <Beta /> via `cds.env.features.kibana_formatter`
- _[cds@5.3.0]_ First version of the `AuditLogService` <Beta />
  - Supported events: `dataAccessLog`, `dataModificationLog`, `configChangeLog`, and `securityLog`
  - Usage: `const AuditLogService = await cds.connect.to('audit-log'); await AuditLogService.emit/send('<event>', <data>)`
  - Out-of-the-box audit logging for modification of personal data and access to sensitive personal data via `cds.env.features.audit_personal_data`
- _[cds@5.3.0]_ Support for deep updates with compositions of one in `UPDATE(...).with(...)`
- _[cds@5.3.0]_ Support for logical events in `composite-messaging`
- _[cds@5.3.0]_ Initial support for generating OData V2 queries
- _[cds@5.3.0]_ Preserve `DraftAdministrativeData_DraftUUID` if OData v2 client (indicated by `@sap/cds-odata-v2-adapter-proxy`)
- _[cds@5.3.0]_ Use placeholder values for numbers with `cds.env.features.parameterized_numbers` (alpha)
- _[cds@5.3.0]_ Support for argument-less SQL functions (for example, `current_date`)
- _[cds@5.3.0]_ Performance optimization: Resolve localized texts for `$search` queries at runtime (alternative to localized views resolution) to avoid the performance overhead of the SQL `coalesce` function in filter operations. To enable this _experimental feature_ for SAP HANA, you can set the `cds.env.features.optimized_search` environment variable to `true`.
- _[cds@5.3.0]_ Performance optimization: Optimize `$search` queries using the `CONTAINS` predicate instead of the `LIKE` predicate in the `WHERE` clause of a `SELECT` statement. To enable this _experimental feature_ for SAP HANA, you can set the `cds.env.features.optimized_search` environment variable to `true`.
- _[cds@5.3.0]_ OData lambda expressions in `$filter`:
  - Basic support of structured types (`cds.env.odata.flavor = x4`) on SAP HANA
  - Support of navigation paths on SAP HANA, for example, `GET /Books?$filter=author/books/all(d:d/stock gt 10)`
- _[cds@5.3.0]_ Automatic topic manipulation for non-declared events
- _[cds@5.3.0]_ Support for events which are declared outside of service
- _[cds@5.3.0]_ Prefer headers `return=minimal` and `return=representation`
  - Default value is configurable at `cds.env.odata.prefer.return`
  - If not configured, the default is `representation`
- _[cds@5.3.0]_ Support for annotation `@Core.ContentDisposition`
- _[cds@5.3.0]_ Include `x-correlation-id` in headers of outbound message
- _[cds@5.3.0]_ Service consumption supports `search` property  and arbitrary functions in CQN
- _[cds@5.3.0]_ Support for temporal requests with different data types
- _[cds@5.3.0]_ Support for reading single draft-enabled entities via service API (`srv.read(<entity>, { ..., IsActiveEntity: true/false })`)
- _[cds@5.3.0]_ Support for feature toggles via `@cds/mtx`'s `ModelProviderService` based on DwC's product configuration header (alpha)
  - Activate via `cds.env.features.alpha_toggles`
- _[cds@5.3.0]_ Support for structured keys used in composition of aspects <Beta />
Support for AMQP options in AQMP-based message brokers
- _[cds.java@1.17.0]_ OData V4 now supports `GET`, `POST`, `PUT` and `DELETE` requests on primitive and complex collections.
- _[cds.java@1.17.0]_ OData V4 analytical queries now support filtering grouped data by aggregated values.
- _[cds.java@1.17.0]_ The values `AVG` and `COUNT` are now supported in `@Aggregation.default` annotations.
- _[cds.java@1.17.0]_ The `@Core.ContentDisposition.Filename` annotation is now supported in OData V4 to provide media data as an attachment download.
- _[cds.java@1.17.0]_ Queries that use `group by` are now implicitly sorted by all `group by` elements. Earlier these queries were never implicitly sorted, as they couldn't be sorted implicitly by keys.
- _[cds.java@1.17.0]_ Aliases in projections used for remote OData queries are now supported.
- _[cds.java@1.17.0]_ The IN operator is now supported in remote OData queries. It is transformed into multiple comparisons concatenated by OR.
- _[cds.java@1.17.0]_ Requests to remote OData services now forward the `X-Correlation-Id` header, if it is present in the `ParameterInfo` of the currently active `RequestContext`.
- _[cds.java@1.17.0]_ Added initial alpha support for feature toggles.
- _[cds.java@1.17.0]_ Messaging Services now leverage the outbox by default when emitting events. To disable the usage of the outbox set `outbox.enabled: false` on the messaging service's configuration.
- _[cds.java@1.17.0]_ Enhanced interface `EventContext` with method `keySet()` to expose a set with all parameter keys.
- _[cds.java@1.17.0]_ The `TenantProviderService` can now also handle SaaS registry service bindings of plan `service`.
- _[cds.java@1.17.0]_ `CdsLockTimeoutException`s are now transformed into `ServiceException`s and mapped to error code `409007`.
- _[cds.java@1.17.0]_ As part of the update to Spring Boot 2.5 the archetype now uses `spring.sql.init.mode` instead of `spring.datasource.initialization-mode`.
- _[cds.java@1.17.0]_ The `cds-maven-plugin` provides the new goal `build`, which performs the goals `cds` and `generate` on the current project together in one execution.
- _[cds.java@1.17.0]_ The `cds-maven-plugin` provides the new goal `watch`, which starts the CAP Java SDK Spring Boot application and watches for changes in the CDS model. When changes are detected, the `build` goal is executed and the application is restarted.
- _[cds.java@1.17.0]_ The `cds-maven-plugin` now enables JavaDoc generation based on comments in the CDS model by default when generating accessor interfaces.
- _[cds.java@1.17.0]_ The SAP proprietary locale `3Q` (`en-US-x-saprigi`) is now handled correctly.
- _[cds4j@1.21.0]_ Allow to use path expressions based on `$outer` references in an EXISTS subquery
- _[cds4j@1.21.0]_ Support CDS doc comments in code generation
- _[cds4j@1.21.0]_ Allow to modify `CqnContainmentTest` (contains, startsWith, endsWith) via `Modifier.containment`
- _[cds-mtx@2.1.2]_ Tenant creation and deletion is now called via CDS service `TenantPersistenceService` that applications can add handlers for:

```cds
@protocol:'rest'
service TenantPersistenceService {
    type JSON {
        // any json
    }

    action createTenant(tenantId: UUID, subscriptionData: JSON) returns String;
    action deleteTenant(tenantId: UUID);
}
```

- _[cds-mtx@2.1.2]_ The global meta tenant creation in `cds.mtx.in` can now be disabled by setting the `MTX_DISABLE_META_TENANT_CREATION` environment variable
- _[cds-mtx@2.1.2]_ Allow array as configuration for mandatory scopes for subscription and update

```json
mtx: {
    security: {
        "subscription-scope": ["myApp.subscription","myApp.superadmin"],
        "deployment-scope": ["myApp.deployment", "myApp.superadmin"]
    }
}
```

- _[cds-mtx@2.1.2]_ Internal on- and offboarding API for sidecar use case: POST /mtx/v1/internal/provisioning/subscribe and POST /mtx/v1/internal/provisioning/unsubscribe with payload

```json
{
  "subscribedTenantId": <tenant id>,
  "async": <true/false>
}
```

- _[cds-mtx@2.0.2]_ Internal on- and offboarding API for sidecar use case: POST `/mtx/v1/internal/provisioning/subscribe` and POST `/mtx/v1/internal/provisioning/unsubscribe`
with payload:

```json
{
  "subscribedTenantId": <tenant id>,
  "async": <true/false>
}
```

- _[cds-mtx@2.0.1]_ It's now possible to provide BTP dependencies in the `mtx` settings in your _.cdsrc.json_ instead of implementing a custom handler, by setting `mtx.dependencies` accordingly.
- _[sap/ux-cds-odata-language-server-extension@1.2.3]_ code completion, diagnostic, and go to definition for string properties `CollectionPath` and `ValueListProperty` in `@Common.ValueList` annotation defined on the service level
- _[sap/ux-cds-odata-language-server-extension@1.2.3]_ semantic highlighting in OData annotations

### Changed

- _[cds-dk@4.3.2]_ Bumped version of `@sap/cds` to 5.3.2
- _[cds-dk@4.3.1]_ New version of `@sap/eslint-plugin-cds`
- _[cds-dk@4.3.0]_ `cds init` uses latest `Maven Java archetype` version `1.16.3` for creating Java projects.
- _[cds-dk@4.3.0]_ `cds init` generates dependency entry for `hdb` instead of `@sap/hana-client`.
- _[cds-dk@4.3.0]_ Reworked templates for cds linter.
- _[cds-dk@3.5.2]_ Bump to latest versions
- _[cds-dk@3.5.2]_ Use latest `cds-sidecar-client` to fix CVE-2021-33502
- _[vscode-cds@4.2.0]_ consume `cds-lsp 5.2.0`
- _[vscode-cds@4.2.0]_ consume `cds-compiler 2.5.0`
- _[vscode-cds@4.1.1]_ consume `cds-lsp 5.1.1`
- _[vscode-cds@4.1.1]_ consume `cds-compiler 2.4.4`
- _[vscode-cds@4.1.1]_ new performance relevant user settings
  - `cds.workspace.debounceFastChanges`:  skip intermediate compilations when typing - enabled by default
  - `cds.workspace.scanDependentModules`: skip scanning of node_modules - enabled by default, speeds up start-up time

    Note:
    - When using code completion for global identifiers (see `cds.completion.workspaceSymbols.minPrefixLength`) this option needs to be enabled.
    - For code completion of import paths in `using` statements this option needs to be enabled.
    - To include definitions from nodejs dependent modules in workspace symbols this option needs to be enabled.
- _[vscode-cds@4.1.0]_ consume `cds-lsp 5.1.0`
- _[vscode-cds@4.1.0]_ consume `cds-compiler 2.3.2`
- _[vscode-cds@4.1.0]_ user settings
  - cds.workspaceValidationMode new default: OpenEditorsOnly
  - cds.workspace.scanCsn new settings with default switch off (before implicitly on)
  - cds.quickfix.importArtifact new setting with default off (before implicitly on)
- _[vscode-cds@4.1.0]_ command `Install CDS Development Kit (@sap/cds-dk) globally` will now show a progress dialog as long as it is running
- _[vscode-cds@4.0.4]_ uses `@sap/cds-lsp@5.0.5`
- _[vscode-cds@4.0.4]_ new user option `cds.env.fetch` to dynamically fetch _cds.env_ when using non-default i18n file/folder names
- _[vscode-cds@4.0.2]_ uses `@sap/cds-lsp@5.0.3`
- _[vscode-cds@4.0.2]_ uses `@sap/cds-compiler@2.2.4`
- _[cds-compiler@2.4.4]_ Do not inherit `@cds.persistence.skip` when `@cds.persistence.table` is set on entity.
- _[cds-compiler@2.4.4]_ to.cdl: Opening and closing braces of empty services and contexts are now on the same line.
- _[cds-compiler@2.4.4]_ Type `DecimalFloat` is no longer proposed for code-completion.
- _[cds-compiler@2.4.4]_ Non-string enums without values for their enum elements are warned about.
- _[cds-compiler@2.4.4]_ OData CSN is no longer sorted by definition names
- _[cds-compiler@2.4.4]_ to.edm(x): Update OData vocabularies 'Aggregation', 'Analytics', 'CodeList', 'Common', 'Measures', 'Session', 'UI'
- _[cds@5.3.2]_ Aligned Node.js and Java auditlog APIs
- _[cds@5.3.2]_ `enterprise-messaging`: No topic manipulation for outbound events beginning with a different namespace
- _[cds@5.3.1]_ Task `@sap/cds-runtime/lib/messaging/deploy.js` moved to `@sap/cds/tasks/enterprise-messaging-deploy.js` after module merge
- _[cds@5.3.1]_ Parse OData lambda expression on collection of scalars with equals operator (i.e., `.../any(d:d = "<val>")`) to CQN with `contains` (pegjs-based parser only)
- _[cds@5.3.0]_ Custom build tasks are no longer restricted to `@SAP` namespace.
- _[cds@5.3.0]_ CDS build tasks of type `fiori` are no longer copying files located in the UI module folder into the deployment staging folder.
- _[cds@5.3.0]_ Leaner error messages for unsuccessful remote service call
- _[cds@5.3.0]_ Incoming messages now contain a privileged user
- _[cds@5.3.0]_ `SELECT.where(...)` generates CQN with list of values for `in` operator
- _[cds@5.3.0]_ Always use flag `u` during input validation via `@assert.format`
- _[cds@5.3.0]_ Intermediate CQN format for lambda expressions with preceding navigation path
- _[cds@5.3.0]_ Emit logs promoted to `info`
- _[cds@5.3.0]_ Simpler topic names for `local`, `file-based-messaging` and `message-queuing`
- _[cds@5.3.0]_ `messaging.emit(...)` also uses outbox
- _[cds@5.3.0]_ Messaging will start listening to events once the `listening` event was fired on the `cds` object
- _[cds@5.3.0]_ Cascade delete order reversed from leaves to root
- _[cds@5.3.0]_ Intermediate cqn format for lambda expressions in odata
- _[cds@5.3.0]_ OData function names and structure are kept unchanged after parsing a URL to CQN in the adapter layer, corresponding "CQN-to-SQL" logic is moved to the DB layer. The changes affect the following functions: `contains`, `startswith`, `endswith`, `toupper`, `tolower`, `indexof`, `day`, `date` and `time`.
- _[cds@5.3.0]_ Template cache at prototype of `RootTransaction`
- _[cds@5.3.0]_ Both strings and numbers are accepted as decimals
  - Strict numbers handling can be re-enabled via `cds.env.features.strict_numbers`
- _[cds.java@1.17.0]_ _Solely_ virtual elements are not considered readonly anymore. By default the CDS Compiler adds `@Core.Computed: true` to virtual elements, which makes them readonly by default. By adding  explicitly to the virtual element, you can now create a virtual element that is not readonly.
- _[cds.java@1.17.0]_ Interfaces for features contributing SQL DataSources have been refined and moved to public API. It is now possible to either implement a `DataSourceDescriptorFactory`, which can provide standard JDBC connection information, or for more flexibility a `DataSourceFactory`, which can directly create `DataSource` instances.
- _[cds.java@1.17.0]_ Interface implementations loaded via Java's ServiceLoader (e.g. `ServletAdapterFactory` or `DataSourceFactory`) can now get access to the `CdsRuntime` directly after construction by implementing the `CdsRuntimeAware` interface. The `CdsRuntime` is no longer explicitly passed in methods of these interfaces.
- _[cds.java@1.17.0]_ Centralized factories required to separate API from implementation into a `CoreFactory` interface. Application code should use existing static `create` methods on the respective interfaces (e.g. `UserInfo`, `EventContext`, etc.) instead of directly using the `CoreFactory` instance.
- _[cds.java@1.17.0]_ Using autowired `Messages` in a Spring bean outside of a `RequestContext` now results in an error. Earlier `Messages` written like this were unnoticeably lost immediately.
- _[cds.java@1.17.0]_ Queries that don't use a limit (top/skip) are not implicitly sorted anymore to improve performance of these queries. By default OData V2 or V4 requests always either define an explicit limit by the client or an implicit limit through server-driven paging.
- _[cds.java@1.17.0]_ The enterprise-messaging feature can now auto-detect multitenancy-capable service bindings through the `instancetype` `reuse`. The previously used kind `enterprise-messaging-mt` has been removed.
- _[cds4j@1.20.0]_ Improve performance of to-many expands
- _[cds4j@1.20.0]_ Improve performance of upserts in deep updates
- _[cds-mtx@2.1.2]_ File system APIs are now asynchronous
- _[cds-mtx@2.1.2]_ A failed offboarding will now throw a `TenantOffboardingError`, instead of just logging the error.

- _[cds-sidecar-client@1.1.21]_ Replace vulnerable 'Got' dependency with 'Axios'.
- _[cds-sidecar-client@1.1.21]_ To facilitate debugging, display a few start and end characters of certain secrets in DEBUG output
  (applies to params that are not user-generated, i.e. short-lived and/or comprising many characters).
- _[cds-sidecar-client@1.1.21]_ On SAP Business Application Studio, disable keyring storage as it is unsupported (switch to plain-text automatically)
- _[cds-sidecar-client@1.1.21]_ Hide secret data in token-request URL from log output
- _[sap/ux-cds-odata-language-server-extension@1.2.3]_ updated comprised OData vocabularies to include [HTML5 vocabulary](https://sap.github.io/odata-vocabularies/vocabularies/HTML5.html) server

### Fixed

- _[cds-dk@4.3.3]_ Removed internal links in _npm-shrinkwrap.json_
- _[cds-dk@4.3.0]_ `cds import` fix for `<documentation>` tag in OData V2 and `<Annotation>` tag in OData v4
- _[cds-dk@4.3.0]_ `cds import` now sets the `kind` attribute in_package.jso_ to the correct `odata-v2` value for OData v2 services.
- _[cds-dk@4.3.0]_ `cds import` now maps edm.DateTime to cds.DateTime for OData V2.
- _[cds-dk@4.3.0]_ `cds compile --to edmx-v2/edmx-v4` now uses correct file naming when compiling a single CDS service.
- _[cds-dk@4.2.1]_ `cds deploy` w/o any file arguments now works again and no longer fails with `No cds models found at/in ''`.
- _[cds-dk@4.2.0]_ `cds deploy` called with multiple sources ignored all but the first one
- _[cds-dk@4.2.0]_ `cdd add mta` now sets a buildpack for the server modules (Node.js or Java).  This improves deploy performance and avoids issues with buildpack priorities, leading to potentially wrong build packs selected.
- _[cds-dk@4.2.0]_ On drag and drop of an edmx file, `cds watch` now imports it in the proper working dir
- _[cds-dk@4.2.0]_ `cds import` now moves the edmx file again to `srv/external` instead of copying it.
- _[vscode-cds@4.2.0]_ validation mode _ActiveEditorOnly_ (new default).
  The new mode reduces number of compilations during editing and thus improves responsiveness.
- _[vscode-cds@4.2.0]_ new command _Visualize CDS file dependencies_ to analyze using dependencies of CDS model files.
  Getting an overview of file dependencies can help to keep your project architecture clean.
  Requires the 3rd party extension _Graphviz (dot) language support for Visual Studio Code_ (joaompinto),
  which can be installed with a single click.
- _[vscode-cds@4.0.4]_ asynchronous scanning of workspace blocked and led to high cpu usage (mostly on Linux/macOS)
- _[cds-compiler@2.4.4]_ Do not remove parentheses around single literals and references on the right-hand side of an `in` and `not in` operator.
- _[cds-compiler@2.4.4]_ `cdsc`: Option `--direct-backend` can now be combined with `toCsn`'s option `--with-localized`
- _[cds-compiler@2.4.4]_ The option `testSortCsn` was erroneously ignored in some compiler backends.
- _[cds-compiler@2.4.4]_ for.odata: Propagate the `virtual` attribute correctly while flattening structures.
- _[cds-compiler@2.4.4]_ If internal relational types are used directly in CDL (e.g. `cds.Association`), an error is emitted.
  In CSN, all artifacts of relational types need a `target` (/`targetAspect`) as well.
- _[cds-compiler@2.4.4]_ In Association to Join translation don't produce a JOIN node for exposed (transitive) associations in
  combination with their exposed foreign keys. Also resolve foreign keys correctly against the target
  entity allowing to expose renamed foreign keys when aliased.
- _[cds-compiler@2.4.4]_ The option `testSortCsn` (`--test-sort-csn` in `cdsc`) can be used to sort CSN definitions alphabetically.
  This option is only intended for tests.  This will restore the pre-v2.3.0 ordering in EDMX.
- _[cds-compiler@2.4.4]_ to.sql:
  - for SQL-dialect `sqlite`, render the string-format-time function (`strftime()`)
    - `$at.from` with date-format: `'%Y-%m-%dT%H:%M:%S.000Z'`
    - `$at.to` with date-format:  `'%Y-%m-%dT%H:%M:%S.001Z'` (**+1ms** compared to `$at.from`)
  - for SQL-dialect `hana` wrap `SESSION_CONTEXT('VALID-TO')` and `SESSION_CONTEXT('VALID-FROM')` in `TO_TIMESTAMP(..)` function
- _[cds-compiler@2.4.4]_ to.hdbcds:
  - Wrap `SESSION_CONTEXT('VALID-TO')` and `SESSION_CONTEXT('VALID-FROM')` in `TO_TIMESTAMP(..)` function
- _[cds-compiler@2.4.4]_ Correct auto-exposure in model with unscoped projection on deep scoped entity
  (from managed aspect compositions: component in component, like they are common in ODM).
- _[cds-compiler@2.4.4]_ Internal types `cds.Association` and `cds.Composition` are no longer proposed for code-completion.
- _[cds-compiler@2.4.4]_ Fix various issues with Association to Join translation:
  - Substitute `$self.alias` expressions and respect prefix paths in foreign key accesses.
- _[cds-compiler@2.4.4]_ to.hdbcds: In naming mode "hdbcds", correctly resolve $self backlinks with aliased foreign keys.
- _[cds-compiler@2.4.4]_ to.cdl:
  - Correctly traverse subelements when rendering annotations for them.
  - Quote element names (if required) in `annotate with` statements.
- _[cds-compiler@2.4.4]_ for.odata: Fix regression with detecting collision when generating foreign keys.
- _[cds-compiler@2.4.4]_ to.edmx: Correctly render final base types in EDMX V2 when called with transformed OData CSN for V4.
- _[cds-compiler@2.4.4]_ Fix regression: also for associations _defined_ in a service, try to
  implicitly redirect the provided model target.
- _[cds-compiler@2.4.4]_ to.edmx(x):
  - The reverted change "`array of` elements are now allowed for OData V2, too." introduced with v2.2.0 has caused
    regressions in various scenarios that used OData V4 processed CSN for OData V2 EDMX rendering. Therefore
    the error has been lowered to a 'odata-spec-violation-array-of' warning.
  - The fix 'Render constraints only if all principal keys are used in association' introduced with v2.2.2 has
    caused regressions in mocking scenarios. With option `--odata-v2-partial-constr` partial constraint generation
    can be reactivated. A 'odata-spec-violation-constraints' warning is raised.
- _[cds-compiler@1.50.8]_ to.hdi.migration: Don't generate `ALTER` for type change from association to composition or vice versa (if the rest stays the same), as the resulting SQL is identical.
- _[cds.java@1.17.0]_ Fixed a bug causing incorrect deserialization of request payloads with content-type `application/json` and `text/plain` for file upload requests on media type properties in OData V4.
- _[cds.java@1.17.0]_ Fixed a bug causing the OData V2 artificial ID field `ID__` of aggregated entities to appear in CQN statements in case it was explicitly selected in `$select`.
- _[cds.java@1.17.0]_ Fixed a bug causing multi-segment service paths to be handled incorrectly in OData V2.
- _[cds.java@1.17.0]_ Expanded elements in remote OData V2 queries are now explicitly listed in `$select` in addition, if `$select` is used to reduce the selection set. This is due to the OData V2 behaviour that `$select` takes precedence over `$expand`.
- _[cds.java@1.17.0]_ Fixed a bug causing incorrect authorization configurations in case base paths of different protocol adapter overlapped.
- _[cds.java@1.17.0]_ Fixed a bug causing HTTP requests to SaaS Registry or Message Brokers to fail with `premature close` errors.
- _[cds4j@1.21.1]_ Fix startsWith, endsWith with caseInsensitive flag
- _[cds4j@1.21.0]_ Resolve naming conflict in generated interfaces
- _[cds4j@1.21.0]_ Fix setting references for forward mapped to-one associations in insert/upsert
- _[cds4j@1.21.0]_ Fix search for aliased localized elements behind associations
- _[cds4j@1.21.0]_ Make `CqnBoolLiteral` immutable
- _[cds4j@1.21.0]_ Fix exception on to-many expands with parameters in where clause
- _[cds4j@1.21.0]_ Fix code generation for types with structured elements
- _[cds4j@1.21.0]_ Fix code generation for compositions of aspects with structured elements
- _[cds4j@1.21.0]_ Remove unrecognized warning for doc property in simple types
- _[cds4j@1.20.5]_ Fix 'is' comparison with where exists subqueries in infix filters
- _[cds4j@1.20.5]_ Fix exception on to-many expands with parameters in where clause
- _[cds4j@1.20.5]_ Add `cds.java.expand` annotation for expand hints
- _[cds@5.3.3]_ Validation of arrayed parameters of actions and functions
- _[cds@5.3.3]_ Skip not-to-be-audited entities in composition tree
- _[cds@5.3.3]_ In draft, `<entity>.texts` can be used without explicit exposure
- _[cds@5.3.2]_ Call `init()` and register custom handlers for every new `cds.ApplicationService` created in extensibility scenarios
- _[cds@5.3.2]_ Structured keys for deep operations in OData flavor `x4`
- _[cds@5.3.2]_Wrong user in messaging requests coming from webhooks
- _[cds@5.3.2]_ Improvements in log formatter for Kibana:
  - Remove redundant metadata information
  - Add information from `req.headers`
  - Treat error-like objects like errors
  - Custom fields (alpha)
- _[cds@5.3.2]_ Minor fix for _optimized search_ on SAP HANA
- _[cds@5.3.1]_ Improved error message in case custom `server.js` doesn't export a function
- _[cds@5.3.1]_ Kibana formatter: `stacktrace` as array of strings
- _[cds@5.3.1]_ Improved error message in case custom `server.js` doesn't export a function
- _[cds@5.3.1]_ Bootstrapping for feature toggles
- _[cds@5.3.1]_ Deep operations for certain composition constellations
- _[cds@5.3.1]_ Aliasing on SQL layer for OData `ne` operator
- _[cds@5.3.1]_ Fixed scope issues in manual deployment for messaging
- _[cds@5.3.1]_ Projections with infix filters and cardinality changes are safely ignored during `CREATE`/`UPDATE`
- _[cds@5.3.1]_ Resolving of views if underlying projection has explicit aliases
- _[cds@5.3.0]_ Deep operations for certain composition constellations
- _[cds@5.3.0]_ Projecting data works also for projections where one field maps to multiple entries
- _[cds@5.3.0]_ `SELECT` queries without user-specified columns only modify draft columns if the entity is draft-enabled.
- _[cds@5.3.0]_ Generated `index.html` erroneously showed entries for `contained` entities from managed compositions.
- _[cds@5.3.0]_ Use OData simple identifier format for links to entity sets in generated `index.html`.
- _[cds@5.3.0]_ `cds build` logged duplicate compilation errors for the identical _.cds_ file, but with different relative path names.
- _[cds@5.3.0]_ `cds serve` no longer tries to redirect SAP Fiori URLs starting with `$` to service URLs.
- _[cds@5.3.0]_ `cds build` now supports `HANA Table data properties files` in SaaS applications. These files have not been copied into the sidecar folder.
- _[cds@5.3.0]_ `cds deploy --dry` generates DROP/CREATE DDL statements with an order that also H2 can handle, i.e. with dependent views dropped before basic views.
- _[cds@5.3.0]_ `cds build` now correctly handles symbolic links for nodejs projects on Windows.
- _[cds@5.3.0]_ `cds build` now correctly filters CDS source files when building SaaS applications.
- _[cds@5.3.0]_ Deploy endpoint for messaging artifacts includes the needed roles
- _[cds@5.3.0]_ Detection of mocked services and forced resolving of views
- _[cds@5.3.0]_ `POST/PATCH/PUT` requests on `Composition of many` with association as key and custom `on` conditions
- _[cds@5.3.0]_ `$expand` on entities with `.` in name
- _[cds@5.3.0]_ Filter on external service when using `ne null`
- _[cds@5.3.0]_ Primitive property access of Singletons defined without keys via URL like `/Singleton/name`
- _[cds@5.3.0]_ Expand and navigation in draft-enabled entity with composition of aspects
- _[cds@5.3.0]_ `@Core.ContentDisposition.Filename` instead of `@Core.ContentDisposition`
- _[cds@5.3.0]_ Select query with `$count` with combination with `$search`
- _[cds@5.3.0]_ Parsing of `Timestamp`, `DateTime` and `Date` values in OData request when using beta URL to CQN parser (`cds.env.features.odata_new_parser`)
- _[cds@5.3.0]_ Reset temporal session contexts
- _[cds@5.3.0]_ Caching of runtime aspects
- _[cds@5.3.0]_ Handling of foreign keys as well as an input validation when using nested associations as keys
- _[cds@5.3.0]_ Transaction handling in case of multiple changesets
- _[cds@5.3.0]_ SAP HANA procedure call with output parameter
- _[cds@5.3.0]_ Skip foreign key propagation if target is annotated with `@cds.persistence.skip`
- _[cds@5.3.0]_ Values misidentified as operators in `$search`
- _[cds@5.3.0]_ Ensure UTC values are written to database
- _[cds@5.3.0]_ ETag handling in case of action with `$select`
- _[cds@5.3.0]_ Fix draft-related issues in `odata2cqn`
- _[cds@5.3.0]_ Where clause in `@restrict` gets duplicated if `$search` query option is used
- _[cds@5.3.0]_ Virtual fields are not filtered out before application service handlers
- _[cds@5.3.0]_ Clarification: the minimum required Node.js version is 12.18.  Versions < 12.18 might not work.
- _[cds@5.3.0]_ `cds build` supports validation of `extension-allowlist`, which is replacing `entity-whitelist` or `service-whitelist` with cds-mtx 2.0. Warnings are no longer returned if neither entity-whitelist nor service-whitelist is defined.
- _[cds@5.3.0]_ `cds compile -2 sql/edmx` erroneously wrote excessive compiler output to stderr
- _[cds@5.3.0]_ Resolve the correct `enterprise-messaging-shared` credentials from `VCAP_SERVICES` by default
- _[cds@5.3.0]_ `cds compile --to sql` now completes the last SQL statement with a proper semicolon
- _[cds@5.3.0]_ - Binary keys handling in $filter
- _[cds@5.3.0]_ - `odata.metadata` accept header fragment ignored during deserializer lookup in odata-server
- _[cds@5.3.0]_ - Don't overwrite manual error code in case of data-server error
- _[cds@5.3.0]_ - MTX enabled check
- _[cds@5.3.0]_ - Invoke custom error handler (`srv.on('error')`) for each error and preserve modifications in case of changesets
- _[cds@5.3.0]_ - Evaluation of restrictions for custom requests to the same `ApplicationService`
- _[cds@5.3.0]_ - Misinterpreted SQL keyword as argument in QL's fluid usage
- _[cds@5.3.0]_ - odata2cqn select=* syntax
- _[cds@5.3.0]_ Requests using lambda operators in `$filter` in combination with instance based authorization
- _[cds@5.3.0]_ Star columns can be written as `'*'` or `{ref: ['*']}`
- _[cds@5.3.0]_ Arrayed and structured elements in draft mode
- _[cds@5.3.0]_ Cascade delete where child entity has more than one parent
- _[cds@5.3.0]_ Ignore `@restrict` conditions when reading `DraftAdministrativeData` of drafts
- _[cds@5.3.0]_ Navigation to one composition via association in `containment` mode (`cds.odata.containment = true`)
- _[cds@5.3.0]_ Create, update and delete requests to entity projections annotated with the annotation `@cds.persistence.table` are not resolved correctly
- _[cds@5.3.0]_ Using inline `$filter` query option in deeply nested expands on SAP HANA
- _[cds@5.3.0]_ Runtime exception when PATCH or PUT request methods are used for non-existing IDs. For example, → `PUT /api/v1/CustomerOrder('non-existing Id')/items(id='')/product`
- _[cds@5.3.0]_ Drafts: read active children of active or draft entities using deeply nested navigation or `$expand` query option
- _[cds@5.3.0]_ Select media type and content disposition information from base entity
- _[cds@5.3.0]_ Attempt to calculate time delta with unresolved target crashes server
- _[cds@5.3.0]_ OData string functions `contains`, `startswith` and `endswith` find records with `null` attributes when used with `not` operator
- _[cds@5.3.0]_ Deep deletion of sensitive data (annotated with `@PersonalData.IsPotentiallyPersonal` or `@PersonalData.IsPotentiallySensitive`) during update is properly considered in audit logging
- _[cds@5.3.0]_ Pseudo-variables as default value in draft-enabled entities
- _[cds@5.3.0]_ Escape CDL keywords when used in URL path
- _[cds-mtx@2.1.2]_ More error types and semantic HTTP status codes have been added
- _[cds-mtx@2.1.2]_ Setting `MTX_ROLLBACK_CORRUPTED_CONTAINER` to `true` will now also delete and recreate an HDI container if its bindings are missing
- _[cds-mtx@2.1.2]_ MTX Bootstrap has been adapted so that application service handlers can access MTX services
again
- _[cds-mtx@2.1.2]_ Logging is now consistently using cds.log
- _[cds-mtx@2.1.2]_ A caching problem with the metadata persistence factory is fixed
- _[cds-mtx@2.0.2]_ A failed offboarding will now throw a `TenantOffboardingError`, instead of just logging the error.
- _[cds-sidecar-client@1.1.21]_ Fix subdomain determination with CF-CLI v7
- _[cds-sidecar-client@1.1.21]_ Fix sending username and password for basic auth
- _[cds-sidecar-client@1.1.21]_ Fix various requests
- _[cds-sidecar-client@1.1.21]_ Interpret various HTTP responses properly.
- _[cds-sidecar-client@1.1.21]_ Token is now correctly obtained.
- _[cds-sidecar-client@1.1.21]_ Include compiled sources in published cds-sidecar-client package.
- _[cds-sidecar-client@1.1.21]_ Compatibility with CF-CLI v7: automatic determination of running apps and relevant CF space for `login`
- _[cds-sidecar-client@1.1.21]_ Error on login with username and password (basic auth)
- _[cds-sidecar-client@1.1.21]_ Error due to npm binary not being found on Windows
- _[sap/ux-cds-odata-language-server-extension@1.2.5]_ Unjustified warning for the `assert.integrity` term when applied to the service.
- _[cds-odata-v2-adapter-proxy@1.7.8]_ Support for verb tunneling, i.e., _POST_ with `X-HTTP-Method` header
- _[cds-odata-v2-adapter-proxy@1.7.7]_ Support inline return type for actions and functions
- _[cds-odata-v2-adapter-proxy@1.7.7]_ Default undefined message target to `/#TRANSIENT#`
- _[cds-odata-v2-adapter-proxy@1.7.7]_ Return `404` for unknown service name during model compilation
- _[cds-odata-v2-adapter-proxy@1.7.7]_ Enhance logging to contain service name for service lookup from request
- _[cds-odata-v2-adapter-proxy@1.7.6]_ Prevent exception on handling entities without keys

### Removed

- _[cds-compiler@2.4.4]_ to.hdbcds: Association publishing in subqueries is not supported by SAP HANA CDS - an error is raised during compile time, instead of waiting for a deployment error.

## May 2021

### Added

- _[cds-dk@4.1.0]_ `cds watch --open` opens the app in the browser with a given URL (part)
- _[cds-compiler@2.2.0]_ The compiler now takes the "definition scope" of associations and compositions into account
  when implicitly redirecting the target and auto-exposing entities.
- _[cds-compiler@2.2.0]_ OData: The warning `enum-value-ref` is no longer reclassified to an error. However, references to other enum values are still not supported.
- _[cds@5.1.5]_ `cds build` adds `engines.node` version to _package.json_ if not present, in order to match the minimum required node version of CDS.
- _[cds@5.1.5]_ Generate an invocation context identifier (`cds.context.id`) if none can be derived
- _[cds@5.1.0]_ Custom error handler via `srv.on('error', function (err, req) { ... })` <Beta />
  - Synchronous modification of passed error only
- _[cds@5.1.0]_ `cds.log.format()` for custom log formatting
- _[cds.java@1.16.0]_ The OData V4 adapter now supports reading stream properties.
- _[cds.java@1.16.0]_ Uploading streamed content to `@Core.MediaType` annotated properties is now supported in OData V4.
- _[cds.java@1.16.0]_ The OData V2 adapter now provides all query parameters in the `ParameterInfo` interface.
- _[cds.java@1.16.0]_ CSV files with locale ending are now supported for text tables of localized entities (for example, `Books.texts_de.csv`) when initializing in-memory databases.
- _[cds.java@1.16.0]_ H2 databases are now automatically detected as embedded databases, ensuring that CSV files are automatically initialized.
- _[cds.java@1.16.0]_ The datasource auto-configuration based on service bindings can now be disabled explicitly by using `cds.dataSource.autoConfig.enabled: false`.
- _[cds.java@1.16.0]_ Added new property section `cds.sql` to configure the CQN to SQL transformation provided by CDS4j.
- _[cds.java@1.16.0]_ Added a new `ExtensibilityService`, which allows to register on an event triggered when the CDS model is changed. The metadata caches listen to this event and proactively refresh their cache entry.
- _[cds.java@1.16.0]_ Improved the error handling behaviour of the `Deploy` main class in case the deployment fails for a single tenant. The command now returns an error in that case.
- _[cds4j@1.20.0]_ - Deprecate CQL.literal() and add CQL.constant() and CQL.val() for constant and non-constant values
- _[cds4j@1.20.0]_ Allow using the SQL functions current_date, current_time and current_timestamp
- _[cds4j@1.20.0]_ Allow to specify max age in meta data access to bypass cache
- _[cds4j@1.20.0]_ Reflection API: Support type references
- _[cds4j@1.20.0]_ Add `CqnAnalyzer.isCountQuery(cqn)` to check if a CQN statement is a count query
- _[cds-runtime@3.1.1]_ Downport of "Support for reading single draft-enabled entities via service API (`srv.read(<entity>, { ..., IsActiveEntity: true/false })`)"
- _[cds-runtime@3.1.1]_ Computed values are preserved during draft activate with `cds.env.features.preserve_computed = true`
  - Preserving computed values will be the default behavior in @sap/cds^5.4
- _[cds-runtime@3.1.0]_ Support for declared events with annotations `@topic`, `@source`, and `@type`
- _[cds-runtime@3.1.0]_ Support for declared events in composite messaging
- _[cds-runtime@3.1.0]_ Extended managed data (`@cds.on.insert`, `@cds.on.update`):
  - Pseudo variable `$uuid`
  - Pseudo variable `$user.<attr>`
  - Static values, for example `@cds.on.insert: 'foo'`
- _[cds-runtime@3.1.0]_ _READ_ support for associations with custom on condition with form `<association>.<backlink> = $self and <association>.<property> = '<value>'`
- _[cds-runtime@3.1.0]_ Support for default values in views with more than one parameter
- _[cds-runtime@3.1.0]_ Support of input validation for arrayed elements
- _[cds-runtime@3.1.0]_ QL fluent API `orderBy()` convenience options `orderBy('<column> <order?>')`, `orderBy('...', ...)`, `orderBy('..., ...')`, and `orderBy([...])`
- _[cds-runtime@3.1.0]_ Use new, beta URL to CQN parser during read requests when serving to OData via `cds.env.features.odata_new_parser`
- _[cds-runtime@3.1.0]_ beta version of new CQN to URL parser
  - Use during service consumption via `cds.env.features.remote_new_parser`
- _[cds-runtime@3.1.0]_ Draft-specific columns are considered in `$select` if OData validation is skipped
- _[cds-runtime@3.1.0]_ Support for `cardinality` in `ref`
- _[cds-runtime@3.1.0]_ Support for nested expressions in where conditions
- _[cds-runtime@3.1.0]_ Invoke custom error handler <Beta /> in OData and REST adapters if necessary
- _[cds-runtime@3.0.9]_ Downport of "Private `<entity>._dependents` made non-enumerable to avoid circular references"
- _[cds-runtime@3.0.7]_ CSRF-token handling in service consumption via `@sap-cloud-sdk/core` with `cds.env.features.fetch_csrf = true` files.
- _[cds-mtx@2.0.1]_ Internal on- and offboarding API for sidecar use case: POST `/mtx/v1/internal/provisioning/subscribe`
and POST `/mtx/v1/internal/provisioning/unsubscribe` with payload <Beta />

```json
{
  "subscribedTenantId": <tenant id>,
  "async": <true/false>
}
```

- _[cds-mtx@2.0.1]_ It's now possible to provide SAP BTP dependencies in the `mtx` settings in your _.cdsrc.json_ instead of implementing a custom handler, by setting `mtx.dependencies` accordingly.
- _[cds-mtx@2.0.0]_ SaaS provisioning operations GET, PUT, and DELETE on API `/mtx/v1/provisioning/tenant/`
now require scope `mtcallback`. Upgrade calls on API `/mtx/v1/model/upgrade/` and `/mtx/v1/model/upgradeAsync/` now require scope `mtdeployment`.
This is now aligned with the mandatory scope check required for the java runtime.<br>
To adapt the scope names to the java runtime scope configuration, the scope names can be changed using the following cds configuration:

```json
mtx: {
    security: {
        "subscription-scope": "myApp.subscription",
        "deployment-scope": "myApp.deployment"
    }
}
```

- _[cds-mtx@2.0.0]_ Support cds build API throwing BuildError instead of CompilationError.
- _[cds-mtx@2.0.0]_ Undeployment of extensions can now be done using a simplified API:
`/mtx/v1/model/deactivate` with payload containing the extension sources to
be removed.

```json
{
  "extension_files": [
    "db/ext3.cds"
  ],
  "tenant": "<tenant id>"
}
```

- _[cds-mtx@2.0.0]_ Support automatic roll-back for corrupted tenants when `MTX_ROLLBACK_CORRUPTED_CONTAINER` is set to `true`. This should _never_ be used in production, but only for integration tests.
- _[cds-mtx@1.2.1]_ - Size of job queue can now be configured via `cds env`:

```json
mtx: {
  jobqueue: {
    size: 10
  }
```

or parameter `CDS_MTX_JOBQUEUE_SIZE=10`

### Changed

- _[cds-dk@4.1.0]_ If `cds watch` encounters a port that is already in use, it now just runs on an arbitrary port instead of a trying to search the next port available.
- _[cds-dk@4.1.0]_ `cds init` uses latest `Maven Java archetype` version `1.15.3` for creating Java projects.
- _[cds-dk@4.0.7]_ Bumped versions of `@sap/cds`, `@sap/cds-compiler`
- _[cds-dk@4.0.6]_ Bumped versions of `@sap/cds`, `@sap/cds-runtime`, `@sap/cds-compiler`
- _[cds-dk@4.0.5]_ Bumped version of `@sap/eslint-plugin-cds`
- _[cds-dk@4.0.4]_ `cds init` uses latest `Maven Java archetype` version `1.15.0` for creating Java projects.
- _[vscode-cds@4.0.2]_ uses `@sap/cds-lsp@5.0.2`
- _[vscode-cds@4.0.2]_ uses `@sap/cds-compiler@2.2.2`
- _[vscode-cds@4.0.1]_ now requires Visual Studio Code `>=1.54`
- _[vscode-cds@4.0.1]_ entry `Preview as hdbtable` replaces `Preview as hana` in `CDS Preview` menu
- _[vscode-cds@4.0.1]_ uses `@sap/cds-lsp@5.0.1`, which includes fixes for namespace handling
- _[cds-compiler@2.2.4]_ Remove special handling for implicit redirection to auto-exposed entity; consistently do not overwrite user-specified target in a service anymore, also in this special case.
- _[cds-compiler@2.2.4]_ Structured/Arrayed types for enums are now an error and not just a warning.
- _[cds-compiler@2.2.4]_ to.cdl: Keywords in annotation paths are no longer escaped
- _[cds@5.1.5]_ Better support for UI tools to get metadata for projects with both a Node.js and Java server
- _[cds@5.1.0]_ Clean up obsolete compiler option `snapi`.
- _[cds@5.1.0]_ `cds build` is no longer validating Node.js custom service handlers that have been registered using service `@impl` annotation.
- _[cds@5.0.5]_ Internal errors are no longer decorated with `Please report this`. People interpreted the text as to only include the stack trace in error reports and to omit other valuable context information.
- _[cds.java@1.16.0]_ OData V4 PUT requests on properties of non-existing entities now properly return a `404` response, instead of upserting the entity.
- _[cds.java@1.16.0]_ Messages written during ETag validations on OData actions are now discarded.
- _[cds.java@1.16.0]_ All requests or changesets are now executed in an OData V2 $batch request, even if one of the requests or changesets fails. This is in accordance with the OData V2 specification and the expectation of SAPUI5.
- _[cds.java@1.16.0]_ The CloudFoundry platform feature is now enabled in case either `VCAP_SERVICES` or `VCAP_APPLICATION` is present. Earlier both environment variables had to be present.
- _[cds.java@1.16.0]_ The statically available `LocalizedMessageProvider` has been moved into the `CdsRuntime`. In Spring Boot this allows to configure custom `LocalizedMessageProvider` implementations as Spring beans.
- _[cds4j@1.20.0]_ Improve performance of to-many expands
- _[cds4j@1.20.0]_ Improve performance of upserts in deep updates
- _[cds4j@1.19.2]_ Improve performance of upserts in deep updates
- _[cds-runtime@3.1.0]_ Model-based processing instruction cache attached to service for SaaS extensibility
- _[cds-runtime@3.1.0]_ Removed compatibility feature flag `cds.env.features.skip_expand_assoc`
- _[cds-runtime@3.1.0]_ Input-related details of assertion error added to error message, for example `Value 4 is not in specified range [1,3]`
- _[cds-runtime@3.1.0]_ `$search` query option is parsed into `.search` instead of like expressions in `.where`
- _[cds-runtime@3.1.0]_ Integrity checks are skipped if `@sap/cds-compiler`'s foreign key generation (beta!) is active
- _[cds-runtime@3.1.0]_ Private `<entity>._dependents` made non-enumerable to avoid circular references
- _[cds-runtime@3.1.0]_ `null` values for virtual properties added during post processing (previously done during serialization in odata-server)
- _[cds-runtime@3.0.9]_ Downport of "Private `<entity>._dependents` made non-enumerable to avoid circular references"
- _[cds-mtx@2.0.0]_ The global data meta tenant (`GLOBAL_DATA_META_TENANT`) is now created on the first application startup, instead of the first onboarding
- _[cds-mtx@2.0.0]_ `@sap/hdi-deploy` and `@sap/instance-manager` are now directly required by `@sap/cds-mtx`. Therefore, they can be left out of your `_`dependencies`
- _[cds-mtx@2.0.0]_ Job IDs are now generated using the `uuid` package
- _[cds-mtx@2.0.0]_ The default behavior of the `extension-allowlist` has changed. If `extension-allowlist`
is not configured, it is not allowed to apply any extension.<br>
Extensions can be easily enabled for all entities and services by adding the following
to the configuration.

```json
mtx: {
  "extension-allowlist" = [
      {
          "for": ["*"]
      }
  ]
```

### Fixed

- _[cds-dk@4.1.5]_ An issue with opening URLs on Windows
- _[cds-dk@4.1.5]_ `cds` CLI no longer adds `cds.compile.to.openapi` generically into all commands.  This turned out to load cds configuration from wrong folders, introducing subtle side effects.  Now, only the `cds compile` command adds `cds.compile.to.openapi`.  If you use `cds.compile.to.openapi` in other flows, like at runtime, use `cds compile --to openapi` instead.
- _[cds-dk@4.1.5]_ Include `@sap/cds` 5.1.5
- _[cds-dk@4.1.5]_ Include `@sap/cds-runtime` 3.1.1
- _[cds-dk@4.1.5]_ Include `@sap/cds-compiler` 2.2.8
- _[cds-dk@4.1.5]_ Include `@sap/eslint-plugin-cds` 1.1.4
- _[cds-dk@4.1.4]_ Include `@sap/cds` 5.1.4
- _[cds-dk@4.1.4]_ Include `@sap/cds-compiler` 2.2.6
- _[cds-dk@4.1.4]_ Include `@sap/eslint-plugin-cds` 1.1.3
- _[cds-dk@4.1.3]_ Include `@sap/cds` 5.1.3
- _[cds-dk@4.1.2]_ Include `@sap/cds` 5.1.2
- _[cds-dk@4.1.1]_ Include `@sap/cds` 5.1.1
- _[cds-dk@4.1.0]_ `cds compile --to hdbtable, hdbcds` no longer creates duplicate file extensions.
- _[cds-dk@4.0.7]_ Lookup for `eslint` during `cds add lint`
- _[cds-compiler@2.2.8]_ Fix regression: also for associations _defined_ in a service, try to implicitly redirect the provided model target.
- _[cds-compiler@2.2.6]_ to.edmx(x):
  - The reverted change "`array of` elements are now allowed for OData V2, too." introduced with v2.2.0 has caused
    regressions in various scenarios that used OData V4 processed CSN for OData V2 EDMX rendering. Therefore, the error has been lowered to a 'odata-spec-violation-array-of' warning.
  - The fix 'Render constraints only if all principal keys are used in association' introduced with v2.2.2 has
    caused regressions in mocking scenarios. With option `--odata-v2-partial-constr` partial constraint generation
    can be reactivated. A 'odata-spec-violation-constraints' warning is raised.
- _[cds-compiler@2.2.6]_ Usually reserved names like `in` in references used as annotation values can now really be provided without delimited identifiers (if the name is not `true`, `false`, or `null`).
- _[cds-compiler@2.2.6]_ Fixed the implicit redirection of associations to scoped targets (like texts entities).
- _[cds-compiler@2.2.6]_ Fix regression: Allow virtual structured elements.
- _[cds-compiler@2.2.6]_ to.edm(x):
  - OData V2:
    - Remove warning about scalar return types.
    - Render constraints only if all principal keys are used in association.
  - OData V4: Don't remove `@Capabilities` annotations from containee.
  - Allow `@Core.MediaType` on all types and raise a warning for those (scalar) types that can't be mapped to `Edm.String` or `Edm.Binary`.
- _[cds-compiler@2.2.4]_ to.cdl: Also handle subelement-annotations by rendering a `annotate X with Y`.
- _[cds-compiler@2.2.4]_ to.hdi/sql/hdbcds: Fixed the database name (with naming mode `quoted`/`hdbcds`) and the `to.hdi` file name of scoped definitions (like `texts` entities)  in services.
- _[cds-compiler@2.2.4]_ Empty enums no longer result in a syntax error.
- _[cds-compiler@2.2.4]_ Do not omit indirectly annotated or redirected sub elements during propagation of expanded sub elements.
- _[cds-compiler@2.2.4]_ Also auto-expose composition targets of projected compositions, not just those targets, which were used at the original definition of the composition.
- _[cds-compiler@2.2.4]_ Improve checks for keys, which are `array of` or of SAP HANA spatial type (`ST_POINT` & `ST_GEOMETRY`) with checking also inside of used user-defined structured type.
- _[cds-compiler@2.2.4]_ to.edm(x):
  - V2: `OnDelete=Cascade` was set on dependent instead on principal role.
  - V4: ReferentialConstraints Property and ReferencedProperty for managed composition to one were swapped.
- _[cds-compiler@2.1.6]_ Do not unjustified complain about `$self` comparisons.
- _[cds-compiler@2.1.6]_ Auto-exposed entities are represented as projections in the CSN.
- _[cds-compiler@2.1.6]_ to.sql/to.hdi:
  - Revert change "Default values are no longer propagated from the principal to the generated foreign key element." from version 2.1.0
  - Fix regression where localized convenience views for temporal entities used keys in the from clause that did not exist on the texts-entity
  - Mixin associations are properly removed and are not rendered into views anymore
- _[cds-compiler@2.1.6]_ to.hdi(.migration): Ensure filenames for `.hdbindex` files stay compatible to V1
- _[cds-compiler@2.1.6]_ for.odata: An association as a type of action's parameter or return type now signals an error
- _[cds-compiler@2.1.6]_ to.edm(x):
  - `@Capabilities` annotations remain on the containees entity type
  - In containment mode, don't render foreign keys of the containment constituting 'up' association in the containee as primary key refs.
  - Revert change "Default values are no longer propagated from the principal to the generated foreign key element." from version 2.1.0
  - Allow `--odata-proxies` and/or `--odata-x-service-refs` in combination with `--odata-format=flat` and `--version=v4`
- _[cds-compiler@1.50.6]_ to.edm(x):
  - OData V2: Render constraints only if all principal keys are used in association.
  - OData V4: Don't remove `@Capabilities` annotations from containee.
  - Allow `@Core.MediaType` on all types and raise a warning for those (scalar) types that can't be mapped to `Edm.String` or `Edm.Binary`.
- _[cds@5.1.5]_ Match locales in all upper-case (for example `ZH-CN` instead of `zh-CN`)
- _[cds@5.1.5]_ Key elements got lost in `cds.linked` when using type refs referring to other key elements
- _[cds@5.1.5]_ Tree shaking erroneously removed types `Foo` when only referred to by type refs like `bar : Foo:bar`
- _[cds@5.1.5]_ Fixed an error in transaction handling, that lead to database connections not released in rare cases
- _[cds@5.1.5]_ SQL names option gets properly propagated
- _[cds@5.1.5]_ No longer erroneously exclude entities explicitly marked with `cds.persistence:{table, skip:false}`, as in [cap/samples/suppliers](https://github.com/SAP-samples/cloud-cap-samples/blob/6b08826af51651f6b31fce8454fbadd23c634b85/suppliers/srv/mashup.cds#L46)
- _[cds@5.1.4]_ - Error when using complex type references, as in:

```cds
entity Foo { bar: Tic:tac.toe; }
entity Tic { tac: Composition of { toe:String } }
```

- _[cds@5.1.3]_ `cds` does not check for the min. required Node.js on SAP Business Application Studio, for now
- _[cds@5.1.2]_ `cds compile --for odata` now honors the OData version again
- _[cds@5.1.2]_ `cds compile --for odata` now honors the SQL naming mode (`sql.names`) again
- _[cds@5.1.2]_ `cds serve` does not run in an infinite bootstrap loop if `cds.server()` is called in `server.js`
- _[cds@5.1.1]_ `cds build` is now always adding `.hdbview, .hdbtable, .hdbconstraint or .hdbindex` plugin mappings to `.hdiconfig` to avoid that deployment is failing in case such files exist in an already deployed container, but are no longer generated.
- _[cds@5.1.1]_ `cds compile --dest <dir>` no longer crashes creating the destination folder
- _[cds@5.1.0]_ `cds build` now correctly handles `message.properties` files used for Nodejs runtime messages if these files have been defined in an i18n content folder located at project root.
- _[cds@5.1.0]_ Nodejs custom handlers are now correctly resolved if a dedicated destination folder has been configured for the build task.
- _[cds@5.1.0]_ Now, the `.csv` file reader correctly closes open file descriptors to avoid memory leaks during `cds build`.
- _[cds@5.0.7]_ Internal test stabilizations
- _[cds@5.0.6]_ `cds build` no longer fails with `TypeError: x.startsWith is not a function` in some situations
- _[cds@5.0.5]_ `cds build` now correctly creates the deployment layout for multitenant applications (sdc folder contents) that have dedicated folder paths configured for `db`, `srv`, and `app` modules.
- _[cds@5.0.5]_ `cds deploy --to sqlite` now ignores a `_texts.csv` file again if there is a language-specific file like `_texts_en.csv` present
- _[cds@5.0.5]_ `cds env` no longer fails to parse `.env` files with JSON values containing `=` characters
- _[cds@4.6.6]_ Now, the `.csv` file reader correctly closes open file descriptors to avoid memory leaks during `cds build`.
- _[cds@4.6.6]_ Fixed i18n handling causing `cds build` to fail with error message `bundle is not iterable`.
- _[cds@4.6.6]_ Node.js custom handlers are now correctly resolved if a dedicated destination folder has been configured for the build task.
- _[cds.java@1.16.0]_ Fixed a bug that caused issues when using the `PersistenceService` Spring bean during application startup, for example in a `@PostConstruct` initialization method.
- _[cds.java@1.16.0]_ Fixed a bug that caused issues when using associations as keys in draft-enabled entities.
- _[cds.java@1.16.0]_ Fixed a bug causing incorrect values for the `OData-Version` header in a parent `$batch` response.
- _[cds.java@1.16.0]_ Fixed a bug causing incorporation of an empty JWT into the authorization header of a rest call to `mtx-sidecar`
- _[cds.java@1.16.0]_ Fixed a bug concerning missing fields in the payload of subscribe and unsubscribe endpoints
- _[cds.java@1.15.4]_ Adopted fixes of cds4j 1.9.3
- _[cds.java@1.15.3]_ Fixed a bug that caused a `CdsDataStoreException` when trying to create a draft via a path `A(<id>)/B(<id>)/C` where entity `A` has an association `B` to a draft-enabled entity, which in turn has a composition `C`.
- _[cds.java@1.15.3]_ Fixed a bug that caused a `CQNValidationException` when defining associations as keys in draft-enabled entities
- _[cds.java@1.15.3]_ Fixed a bug causing a `SQLException` due to invalid SQL generated for aggregating OData v2 requests when properties were neither values nor dimensions.
- _[cds.java@1.15.3]_ Adopted fixes of cds4j 1.9.2
- _[cds.java@1.15.2]_ Fixed a bug that caused `$metadata` requests with `Accept-Language` header or `sap-language` query parameter to fail, in case the `mtx-sidecar` was used.
- _[cds.java@1.15.1]_ Fixed a bug that caused modifying statements to fail on draft-enabled entities on the Persistence Service, in case the data included values for draft elements such as `IsActiveEntity`, `HasActiveEntity`, or `HasDraftEntity`.
- _[cds.java@1.15.1]_ Fixed a bug that caused literal `0` or `1` in OData V2 filter expressions to be handled as String instead of Integer.
- _[cds.java@1.15.1]_ Fixed a bug that caused invalid SQL statements for OData V2 queries, when the result was ordered by an aggregated measure.
- _[cds4j@1.20.0]_ Fix upserts with uppercase UUID keys
- _[cds4j@1.19.2]_ Support update via association with custom mapping
- _[cds4j@1.19.2]_ Remove json-path (CVE-2021-27568)
- _[cds4j@1.19.2]_ Use LIKE instead of CONTAINS when searching over views with calculated fields
- _[cds4j@1.19.1]_ Fix exception during interface generation for inner definitions without namespace
- _[cds-runtime@3.1.2]_ Downport of "Escape CDL keywords when used in URL path"
- _[cds-runtime@3.1.1]_ Downport of "Attempt to calculate time delta with unresolved target crashes server"
- _[cds-runtime@3.1.0]_ Ambiguous columns in having clause
- _[cds-runtime@3.1.0]_ The generic read handler for drafts now correctly returns an object if the key of the entity is provided, before it was an array
- _[cds-runtime@3.1.0]_ Improved handling of unique constraint violation error during create and update
- _[cds-runtime@3.1.0]_ Better error logs for integrity checks
- _[cds-runtime@3.1.0]_ Leading and trailing whitespaces are allowed in OData expressions
- _[cds-runtime@3.1.0]_ Release database client if begin fails
- _[cds-runtime@3.1.0]_ `auto-expand` of generated foreign keys in OData x4 flavor (`cds.env.odata.flavor = x4`) when actions return entities
- _[cds-runtime@3.1.0]_ Consider `not null` annotations on inline structured types in OData x4 flavor (`cds.env.odata.flavor = x4`)
- _[cds-runtime@3.1.0]_ Temporal data in OData batch requests
- _[cds-runtime@3.1.0]_ Deep update/delete with static on conditions by composition to many
- _[cds-runtime@3.1.0]_ Draft: Alias of entity projection is incorrectly considered as key.
- _[cds-runtime@3.1.0]_ Support of arbitrary requests in service consumption if no external service model is provided
- _[cds-runtime@3.1.0]_ Use unfolded model if transaction was initiated in messaging
- _[cds-runtime@3.1.0]_ Infinite loop in restriction processing when user attribute is `null`
- _[cds-runtime@3.0.9]_ Downport of "Use unfolded model if transaction was initiated in messaging"
- _[cds-runtime@3.0.8]_ Timeout issues in `enterprise-messaging-shared` in reconnect
- _[cds-runtime@3.0.8]_ Queries with a simultaneous use of `$expand` and `$orderby`, when the latter is using functions
- _[cds-runtime@3.0.8]_ Preserve non-error messages to client during failing draft activation
- _[cds-runtime@3.0.7]_ Timeout issues in `enterprise-messaging-shared`
- _[cds-runtime@3.0.6]_ Allow to return primitive properties instead of entities in REST adapter
- _[cds-runtime@3.0.6]_ Normalize time data on SQLite to support data type `TIMESTAMP_TEXT`
files.
- _[cds-mtx@2.0.0]_ No more duplicate log entries in model upgrade result.
- _[cds-mtx@2.0.0]_ Scope check for extension undeployment (ExtendCDSDelete) is enabled again
- _[cds-mtx@1.2.1]_ - Undeployment for model upgrade via `advancedOptions` working again files.
- _[cds-mtx@1.2.1]_ - Undeployment of base model artifacts via _undeploy.json_ is working again files.
- _[cds-mtx@1.2.1]_ - Unallowed `@cds.persistence.journal` annotations in extensions are now checked
- _[cds-sidecar-client@1.1.16]_ Bug where `keytar` module path was not correctly determined
- _[cds-sidecar-client@1.1.15]_ Compatibility with CF-CLI v7
- _[cds-odata-v2-adapter-proxy@1.6.2]_ Merge headers and body of _POST_ and _PUT_ media entity upload calls
- _[cds-odata-v2-adapter-proxy@1.6.2]_ Handle error case in _PUT_ media entity upload call
- _[cds-odata-v2-adapter-proxy@1.6.1]_ Handle authorization header correctly in media upload

### Removed

- _[cds-compiler@2.2.4]_ Consistently reject references to auto-exposed entities except for `annotate` (it might have worked before, depending on the sequence of definitions);
  expose an entity manually if you want to refer to it.
- _[cds-compiler@2.2.4]_ to.edm(x):  Revert change "`array of` elements are now allowed for OData V2, too"
  made in `cds-compiler@2.1.0`. Array of elements are not allowed for OData V2. Supporting this was an error,
  because this is forbidden by the OData V2 specification.

## March 2021

### Added

- _[cds-dk@4.0.0]_ `cds watch` is now a [live reload](https://www.npmjs.com/package/livereload-js) server, allowing for automatic page refreshes in browsers whenever a file has changed.
- _[vscode-cds@4.0.0]_ semantic highlighting - to be enabled via user setting `cds.semanticHighlighting.enabled`
- _[vscode-cds@4.0.0]_ new API for annotation handler to support semantic highlighting
- _[vscode-cds@3.4.0]_ preliminary support for cds-compiler 2.x
- _[cds-compiler@2.1.0]_ Inferred sub elements of a referred structure type can be individually annotated.
- _[cds-compiler@2.1.0]_ All primitive types except for binary are now allowed as enum value types.
- _[cds-compiler@2.1.0]_ Allow users to define `A.B` even if there is a definition `A`, which is not a context or service.
- _[cds-compiler@2.1.0]_ You can now provide almost all annotation assignments without delimited identifiers:
  the use of `.`, `@`, and `#` is fine for annotation names, property names of structures, and in references used as annotation values.
- _[cds-compiler@2.1.0]_ for.odata:
  - All the artifacts that have localized fields get a `$localized: true` property.
  - Allow the user to define draft actions for annotation purposes
    - `draftPrepare(SideEffectsQualifier: String) returns <ET>`,
    - `draftActivate() returns <ET>`,
    - `draftEdit(PreserveChanges: Boolean) returns <ET>`
- _[cds-compiler@2.1.0]_ to.edm(x):
  - Warn about nonapplicable annotations.
  - Render property default values (only OData V4).
  - Option `odataProxies` exposes association targets outside of the current service.
    These `EntityType`s do only expose their primary keys have no accompanying `EntitySet`.
    The added navigation targets are exposed under their namespace or if not available under namespace `root`.
    `odataProxies` is only available with `--format=structured`.
  - Option `odataXServiceRefs` renders an `edm:Reference` to the service for those navigation targets
    that are defined in another service. `odataXServiceRefs` is only available with `--format=structured`.
  - Duplicate EntityContainer entries with same name will raise an error.
  - `array of` elements are now allowed for OData V2, too.
     _Addendum_ this change is reverted in `cds-compiler@2.2.4`, as it violates the OData v2 specification.
- _[cds-compiler@2.1.0]_ to.sql/hdi/hdbcds: Explicitly render the implicit alias for functions without arguments, e.g. `current_date`.
- _[cds-compiler@2.1.0]_ to.sql:
  - Sort the SQL statements according to the deployment order.
  - New sql dialect `plain`, which now is the default. synchronously.
- _[cds-compiler@2.1.0]_ API:
  - `compileSync()` is now compatible to `compile()`: the function can also receive a file cache and will resolve all `using`s
  - New API functions `parse.cql` (prefer it to deprecated `parseToCqn`) and `parse.expr` (prefer it to deprecated `parseToExpr`)
  - function `getArtifactCdsPersistenceName` now accepts a CSN as a third parameter (used to be a namespace). With a CSN provided, the name can be correctly constructed for naming modes `quoted` and `hdbcds`. Without a CSN, the name is possibly wrong if it contains dots. If the CSN is not provided or the third parameter is not a CSN, the old, deprecated, implementation is used.
- _[cds-compiler@2.1.0]_ `cdsc` and other client tools:
  - Added `--with-localized` to the command `toCsn`, which adds convenience views for localized entities to the output.
  - A script `bin/cds_update_identifiers.js` was added. You can use it to update the delimited identifier style in your CDS sources.
  - A script `bin/cdscv2m.js` was added. It's command `ria` adds `@cds.redirection.target: false` annotate statements for all ambiguous redirection errors.
- _[cds-compiler@2.1.0]_ Added `deprecated` options; setting any of them disables all `beta` options.
- _[cds@5.0.2]_ Ensure correlation ID and set intermediate `cds.context` in default `server.js`
- _[cds@5.0.1]_ `cds.load.properties` and `cds.parse.properties` to load and parse content in .properties format
- _[cds@5.0.1]_  `cds.load.csv` and `cds.parse.csv` to load and parse csv content
- _[cds@5.0.1]_  `CDL`, `CQL`, and `CXL` as new global methods for tagged template strings generating [CSN](/@external/cds/csn), [CQN](/@external/cds/cqn), or [CXN](/@external/cds/cxn) objects
- _[cds@5.0.1]_ Fluent API classes provided through `cds.ql` also support tagged template strings now in these methods: `SELECT`, `SELECT.from`, `SELECT.where`, `UPDATE`, `UPDATE.with`, `UPDATE.where`, `INSERT.into`, `DELETE.from`, `DELETE.where`
Example:

```js
let Authors = SELECT `ID` .from `Authors` .where `name like ${'%Brontë%'}`
let Books = SELECT `ID,title` .from `Books` .where `author_ID in ${Authors}`
```

- _[cds@5.0.0]_ MTX APIs are now automatically served when `cds.requires.multitenancy` exists. This renders an application-level server start script for multitenancy unnecessary.
- _[cds@5.0.0]_ Auto-connect to a live reload server started by `cds watch`.
- _[cds@5.0.0]_ `cds.parse` now offers tagged template strings. For example, const {CDL,CQL,CXL} = cds.parse; CQL`SELECT from Books where stock > 111`.
- _[cds@5.0.0]_ `cds.log` now supports config options for Loggers and log levels via `cds.env.log`.
- _[cds@5.0.0]_ `cds.entity.draft` as a stable way to read from draft data
- _[cds@5.0.0]_ `cds.linked` now correctly links, events, action params and results, which were not linked before
- _[cds@5.0.0]_ `cds.env.features.skip_unused = 'all'` removes all definitions from CSN, which are not reachable by defined services. Especially, when using comprehensive reuse models, like One Domain Model, this significantly reduces both, memory consumption as well as excess tables and views in databases.
- _[cds.java@1.15.0]_ The method `throwIfError()` has been added to the `Messages` interface. You can use this method to throw a `ServiceException` based on the error messages collected in the `Messages` container. With this API, you can avoid duplicating errors or to define a general top-level error message.
- _[cds.java@1.15.0]_ OData V2 and V4 adapters now support entity names that contain a dot in their CDS definition, for example `Books.texts`.
- _[cds.java@1.15.0]_ Direct modifications on primitive properties using `PUT` or `DELETE` are now supported in OData V4, for example `PUT /Books(4711)/title`.
- _[cds.java@1.15.0]_ CQN Select queries on remote OData services now support `excluding`.
- _[cds.java@1.15.0]_ Simple projections reducing the select list (without aliases) can now be used with queries on remote OData services.
- _[cds.java@1.15.0]_ The `TenantProviderService` is now capable of retrieving subscribed tenants from the SaaS registry, if a corresponding service binding is available. If not, it still falls back to retrieving subscribed tenants from the service manager.
- _[cds.java@1.15.0]_ Added sending of event messages to multitenant-aware SAP Event Mesh services.
- _[cds4j@1.19.0]_ Reflection API:
  - Support aspects with compositions of aspects
  - Support dots in events, aspects, structured types, actions, and functions
- _[cds4j@1.19.0]_ Generator:
  - Support dots in entity names, events, structured types, aspects, actions, and functions
  - Support composition of aspects
- _[cds-runtime@3.0.3]_ Support for `application/*+json` when parsing events through webhooks
- _[cds-runtime@3.0.2]_ Support for `{xpr:...}` as argument of a function in SQL Builder
- _[cds-runtime@3.0.2]_ Aliased parameters of a function call using an OData inline parameter syntax are provided as a request payload in `req.data`.
- _[cds-runtime@3.0.2]_ Skip conversion to UTC on SAP HANA during insert via `.rows()`, `.values()`, or `.as()` with `cds.env.features.preserve_timestamps = true`.
- _[cds-runtime@3.0.2]_ beta version of new URL to CQN parser
  - Use during read requests when serving to REST via `cds.env.features.rest_new_parser`
  - Known limitations:
    - Falsy key path segments in navigations, for example, `GET /Books/0/author`
    - `ne` operator in `$filter` does not match `NULL`
    - Nested functions, for example, `contains(toupper(...))`
    - `$select` not filtered for duplicates, for example, `$select=ID,*` -> `columns: ['ID', 'ID', ...]`
  - Not supported when serving to REST:
    - Deep navigations, for example, `GET /Books/1/author/books`
    - `/$count`
    - `$apply`
- _[cds-runtime@3.0.1]_ `PUT` primitive properties via OData
- _[cds-runtime@3.0.1]_ Optimistic concurrency control for primitive properties
- _[cds-runtime@3.0.1]_ Data for virtual properties filtered out on write to draft tables
- _[cds-runtime@3.0.1]_ Annotation `@odata.draft.enclosed`
- _[cds-runtime@3.0.0]_ SAP Event Mesh: Webhook support
- _[cds-runtime@3.0.0]_ SAP Event Mesh: Webhook support in multitenancy
- _[cds-runtime@3.0.0]_ Messaging: Remove obsolete topics on queue creation
- _[cds-runtime@3.0.0]_ Additional convenience look-ups of `messages.properties` files next to models
- _[cds-runtime@3.0.0]_ Support for the `@cds.search` annotation to allow a different set of searchable elements in the `$search` OData query
option and to extend the search to associated entities (currently not supported)
- _[cds-runtime@3.0.0]_ Additional credentials look-up with label `service-manager` in SAP HANA pool
- _[cds-runtime@3.0.0]_ Support for new "Locked by Another User" request of draft choreography
- _[cds-runtime@2.9.8]_ Database pool teardown in case of failed db connection attempt
- _[cds-runtime@2.9.6]_ Pass `tcpKeepAliveIdle` to `hdb` (available with `hdb^18`) via environment variable `HDB_TCP_KEEP_ALIVE_IDLE`
- _[cds-runtime@2.9.6]_ Database pool teardown in case of credentials become invalid scenario extended by unreachable database
- _[cds-mtx@2.0.0]_ No more duplicate log entries in model upgrade result.
- _[cds-mtx@1.2.0]_ Multitenant applications now support extensions of entities using schema evolution based on `.hdbmigrationtable` files.
- _[cds-mtx@1.2.0]_ It is now possible to specify limits for the number of extension fields per entity.
If no limit is specified, the number of extension fields is not limited.\
If this list exists, only entities and services contained in this list can be extended.

```json
"mtx" : {
  "extension-allowlist": [
    {
        'for': ['my.bookshop.Authors', 'my.bookshop.Books'],
        'new-fields': 2
    },
    {
        'for': ['CatalogService']
    }
  ]
}
```

- _[cds-sidecar-client@1.1.14]_ Compatibility with CDS Compiler v2.
- _[cds-odata-annotations@1.1.7]_ Go To References /Peek References / Show All References for the aggregated properties defined with the `@Analytics.AggregatedProperties` annotation. You can now navigate to the place where the aggregated property is referenced.
- _[cds-odata-annotations@1.1.5]_ Code completion, diagnostics, and quick info for applying selected client-side OData functions:
  - `odata.concat`
  - `odata.fillUriTemplate`
  - `odata.uriEncode`
- _[cds-odata-annotations@1.1.5]_ Peek References/ Go To References for annotations referenced in other annotations. You can now see if and where the annotation is referenced. Limitation: references in propagated annotations might be not included.

### Changed

- _[cds-dk@4.0.3]_ `cds compile --to xsuaa`, `edmx-v2`, and `edmx-v4` have moved from `@sap/cds` to `@sap/cds-dk`.
- _[cds-dk@4.0.2]_ `cds init` uses latest `Maven Java archetype` version `1.14.3` for creating Java projects.
- _[cds-dk@4.0.2]_ _npm-shrinkwrap.json_ format version 2 is now used, produced by `npm` 7
- _[cds-dk@4.0.2]_ _npm-shrinkwrap.json_ now contains integrity hashes
- _[cds-dk@4.0.0]_ `cds init` uses latest `Maven Java archetype` version `1.14.0` for creating Java projects.
- _[cds-dk@4.0.0]_ `cds watch` has dropped its fallback support for `nodemon` through the `CDS_USE_NODEMON` configuration.
- _[cds-dk@4.0.0]_ `cds add hana` now sets `hdbtable` as deployment format for SAP HANA
- _[cds-dk@3.5.1]_ Bump version of `@sap/cds` to 4.6.5
- _[vscode-cds@4.0.0]_ consume cds-compiler 2.1.4
- _[vscode-cds@3.4.0]_ now requires Visual Studio Code `>=1.53`
- _[vscode-cds@3.4.0]_ uses `@sap/cds-lsp@4.4.1`
- _[vscode-cds@3.4.0]_ uses `@sap/cds-compiler@1.50.0`
- _[cds-compiler@2.1.0]_ CSN representation:
  - CSN Version is set to `2.0`
  - CSN `definitions` are not sorted anymore
  - `$syntax` is non-enumerable
  - increase the use of JS numbers in the CSN for numbers in CDL, especially noticeable in annotation values
  - Annotation definitions are to be found in the top-level property `vocabularies`.
  - Introduce `kind: 'aspect'` to replace `kind: 'type', $syntax: 'aspect'` and
    `kind: 'entity', abstract: true` (the deprecated variants are still accepted as input).
  - Projections are rendered via `projection` instead of `query.SELECT`.
  - Parentheses are represented structurally and unnecessary parentheses are omitted.
  - Use `.` instead of `_` for the name suffix of generated texts entities and the calculated entity for managed compositions.
  - The CSN returned by `compile()` does not include localized convenience views anymore.
- _[cds-compiler@2.1.0]_ Core engine (function `compile`):
  - An assignment `@Foo.Bar` is always `@Foo.Bar`, we do not try to search anymore
    for a local definition of `Foo` probably having a different full name.
  - Localized convenience views are no longer generated by the core compiler but added by the `for.odata`
    and `to.sql/hdi/hdbcds` processing on demand.
  - Minimize name clashes when calculating names for autoexposed entities,
    extends the v1 option `dependentAutoexposed` to sub artifacts of entities (see “Added”).
  - Ambiguities when redirecting associations now always lead to compile errors;
    you might want to use the new annotation `@cds.redirection.target` to solve them.
  - The association `up_` in the calculated entity for managed compositions is now managed.
    _Limitation_: Nested managed compositions are not activatable via `to.hdbcds --names=hdbcds`.
  - Bound actions and functions are no longer propagated from the main query source to the resulting view or projection.
  - Remove annotation `@cds.autoexpose` from generated `.texts` entity
  - Require `order by` references to start with a table alias when referring to source elements.
  - Infer the type of a `select` item from the type of a top-level `cast`.
- _[cds-compiler@2.1.0]_ Localized convenience views now also contain `masked` elements of the original artifact.
- _[cds-compiler@2.1.0]_ for.odata:
  - Even with `--format: structured`, (flat) foreign keys for managed associations are generated.
  - An `entity` or an `aspect` defined outside the current service cannot be used as action parameter or return types.
  - Structured elements are expanded in-place.
  - Foreign keys for managed associations are created in-place.
- _[cds-compiler@2.1.0]_ to.edm(x):
  - An `Edm.TypeDefinition` is rendered for a derived scalar type and used as type reference instead of
    rendering the final scalar type, including the `array of`/`many` predicates.
  - `enum` type definition as service member is rendered as `edm:TypeDefinition` instead of `edm:EnumType`.
  - Set default source cardinality of compositions to exact one. This is observable in V2 EDM only.
  - Key must not be `nullable=true`, this includes all sub elements of used structured types.
  - Default values are no longer propagated from the principal to the generated foreign key element.
  - `array of array` is rejected, nested Collections `Collection(Collection(...))` are illegal.
  - Temporal rendering:
    - `@cds.valid.from` is not `Edm.KeyRef` anymore.
    - `@cds.valid.key` is rendered as `@Core.AlternateKeys`.
  - Downgrade message "`<Term>` is not applied" from warning to info.
  - Update Vocabularies 'Aggregation', 'Capabilities', 'Core', 'Validation'.
- _[cds-compiler@2.1.0]_ to.sql/to.hdi/to.hdbcds:
  - Reject using associations or compositions in query elements starting with `$self` or `$projection`.
  - Virtual elements are not rendered.
  - Structured elements are expanded in-place.
  - Foreign keys for managed associations are created in-place.
  - Implicit/CDL-style casts are not rendered as SQL CASTs.
  - All association usages in queries are always translated into JOIN expressions (except for to.hdbcds `--names=hdbcds`).
- _[cds-compiler@2.1.0]_ to.sql/to.hdi:
  - Downgrade message `to-many-no-on` from error to warning.
  - Default values are no longer propagated from the principal to the generated foreign key element.
- _[cds-compiler@2.1.0]_ to.sql:
  - Changed type mappings for `--dialect=sqlite`:
    - `cds.Date` --› `DATE_TEXT`
    - `cds.Time` --› `TIME_TEXT`
    - `cds.Timestamp` --› `TIMESTAMP_TEXT`
    - `cds.DateTime` --› `TIMESTAMP_TEXT`
    - `cds.Binary` --› `BINARY_BLOB`
    - `cds.hana.Binary` --› `BINARY_BLOB`
  - Don't check missing type facets.
- _[cds-compiler@2.1.0]_ to.hdbcds:
  - References to derived, primitive types are replaced by their final type. The derived type definitions are not rendered anymore for hdbcds naming mode.
  - Don't check missing type facets in views.
- _[cds-compiler@2.1.0]_ to.cdl:
  - Render maximum cardinality as 'to one' or 'to many'.
  - Return at most two files. The first one (named _model.cds_) contains all definitions, rendered in order, without namespaces or using. Contexts and services are NOT nested. The second file (named _\<namespace>.cds_) represents the CSN `namespace` property, simply defining such a namespace and requiring the first file.
- _[cds-compiler@2.1.0]_ API changes:
  - The API functions `compile()` and `compileSync()` return a CSN and not an XSN, `compactModel()` returns the first argument.
  - If `options` does not provide a `messages` property, all messages are printed to standard error.
  - The `options.messages` is kept throughout the compiler and contains all messages from the compiler and all backends.
  - Messages are not sorted anymore; use the API function `sortMessages` to have it sorted.
- _[cds@5.0.1]_ Minimum required Node.js version is now 12. Support for Node.js v10 is dropped.
- _[cds@5.0.0]_ Upgraded major version of dependency `@sap/cds-compiler`
- _[cds@5.0.0]_ `cds.requires.db.multiTenant` is deprecated. Multitenancy can now be enabled by adding a `cds.requires.multitenancy` configuration.
- _[cds@5.0.0]_ `cds deploy --to hana` no longer adds a driver for SAP HANA to _package.json_. This can be done with `cds add hana`.
- _[cds@5.0.0]_ `cds deploy --to hana` no longer adds configuration for SAP HANA to _package.json_. This can be done with `cds add hana`.
- _[cds@5.0.0]_ `cds deploy --to hana` drops support for the classic CAP Java runtime, that means, longer writes credentials for SAP HANA to `connection.properties`.
- _[cds@5.0.0]_ Fiori preview now [loads and shows data initially](https://sapui5.hana.ondemand.com/1.84/#/topic/1cf5c7f5b81c4cb3ba98fd14314d4504) in its list page
- _[cds@5.0.0]_ i18n template strings now are replaced in EDMX documents such that they retain their surrounding string. For example, the `"{i18n>key1} - {i18n>key2}"` template results in `"value1 - value2"`, while previously the first match replaced the entire string, leading to `"value1"`. This is helpful for the [`Template` strings of `UI.ConnectedFields`](https://github.com/SAP/odata-vocabularies/blob/ac9fe832df9b8c8d35517c637dba7c0ac2753b0f/vocabularies/UI.xml#L168).
- _[cds@5.0.0]_ CDS drops compiler v2 support for classic CAP Java runtime projects. `cds build` returns an error if compiler version 2 is used. For further details regarding migration to CAP Java SDK runtime, see [Migration](https://cap.cloud.sap/docs/java/migration).
- _[cds@5.0.0]_ `req.timestamp` is a Date object now; was a UNIX epoch integer before, i.e., Date.now()
- _[cds.java@1.15.0]_ Added the new interface `CqnService`, which will gradually replace `CdsService`. The benefits of the new interface will be that it avoids name clashes with `CdsService` from the Reflection API and captures the intent of the interface better. In a future release `CdsService` might be deprecated. To avoid warnings in your code, consider renaming usages of `CdsService` to `CqnService`.
- _[cds.java@1.15.0]_ When switching to the privileged user in a new Request Context using `privilegedUser()`, the current tenant context is automatically propagated to the privileged user.
- _[cds.java@1.15.0]_ Unknown topic events are no longer auto-completed in Messaging Services.
- _[cds.java@1.15.0]_ The goals `clean` and `generate` of the `cds-maven-plugin` adopting the naming convention for properties and add prefix `cds.<goalname>` to all their properties.
- _[cds.java@1.15.0]_ The `cds-services-archetype` doesn't set a Node.js version in pom.xml anymore, which means that the default version provided by the `cds-maven-plugin` is used. If required it is still possible to set the Node.js version property in a project.
- _[cds-runtime@3.0.2]_ Minimum required Node.js version is now 12. Support for Node.js v10 is dropped.
- _[cds-runtime@3.0.2]_ Draft handlers registered via `cds.ApplicationService.registerFioriHandlers()`, which gets called in `cds.ApplicationService.init()`
- _[cds-runtime@3.0.2]_ OData validation is skipped by default. It can be explicitly turned on by setting `cds.odata.skipValidation` config to `false`
- _[cds-runtime@3.0.1]_ Grants of `@restrict` in draft are derived from the CRUD vocabulary
- _[cds-runtime@3.0.1]_ Unnecessary `@restrict` checks for actions on drafts are skipped ("in process by user" check remains)
- _[cds-runtime@3.0.1]_ Drafts are deleted after the active version was created/ updated
- _[cds-runtime@3.0.1]_ Skip "with parameters" clause if no order by clause or all columns in the order by clause are not strings
- _[cds-runtime@3.0.0]_ By default, only elements typed as `string` are searchable via the `$search` OData query option to improve performance
- _[cds-runtime@3.0.0]_ Deprecate `@Search.defaultSearchElement` annotation in favor of the `@cds.search` annotation
- _[cds-runtime@3.0.0]_ Ignore `not null` annotation on nested structured types in OData x4 flavor (`cds.env.odata.flavor = x4`) if its parent structure is optional
- _[cds-runtime@3.0.0]_ Smart quoting based on database-specific keywords exported by `@sap/cds-compiler`
  - Deactivate during two-month grace period via compatible feature flag `cds.env.features.compiler_keywords = false`
- _[cds-odata-annotations@1.1.7]_ Vocabulary description and long description for restricted `String` values are now displayed in Quick Info window of the completion lists.

### Fixed

- _[cds-dk@4.0.3]_ `cds init` now works if started in file paths with spaces
- _[cds-dk@4.0.2]_ Allow blanks in cds-dk installation path when running `cds init`.
- _[cds-dk@4.0.1]_ Many things in linter
- _[cds-dk@4.0.0]_ `cds watch` no longer runs in an endless restart loop if started in the user's home dir.
- _[cds-compiler@2.1.4]_ The postinstall step now never fails with an exit code != 0. As the postinstall step is optional, it should not break any `npm install` steps.
- _[cds-compiler@2.1.2]_ ensure `postinstall` script is part of the shipped _package.json_
- _[cds-compiler@2.1.0]_ Core engine (function `compile`):
  - Managed compositions in sub elements are now properly redirected, even if the sub structure comes from a referred type.
  - Do not dump with sub queries in the `on` condition of `join`s.
  - Properly report that managed aspect composition inside types and as sub elements are not supported yet.
  - Make sure that including elements with managed aspect compositions only use the provided target aspect, but not the generated target entity.
  - Properly handle the extra keywords in the third argument of the SAP HANA SQL function `round`.
- _[cds-compiler@2.1.0]_ to.edm(x):
  - Return all warnings to the user.
  - Don't render references and annotations for unexposed associations.
  - Rendering of `@Validation.AllowedValue` for elements of type enum annotated with `@assert.range`:
    - Add `@Core.Description`, if the enum symbol has a `@Core.Description`, `@description` or document comments.
  - Primary key aliases are now the path base names, colliding aliases are numbered.
  - Fix a bug in constraint calculation if principal has no primary keys.
  - Illegal OData identifiers, which are not exposed in the generated edmx schema are not causing errors anymore.
  - Improve non-enum value handling on term definitions based on an enum type by raising a warning and rendering the value with appropriate scalar EDM type.
  - Render annotation qualifier in JSON format.
- _[cds-compiler@2.1.0]_ to.sql/hdi/hdbcds:
  - Reject structured view parameters for SAP HANA.
  - Types are not rendered anymore for SAP HANA in quoted mode.
  - Structured elements in subqueries are now properly expanded.
  - Actions, functions, annotations, and events do not have database specific checks run on them, as they will not be part of the resulting artifacts anyways
  - With `--names=quoted` or `hdbcds`, some `.` in artifact names are turned into `_`. In general, this happens when part of the name prefix is "shadowed" by a non-context/service; any `.` after that point is turned into `_`. This change also affects the filenames and the `@cds.persistence.name` annotation in the CSN returned by `to.hdi.migration` and `for.odata`.
- _[cds-compiler@2.1.0]_ to.sql/hdi:
  - Fixed a bug, which led to an exception if elements were referenced as types.
  - For the SQLite dialect, date, time, and timestamp are rendered as simple string literals instead of function calls.
  - For naming mode "plain", date, time, and timestamps are rendered as SQL-compliant literals.
- _[cds-compiler@2.1.0]_ to.sql/hdbcds: Fix issue, which led to wrong ON conditions for naming mode `hdbcds`.
- _[cds-compiler@2.1.0]_ to.sql:
  - SRID of SAP HANA spatial type (`ST_POINT` & `ST_GEOMETRY`) is not rendered as the length of `CHAR` for SQL-dialects other than `hana`. The resulting `CHAR` has a default length of 2,000.
- _[cds-compiler@2.1.0]_ to.hdbcds:
  - Nullability constraints on view parameters are not rendered anymore.
  - CDS and SAP HANA CDS types inside cast expressions are mapped to their SQL-counterparts, as the CDS types can't be used in a cast.
- _[cds-compiler@2.1.0]_ to.cdl: Correctly render `event` typed as `projection`.
- _[cds-compiler@2.1.0]_ to.hdi.migration: Don't generate `ALTER` for type change from association to composition or vice versa (if the rest stays the same),
  as the resulting SQL is identical.
- _[cds-compiler@1.50.4]_ to.hdbcds: CDS and SAP HANA CDS types inside cast expressions are mapped to their SQL-counterparts, as the CDS types can't be used in a cast.
- _[cds-compiler@1.50.2]_ Correct calculation of dependent autoexposed entity name (fixing a potential regression with v1.50.0)
- _[cds-compiler@1.50.2]_ to.hdi.migration: Correctly handle "temporal" and other cases when rendering expressions
- _[cds-compiler@1.50.2]_ to.edm(x):
  - Improve non-enum value handling on Oasis enum term definitions by raising a warning and rendering the value with appropriate scalar EDM type.
  - Render annotation qualifier in JSON format.
- _[cds-compiler@1.50.2]_ Update OData vocabularies 'Aggregation', 'Analytics', 'Capabilities', 'CodeList', 'Common', 'Communication', 'Core', 'Graph', 'HTML5', 'ODM', 'PersonalData', 'Session', 'UI'
- _[cds@5.0.4]_ `cds build` no longer fails with a `task.apply is not a function` error when used in an npm script.
- _[cds@5.0.3]_ `cds.compile` got thoroughly cleaned up and enhanced as the single API to compile models
- _[cds@5.0.3]_ `cds.compile.to.cdl` was missing in 5.0.2
- _[cds@5.0.3]_ `cds build` no longer uses reflected CSN which caused odata and EDMX transformation to fail. As a consequence language specific EDMX files were missing.
- _[cds@5.0.2]_ `cds build` no longer aborts for CAP Java SDK based projects with compiler v2 not supported message.
- _[cds@5.0.1]_ Fixed race conditions in `cds.serve` leading to broken services
- _[cds@5.0.1]_ Fixed typos in API type definitions
- _[cds@5.0.1]_ Fixed `cds.reflect.forall` for CSN extensions
- _[cds@5.0.1]_ Fixed orphaned `_texts` proxies, causing init from CSV to fail with "no such table" errors
- _[cds@5.0.0]_ `cds.connect.to` no longer returns `undefined` in concurrent cases where `connect` is called again while a datasource is about to be connected.
- _[cds@5.0.0]_ `cds.log` formerly wrote log and debug output to stderr, now writes that to stdout
- _[cds@5.0.0]_ `cds.server` now accepts port `0` as a number
- _[cds@5.0.0]_ Race conditions in `cds.serve` and `cds.connect` lead to wrong Service instances to lost handler registrations
- _[cds@4.6.5]_ `cds build` now correctly parses `.hdbtablemigration` files on Windows
- _[cds@4.6.5]_ `compile --to serviceinfo` no longer crashes for Spring configuration in multi-root `yaml` files
- _[cds.java@1.15.0]_ Fixed a bug, that could create a mismatch between the tenant in the Request Context and the tenant used by the database transaction. This bug could only occur, when explicitly changing the tenant context in the Request Context after already starting a database transaction. This situation is now detected with an exception and dedicated database transactions or ChangeSet Contexts must be opened for each tenant.
- _[cds.java@1.15.0]_ Fixed a bug that caused issues with associations as keys in draft-enabled entities.
- _[cds.java@1.15.0]_ Fixed a bug that caused the creation date instead of the last changed date of a draft entity to be considered during the draft garbage collection.
- _[cds.java@1.15.0]_ Fixed a bug that caused `getDefinition()` of `ApplicationService` and `RemoteService` to return the service definition from the tenant-independent model.
- _[cds.java@1.15.0]_ Fixed a bug that caused serialization issues in OData V4 when directly reading a `Edm.Decimal` property (for example, `/browse/Books(4711)/price`).
- _[cds.java@1.15.0]_ Fixed a bug that caused invalid OData V4 EDMX files to be loaded due to external references defined in the EDMX.
- _[cds.java@1.15.0]_ Fixed a bug that caused message targets to miss on the OData V2 error response.
- _[cds.java@1.15.0]_ Fixed a bug that caused guid keys in message targets to be rendered incorrectly in OData V2.
- _[cds.java@1.15.0]_ Fixed a bug that rejected requests (HTTP return code 403 Forbidden) to public actions and functions, which accept parameters.
- _[cds.java@1.15.0]_ Fixed a bug that caused an incorrect authentication auto-configuration in case the base path of an adapter was configured to `/`.
- _[cds.java@1.15.0]_ Fixed a bug, that caused no CSV data to be initialized during startup, in case an error was present in one of the CSVs. Every CSV file is now inserted in a dedicated transaction.
- _[cds.java@1.15.0]_ Fixed a bug in `cds-maven-plugin`, where using command line argument `-Dskip=true` skips the goals `install-node`, `install-cdsdk`, `cds`, and `npm` at once. Now, each of these goals has it's own skip property: `cds.cds.skip`, `cds.install-cdsdk.skip`, `cds.install-node.skip`, and `cds.npm.skip`.
- _[cds.java@1.14.1]_ Fixed a bug that prevented authorized users to read draft metadata or texts of a draft entity (for example, `/<draft-entity>/DraftAdministrativeData` or `/<draft-entity>/texts`). The requests were rejected with HTTP response code 403 (Forbidden) in case the entity is protected with a `@restrict`-clause that has a `where`-condition.
- _[cds.java@1.13.2]_ Fixed a bug that prevented mock user configuration in case there was an XSUAA-binding in _default-env.json_ but XSUAA-configuration has been turned off explicitly.
- _[cds.java@1.13.2]_ Fixed a bug that caused the field length validation to fail on arrayed string elements (for example, `many String(10)`).
- _[cds4j@1.19.0]_ Fix bulk upsert with empty list
- _[cds4j@1.19.0]_ Support inline/anonymous defined type as return type for actions/functions
- _[cds4j@1.19.0]_ Fix cascading delete fallback for path with infix filters
- _[cds4j@1.18.1]_ Fix bulk upsert with empty list
- _[cds4j@1.18.1]_ Fix cascading delete fallback for path with infix filters
- _[cds4j@1.18.1]_ Render all LIMIT clauses as literal values
- _[cds.java@1.13.2]_ Updated CDS4j to `1.17.2`
- _[cds-runtime@3.0.5]_ Side effects on `@sap/hana-client`'s streaming extension
- _[cds-runtime@3.0.4]_ Empty inserts for nested composition of one
- _[cds-runtime@3.0.4]_ Preserve children if multiple compositions to same target
- _[cds-runtime@3.0.3]_ Navigation properties in `$select` inside of `$expand` query option
- _[cds-runtime@3.0.2]_ Accept header matching during media stream
- _[cds-runtime@3.0.2]_ Time delta for Date type in temporals
- _[cds-runtime@3.0.2]_ Function calls using an OData inline parameter syntax with aliased parameters of primitive types
- _[cds-runtime@3.0.2]_ Path navigation in `$orderby` expressions when using SAP HANA functions
- _[cds-runtime@3.0.1]_ Reading `SiblingEntity` via navigation of a draft enabled entity
- _[cds-runtime@3.0.1]_ Inline defined return types of custom actions/functions in REST
- _[cds-runtime@3.0.1]_ Multiple integrity errors in one changeset
- _[cds-runtime@3.0.1]_ `@Capabilities.NavigationRestrictions` considers "deep" navigation paths
- _[cds-runtime@3.0.1]_ Add ETags to result based on `@odata.etag` in CSN alone
- _[cds-runtime@3.0.1]_ Reading media stream with accept header
- _[cds-runtime@3.0.0]_ Using path navigations in `$filter` for SAP HANA-based services configured with `cds.odata.flavor = x4`
- _[cds-runtime@3.0.0]_ Only `messaging` will deal with domain-level events
- _[cds-runtime@3.0.0]_ Read access using nondraft enabled projections on draft children
- _[cds-runtime@3.0.0]_ Debug message when metadata size exceeds cache limit
- _[cds-runtime@3.0.0]_ Order by using functions in combination with group by
- _[cds-runtime@3.0.0]_ Streaming by navigation
- _[cds-runtime@3.0.0]_ Alignment of temporal data with compiler v2 format
- _[cds-runtime@3.0.0]_ Calculate `DraftIsCreatedByMe` and `DraftIsProcessedByMe` properties of `DraftAdministrativeData` by reading drafts
- _[cds-runtime@2.9.7]_ Reserved keywords for smart quoting
- _[cds-runtime@2.9.7]_ Datetime conversion for SAP HANA in case of `INSERT...as(SELECT...)`
- _[cds-runtime@2.9.5]_ Relative error target on draft activation for SAP Fiori Elements with OData V2
- _[cds-runtime@2.9.4]_ Support for version 2 of the `@sap/xssec` package, as it is deprecated. Now, only version 3 of the package is supported.
- _[cds-runtime@2.9.3]_ Check whether current request is a bound action
- _[cds-runtime@2.9.2]_ Result payload by expand of grandchild entity, when the child data that is null
- _[cds-runtime@2.9.2]_ Delete composition of one via navigation
- _[cds-runtime@2.9.2]_ Use extended model in structured processing
- _[cds-mtx@1.1.5]_ Connection handling has been improved. Errors of type `TimeoutError: Acquiring client from pool timed out` are reduced.
- _[cds-mtx@1.1.5]_ The extension API `/mtx/v1/content` now returns a correct JSON if a collection is requested with any version of `@sap/cds` used by the application. The `cds extend` command was returning `(intermediate result)` is `not iterable` because of an incorrect server response.
- _[cds-mtx@1.1.3]_ `mtx/v1/model/status` now returns the job status again
- _[cds-odata-v2-adapter-proxy@1.6.0]_ Final CDS v5 compatibility version
- _[cds-odata-v2-adapter-proxy@1.5.11]_ CDS 5 compatibility (>= 1.6.0 needed for CDS v5)
- _[cds-odata-v2-adapter-proxy@1.5.11]_ Support `content-disposition` header in media entity upload
- _[cds-odata-v2-adapter-proxy@1.5.11]_ Introduction of element annotation `@cov2ap.headerDecode` to decode header values
- _[cds-odata-v2-adapter-proxy@1.5.10]_ Fix crash for bound action without return type
- _[cds-odata-v2-adapter-proxy@1.5.10]_ Consider bound action binding parameter for messages targets

### Removed

- _[cds-compiler@2.1.0]_ Core engine (function `compile`):
  - Referential integrity issues now always lead to compile errors.
  - The `type of` operator (without `:` in the reference) cannot be used for parameters and inside queries anymore.
  - Using `"…"` for delimited identifiers leads to a compile error.
  - Issue an error for “smart artifact references”, that means, when using `Definition.elem` instead of `Definition:elem`
  - The definition of annotations is no longer allowed in `context`s and `service`s.
  - Providing an alias name without `as` leads to a compile error or warning.
  - Providing unexpected kind of definitions for `type` or other references lead to a compile error.
  - The ancient CSN 0.1.0 format generation has been removed.
  - The compiler does no longer look for modules whose file extension is _.csn.json_, both _.csn_ and _.json_ is still checked.
- _[cds-compiler@2.1.0]_ for.odata:
  - With `--format: structured`, the property `$generatedFieldName` in keys of managed associations has been removed.
  - Artificially exposed types that are required to make a service self contained are removed from the OData processed CSN.
  - Localized convenience views are no longer part of the OData CSN.
- _[cds-compiler@2.1.0]_ API changes:
  - The deprecated XSN based transformers `forHana`, `forOdata`, `toSwagger`, `toSql`, `toCsn`, `toCdl` have now been removed from the code base.
  - Remove `collectSources()` as well as `options.collectSources`.
  - A `CompilationError` usually does not have the property `model` anymore, to avoid potential memory issues.
  - CSN compiler messages no longer have a `location` property. Use `$location` instead.
- _[cds-compiler@2.1.0]_ The following `cdsc` options have been removed:
  - `--old-transformers`.
  - `--hana-flavor` with all corresponding rudimentary implemented language constructs.
  - `--new-resolve` (the new resolver is now the default).

The following undocumented, internal functions have been removed.
In case you spotted and used them, replace as given below.

- _[cds@5.0.3]_ `cds.compile.cdl` &rarr; use `cds.compile` instead
- _[cds@5.0.3]_ `cds.compile.to.parsed.csn` &rarr; use `cds.parse` instead
- _[cds@5.0.3]_ `cds.compile.to.xtended.csn` &rarr; use `cds.compile` instead
- _[cds@5.0.3]_ `cds.compile.to.inferred.csn` &rarr; use `cds.compile` instead
- _[cds@5.0.3]_ `cds.compile.to.hdi` &rarr; use `cds.compile.to.hdbtable` instead
- _[cds@5.0.3]_ `cds.compile.to.hana` &rarr; use `cds.compile.to.hdbcds` instead
- _[cds@5.0.3]_ `cds.compile.to.xsuaa` &rarr; still available in CLI thru `cds compile -2 xsuaa`
- _[cds@5.0.3]_ `cds.compile.to.serviceinfo` &rarr; still available in CLI thru `cds compile -2 serviceinfo`
- _[cds@5.0.3]_ `cds.compile.to['edmx-v2']` &rarr; still available in CLI thru `cds compile -2 edmx-v2`
- _[cds@5.0.3]_ `cds.compile.to['edmx-v4']` &rarr; still available in CLI thru `cds compile -2 edmx-v4`
- _[cds@5.0.3]_ `cds.compile.to['edmx-w4']` &rarr; still available in CLI thru `cds compile -2 edmx-w4`
- _[cds@5.0.3]_ `cds.compile.to['edmx-x4']` &rarr; still available in CLI thru `cds compile -2 edmx-x4`

- _[cds@5.0.0]_ Compiler non-snapi support &rarr; see `cds.env.features.snapi` option
- _[cds@5.0.0]_ In recent releases we added methods `cds.compile.to.hdbtabledata` and `cds.compile.to.hdbmigration`, intentionally undocumented, as they were meant to be private. Nobody should ever have used these methods, hence nobody should be affected by their removal.
- _[cds-runtime@3.0.2]_ Blind path-level logs by odata-server
- _[cds-runtime@3.0.0]_ Support for version 2 of the `@sap/xssec` package, as it is deprecated. Now, only version 3 of the package is supported.

## February 2021

### Added

- _[cds-compiler@1.50.0]_ Introduce annotation `@cds.redirection.target`. With value `false`, the projection isn't considered an implicit redirection target; with value `true`, is considered a “preferred” redirection target.
- _[cds@4.6.3]_ [beta] `cds build` for SAP HANA now provides schema evolution support for multitenant application extensions.
- _[cds@4.6.1]_ [beta] `cds build` for SAP HANA now supports the generation of `hdbmigrationtable` design-time artifacts for large volume tables allowing for schema evolution capabilities. Model entities annotated with `@cds.persistence.journal` will be deployed as `hdbmigrationtable` artifacts instead of `hdbtable`.
- _[cds.java@1.14.0]_ Enhanced the index page to list both OData V4 and OData V2 endpoints, in case one or both adapters are present. As part of this change the properties to configure the index page were moved from `cds.odataV4.indexPage` to `cds.indexPage`.
- _[cds.java@1.14.0]_ OData V4 `$expand` now supports using inner `$top` and `$skip` query options.
- _[cds.java@1.14.0]_ Improved the changeset and error handling in the OData V2 adapter to align the behaviour more closely to OData V4.
- _[cds.java@1.14.0]_ The privileged user is now allowed to read the drafts of all entities and users.
- _[cds.java@1.14.0]_ Action and function calls returning a structured type can now be executed on remote OData services.
- _[cds4j@1.18.0]_ `CQL.matching` to build a Query-by-Example style predicate
- _[cds4j@1.18.0]_ Support path expressions in Update and Delete
- _[cds4j@1.18.0]_ Introduce a global switch to disable WITH PARAMETERS in SQL statements on SAP HANA
- _[cds4j@1.18.0]_ Support removing values in CDS data through `CdsDataProcessor` converters
- _[cds4j@1.18.0]_ Reflection API:
  - Support composition of Aspects
  - Support dots in entity names
- _[cds-runtime@2.9.0]_ Support for `cds.LargeString` in queries for remote services
- _[cds-runtime@2.9.0]_ Support for tenant-aware emit in AMQP messaging
- _[cds-runtime@2.9.0]_ Metadata (for example, `__count` or `@odata.count` for OData V2 and OData V4, correspondingly) of an external service result are uniformly normalized (for example, to `$count`) and propagated with the result by the rest-client
- _[cds-runtime@2.9.0]_ Improved support for managed composition of one
- _[cds-runtime@2.9.0]_ Support for cascade DELETE for composition of one
- _[cds-runtime@2.9.0]_ Smart quoting in SQL statements
- _[cds-runtime@2.9.0]_ Improved memory consumption of integrity checks
- _[cds-runtime@2.9.0]_ Result payload includes ETag values of composition targets
- _[cds-runtime@2.9.0]_ Custom metadata in OData result (alpha)
- _[cds-runtime@2.9.0]_ Support for canonical URL to `$metadata` in `@odata.context` of a response: use `cds.env.odata.contextAbsoluteUrl = true` to get a service URL (default) or `cds.env.odata.contextAbsoluteUrl = 'http://example.com/yourService/'` to set your own URL
- _[cds-runtime@2.8.4]_ Database pool teardown in case credentials becomes invalid
- _[cds-runtime@2.8.4]_ Idle timeout added to default database pool configuration
- _[cds-mtx@1.1.2]_ Multitenant applications **without tenant-specific extensions** now support schema evolution based on `.hdbmigrationtable` files.
- _[cds-mtx@1.1.2]_ Provisioning parameters for the container creation can now also be set through cds environment `mtx.provisioning.container` or environment variable `CDS_MTX_PROVISIONING_CONTAINER`.\ Provisioning parameters that are set in the subscription request to `mtx/v1/provisioning/tenant`
override the values from the environment.
- _[cds-mtx@1.1.2]_ Dedicated hdi deployment options can now be set through environment variable
`HDI_DEPLOY_OPTIONS`, for example, `HDI_DEPLOY_OPTIONS="{\"trace\": true }"`. See section [Deployment Options in HDI](https://help.sap.com/docs/SAP_HANA_PLATFORM/4505d0bdaf4948449b7f7379d24d0f0d/a4bbc2dd8a20442387dc7b706e8d3070.html) for more details.
- _[cds-mtx@1.0.28]_ It's now possible to pass hdi deployment parameters `undeploy` and `path-parameter` with the model upgrade
(`mtx/v1/model/upgrade` and `mtx/v1/model/asyncUpgrade`)
- _[cds-sidecar-client@1.1.13]_ Include original server error message in case of HTTP errors.

### Changed

- _[cds-dk@3.5.0]_ `cds init` creates projects with latest version of `sqlite3` again.
- _[cds-dk@3.5.0]_ `cds add mta` now creates a _mta.yaml_ file that correctly handles spring boot _.jar_ and _.war_ archives.
- _[cds-dk@3.4.2]_ `cds init` uses latest `Maven Java archetype` version `1.13.1` for creating Java projects.
- _[cds-dk@3.4.2]_ Bump version of `@sap/cds` to 4.5.3
- _[cds-dk@3.4.1]_ Bump version of `@sap/cds` to 4.5.2
- _[cds-dk@3.4.1]_ Bump version of `@sap/cds-runtime` to 2.8.6
- _[cds-dk@3.4.1]_ Bump version of `@sap/cds-compiler` to 1.49.2
- _[cds.java@1.14.0]_ The cds-maven-plugin now enforces a minimum `@sap/cds-dk` version of `3.0.0`.
- _[cds.java@1.14.0]_ Service entity `DraftAdministrativeData` is read-only now. Direct requests are rejected (for example, `/Service/DraftAdministrativeData`). Read requests via navigation to this entity (for example, `/Service/Entity(id)/DraftAdministrativeData`) are allowed for authorized users.
- _[cds.java@1.14.0]_ In case property `cds.security.openUnrestrictedEndpoints` isn't configured explicitly, the Spring security configuration in the runtime authenticates all endpoints in multitenant scenario. In single tenant mode, the endpoints are still authenticated according to the restrictions in the CDS model.
- _[cds.java@1.14.0]_ The signature of the error messages 400002, 400012, 400015, 400018, 400019, 409006 and 428002 was changed to not expose request data in error messages.
- _[cds4j@1.18.0]_ Elements with type UUID are not searched by default any longer
- _[cds4j@1.18.0]_ Improve Performance of cascading delete for acyclic delete graphs
- _[cds4j@1.18.0]_ Use batch delete in upserts
- _[cds4j@1.18.0]_ Suppress WITH PARAMETERS for simple CQL statements on SAP HANA
- _[cds-runtime@2.9.0]_ The default implementation of SAP Event Mesh (`enterprise-messaging`) is now multitenant aware.
Currently only emit is implemented. The old, shared variant is available through `enterprise-messaging-shared`.
- _[cds-runtime@2.9.0]_ Skip localization on pure count queries
- _[cds-runtime@2.9.0]_ Managed properties of base entity are updated if any composition target is updated
- _[cds-runtime@2.9.0]_ Deactivate during two-month grace period via compatible feature flag `cds.env.features.update_header_item = false`
- _[cds-runtime@2.9.0]_ Default text templates for element assertions don't contain an element name as a parameter anymore
- _[cds-runtime@2.9.0]_ Custom authorization header can now be set in service consumption
- _[cds-runtime@2.9.0]_ Managed associations-to-one aren't expanded in the result of a POST request in case of `cds.odata.flavor = v4`
- _[cds-runtime@2.9.0]_ Deactivate during two-month grace period via compatible feature flag `cds.env.features.skip_expand_assoc = false`
- _[cds-runtime@2.9.0]_ Implicit auto exposed entities inherit authorization restrictions from parent
- _[cds-runtime@2.9.0]_ Modifying an entity without authorization results in HTTP code `403` instead of `404`
- _[cds-runtime@2.9.0]_ Instance-based `@restrict.where` clauses are ignored during `CREATE` (instead of rejecting the request)
- _[cds-runtime@2.9.0]_ Deactivate during two-month grace period through compatible feature flag `cds.env.features.skip_restrict_where = false`

### Fixed

- _[cds-dk@3.5.0]_  `cds env` does not longer fail with an exception for unknown commands
- _[cds-dk@3.4.2]_ `cds init` now refers to the latest HDI deployer, which supports Node.js v14
- _[cds-dk@3.4.1]_ `cds watch` now shuts down its child process properly, so that `EADDRINUSE` errors in SAP Business Application Studio are gone
- _[cds-compiler@1.50.0]_ to.edm(x): Illegal OData identifiers, which aren't exposed in the generated edmx schema aren't causing errors anymore.
- _[cds-compiler@1.50.0]_ to.cdl: Annotations are now rendered with the new delimited Identifier syntax
- _[cds-compiler@1.50.0]_ to.sql/hdi:
  - Fixed a bug, which led to an exception if elements were referenced as types.
  - For the SQLite dialect, date, time, and timestamp are rendered as simple string literals instead of function calls.
  - For naming mode "plain", date, time, and timestamps are rendered as SQL-compliant literals.
- _[cds@4.6.4]_ Fix call to `to.hdi.migration` compiler API
- _[cds@4.6.4]_ `cds build` for SAP HANA now correctly passes `sql_mapping` options to new hdimigration compiler API.
- _[cds@4.6.3]_ `cds compile --to serviceinfo` returns better results for Java projects
- _[cds@4.6.3]_ `cds.connect.to('srv-missing')` called twice with `srv-missing` not configured, would have failed with an error on the first call, but got stuck in the Promise chain for all subsequent calls.
- _[cds@4.6.3]_ `.after` handlers are called with result based on request, e.g., array for collection and object for entity, instead of always array
  - Deactivate during two-month grace period via compatible feature flag `cds.env.features.arrayed_after = true`
- _[cds@4.5.3]_ `cds deploy` and `build` now refer to the latest HDI deployer, which supports Node.js v14
- _[cds@4.5.2]_ `cds serve --with-mocks` now also works in `production` environment if `cds.features.mocked_bindings` is true.  Previously, mocks were always disabled in `production`.
- _[cds@4.5.2]_ `cds serve` now only fires the `listening` event once
- _[cds@4.5.2]_ `cds build` redacts cds configuration data in log messages
- _[cds.java@1.14.0]_ Fixed a bug that caused `null` values to miss in expanded entities in OData V2 responses.
- _[cds.java@1.14.0]_ Fixed a bug that caused `null` values in remote OData V2 function parameters to be handled incorrectly.
- _[cds.java@1.14.0]_ Fixed a bug that caused results of remote OData V2 actions or functions calls returning a single entity response to be handled incorrectly.
- _[cds.java@1.14.0]_ Fixed a bug that caused the `cds-maven-plugin` to try to use an invalid Node.js installation.
- _[cds.java@1.14.0]_ Fixed a bug that caused the `cds-maven-plugin` to omit the execution of cds commands.
- _[cds.java@1.14.0]_ Fixed a bug that prevented mock user configuration in case there was an XSUAA-binding in _default-env.json_ but XSUAA-configuration has been turned off explicitly.
- _[cds4j@1.18.0]_ Support handling `null` as a default value
- _[cds4j@1.18.0]_ Fix search in draft entities on SAP HANA
- _[cds4j@1.18.0]_ Fix return types in FLUENT style `EventContext` interfaces
- _[cds4j@1.18.0]_ Fix SQL exception on SAP HANA when using FALSE as predicate
- _[cds4j@1.18.0]_ Draft: Remove cascade annotations from draft entities
- _[cds-runtime@2.9.1]_ Namespace lookup in EDM for OData configuration
- _[cds-runtime@2.9.1]_ Find previous entity for inherited authorization restrictions
- _[cds-runtime@2.9.1]_ Use extended model in generic CRUD post-processing
- _[cds-runtime@2.9.1]_ Clone headers before sanitizing for logs
- _[cds-runtime@2.9.0]_ `req.diff` for deep hierarchies
- _[cds-runtime@2.9.0]_ DateTime conversion for `INSERT` statements using `.columns` and `.values/.rows` on SAP HANA
- _[cds-runtime@2.9.0]_ OData V4 error response target for bound actions
- _[cds-runtime@2.9.0]_ Requests using `$search` query option on draft enabled active entities
- _[cds-runtime@2.9.0]_ Path navigations in `$filter` aren't considered as aggregated away when used in combination with `$apply`
- _[cds-runtime@2.9.0]_ Draft: Entities with expired draft can now be deleted
- _[cds-runtime@2.9.0]_ `Edm.Time`, `Edm.DateTime`, and `Edm.DateTimeOffset` serialization issues when using external OData V2 service
- _[cds-runtime@2.9.0]_ Primitive property access of Singletons via URL like `/Singleton/name`
- _[cds-runtime@2.9.0]_ Path navigation in `$orderby` expressions for draft-enabled services on SAP HANA
- _[cds-runtime@2.8.6]_ Handling of OData query option `$skiptoken` when URL is encoded (that is, `%24skiptoken`)
- _[cds-runtime@2.8.5]_ Handling of OData query option `$skiptoken`
- _[cds-runtime@2.8.4]_ Crash on bad remote service credentials
- _[cds-runtime@2.8.4]_ Wrong case order during query generation in service consumption
- _[cds-mtx@1.1.2]_ Fix job-status handling.
- _[cds-mtx@1.1.2]_ Persist job errors, so they can be revealed even after MTX restart.
- _[cds-odata-v2-adapter-proxy@1.5.9]_ Improve TypeScript typings
- _[cds-odata-v2-adapter-proxy@1.5.8]_ Update `@sap/logging` dependency
- _[cds-odata-v2-adapter-proxy@1.5.7]_ Restore backwards compatibility with CDS v3
- _[cds-odata-v2-adapter-proxy@1.5.6]_ Convert response message targets

### Removed

- _[cds-runtime@2.9.0]_ Redundant key generation

## January 2021

### Added

- _[cds-lsp@4.3.0]_ asynchronous initialization for annotation plugins
- _[cds-lsp@4.3.0]_ find references for annotation plugins
- _[cds-lsp@4.3.0]_ revalidates workspace after an initial annotation plugin installation
- _[cds-compiler@1.49.0]_ to.hdi/sql:
  - Updated the list of reserved keywords for SAP HANA and SQLite
  - Use "smart quoting" for naming mode "plain" - automatically quote reserved keywords
- _[cds-compiler@1.49.0]_ to.hdi.migration:
  - Supports various kinds of entity changes: entity addition/deletion/change (the latter including element additions/deletions/type changes).
  - Provides option to render any element type change as `ALTER TABLE DROP` to prevent deployment issues due to incompatible data
    (default for length reductions or association/composition changes).
- _[cds-compiler@1.49.0]_ to.cdl: Smart artifact references are now rendered explicitly via `:` notation
- _[cds@4.5.0]_ `cds.server` provides an option to switch off automatically generated `index.html` served at `/`:
  Do that in a custom `server.js`:

  ```js
  const cds = require('@sap/cds')
  // ...
  module.exports = (o) => cds.server({ ...o, index:false })
  ```

- _[cds@4.5.0]_ The default `index.html` now honors the system's setting for dark mode.
- _[cds@4.5.0]_ Former package `@sap/cds-reflect` is now embedded in `@sap/cds`
- _[cds.java@1.13.0]_ The serve configuration of application services now allows to explicitly configure which services are served by which protocol and even allows to use different service paths for different protocols. This is enabled by the new annotations `@protocols` and `@endpoints`, which adds to the already existing `@path` annotation. The same can now also be configured in configuration files in the `cds.application.services.<key>.serve` section.
- _[cds.java@1.13.0]_ Added a new artifact `cds-feature-k8s`, which implements service binding support for Kubernetes & Kyma. By default service bindings are expected as secrets under `/etc/secrets/sapcp/<service name>/<service instance name>`, using key-value based secrets files. Additional service bindings with arbitrary secrets paths can be specified under the `cds.environment.k8s.serviceBindings` property.
- _[cds.java@1.13.0]_ OData V2/V4 PATCH or PUT requests now put key values from the URL into the data map. This ensures that keys are immutable and makes key values available directly in POJO arguments of event handlers.
- _[cds.java@1.13.0]_ OData V2 now provides `__deferred` links for unexpanded navigation properties.
- _[cds.java@1.13.0]_ OData V2 now supports reading parameterized views.
- _[cds.java@1.13.0]_ Added the possibility to create and configure remote services. Going forward, these services are used to represent local CQN-based service clients to remote OData APIs. They can be configured by using the property `cds.remote.services`.
- _[cds.java@1.13.0]_ CQN Selects on remote OData services now support inline count.
- _[cds.java@1.13.0]_ Pseudo variables like `$user.locale` are now handled in CQN statements to remote OData services.
- _[cds.java@1.13.0]_ CQN statements using `byId()` can now be executed on remote OData services.
- _[cds.java@1.13.0]_ CQN statements using `contains` are now using `substringof` when executing them against remote OData V2 services.
- _[cds.java@1.13.0]_ CQN statements using parameters can now be executed on remote OData services.
- _[cds.java@1.13.0]_ CQN statements using batched updates or batched deletes can now be executed on remote OData services.
- _[cds.java@1.13.0]_ Batched or parameterized CQN statements that result in multiple OData requests are now executed as a `$batch` request on remote OData services. All those requests are combined into a single changeset to ensure atomicity.
- _[cds.java@1.13.0]_ Action and function calls can now be executed on remote OData services.
- _[cds.java@1.13.0]_ Added a first draft of an Outbox Service API.
- _[cds.java@1.13.0]_ Simplified the $batch access log line to omit host, port and service path, which is the same in every request of the batch.
- _[cds.java@1.13.0]_ Added a new API to retrieve authentication information, for example the JWT token of the current user. It can be accessed from the `CdsRuntime` using `getProvidedAuthenticationInfo`. The new API replaces the former internal `AuthenticatedUserClaimProvider`.
- _[cds.java@1.13.0]_ The `cds-services-archetype` now supports the creation of new CAP Java projects with OData V2 support. Add command line argument `-DodataVersion=v2` to choose OData V2 support.
- _[cds.java@1.13.0]_ The goal `addIntegrationTest` of the `cds-maven-plugin` automatically detects the OData version of the CAP Java project and adds the corresponding integration test class.
- _[cds.java@1.13.0]_ The goal `install-cdsdk` of the `cds-maven-plugin` provides a new command line argument `cds.install-cdsdk.force=true` to force a new installation of `@sap/cds-dk`.
- _[cds.java@1.13.0]_ The goal `cds` of the `cds-maven-plugin` validates the version of the installed `@sap/cds-dk` against a minimum required version. If the required version isn't fulfilled the build fails.
- _[cds4j@1.18.0]_ Add CDS Data Processor API <Beta /> to validate, convert, and generate CDS data
- _[cds4j@1.18.0]_ Add Indexed parameters as replacement for deprecated positional parameters
- _[cds4j@1.18.0]_ Add `@cds.java.name` annotation to define custom names for elements when generating Java interfaces
- _[cds4j@1.18.0]_ Add `UniqueConstraintException`
- _[cds4j@1.18.0]_ Add `NotNullConstraintException`
- _[cds4j@1.18.0]_ Reflection API: Support for Events referencing other Events, Entities, and Structured Types
- _[cds4j@1.18.0]_ Reflection API: Support for Aspects
- _[cds4j@1.18.0]_ Reflection API: Add `setCqn` method in the generated EventContext Interface & overload `create` method
- _[cds-runtime@2.8.0]_ Support for OData proxies <Beta />
- _[cds-runtime@2.8.0]_ Support for OData cross-service references <Beta />
- _[cds-runtime@2.8.0]_ Support upsert for to-one containment with foreign key in parent
- _[cds-runtime@2.8.0]_ Support for case-insensitive `bearer` prefix when forwarding token in service consumption
- _[cds-runtime@2.8.0]_ Support for filter on `null` values in service consumption
- _[cds-runtime@2.8.0]_ Server-side pagination for REST services
- _[cds-runtime@2.8.0]_ Input validation for typed parameters of actions/functions
- _[cds-runtime@2.8.0]_ Format assertion exception for UUIDs in MTX's `ProvisioningService.tenant` (old SAP Cloud Platform subaccount IDs aren't UUIDs)
- _[cds-runtime@2.8.0]_ Draft scenario all active is extended
- _[cds-runtime@2.8.0]_ Skip integrity checks via:
  - `@assert.integrity: false` on entity and service level (was only on association level)
  - `cds.env.features.assert_integrity = false` as global config (private `cds.runtime.skipIntegrity` will be removed)
- _[cds-runtime@2.8.0]_ Skip SAP HANA's localization feature (`WITH PARAMETERS ('LOCALE' = '<locale>')`) via `cds.env.features.with_parameters = false`
- _[cds-runtime@2.8.0]_ Deprecation warning for `req.run`
- _[vscode-cds@3.3.0]_ finds references for annotations

### Changed

- _[cds-dk@3.4.0]_ `cds init` uses latest `Maven Java archetype` version `1.12.1` for creating Java projects.
- _[cds-dk@3.4.0]_ `cds init` allows `_` in project name and leaves conversion to `Maven Java archetype`.
- _[cds-dk@3.4.0]_ `cds init --add notebook` and `cds add notebook` now use a Python venv and offer a default Jupyter Notebook viewer.
- _[cds-dk@3.4.0]_ Multitarget Node.js applications can now be initialized with multitenancy support by running `cds init --add mta,mtx`. <Beta />
- _[cds-dk@3.3.5]_ Bump versions of `@sap/cds`
- _[cds-dk@3.3.4]_ Bump versions of `@sap/cds` and `axios`
- _[vscode-cds@3.3.0]_ extension is now called `SAP CDS language support`
- _[vscode-cds@3.3.0]_ uses `axios@0.21.1`
- _[vscode-cds@3.3.0]_ uses `@sap/cds-lsp@4.3.0` (see corresponding changelog for details)
- _[vscode-cds@3.3.0]_ uses `@sap/cds-compiler@1.49.0`
- _[vscode-cds@3.3.0]_ new user options for where-used requests<br/>
until now this functionality was enabled by default and now needs to be enabled via user options:
  - generic annotations - where a certain annotation `class` or `namespace` is used
  - strings literals - where same string literals are used
- _[cds-lsp@4.3.0]_ new user options for where-used request<br/>
until now this functionality was enabled by default and now needs to be enabled via user options
  - generic annotations - where a certain annotation `class` or `namespace` is used
  - strings literals - where same string literals are used
- _[cds-lsp@4.3.0]_ consumes `cds-compiler` 1.49.0
- _[cds-lsp@4.3.0]_ compatibility with early versions of `cds-compiler` 2.x
- _[cds-lsp@4.3.0]_ simplified consumption of CDS textmate grammar for Jetbrain IDEs
- _[cds-compiler@1.49.0]_ OData/EDMX:
  Change the `EntityType` precedence of the OData term definition `AppliesTo=` attribute. If `AppliesTo` contains
  both `EntityType` and `EntitySet`, the annotation was assigned to the entity type. Extending an
  `AppliesTo=[EntitySet]` with `EntityType` would be OData compliant but incompatible for clients, which still expect the annotation at the set and don't perform the full lookup. With this change, `EntitySet` and `EntityType` are treated individually, effectively annotating the type and
  (if available) the set. This fixes both extendability and client behavior.
- _[cds-compiler@1.49.0]_ to.hdbcds/hdi/sql: Reject using associations or compositions in query elements starting with `$self` or `$projection`.
- _[cds-compiler@1.49.0]_ OData: Update vocabularies `Common`, `PersonalData`, `UI`.
- _[cds-compiler@1.49.0]_ Update vocabularies `Aggregation`,``Common`
- _[cds@4.5.0]_ SAP Fiori preview is now disabled if `NODE_ENV` is `production`, to avoid any runtime overhead there. You can enable it with configuration `cds.features.fiori_preview: true`.
- _[cds@4.4.10]_ `cds build` for SAP HANA now only filters CSV files if it's needed, for example, if they contain comment lines.
- _[cds.java@1.13.0]_ Entities annotated with `@cds.autoexpose` are now read-only, if they're auto-exposed by the CDS compiler (`@cds.autoexposed`), regardless if they're accessed directly or through a path navigation. Composition children of such entities inherit the read-only attributes of their parents now. This ensures that auto-exposed value helps (and, for example, their localized texts) are protected from write operations.
- _[cds.java@1.13.0]_ Composition child entities (`@cds.autoexposed`, but not `@cds.autoexpose`) are now forbidden as the root of a path, regardless if they're also the target of the path or not. They should always be accessed through a path navigation starting from their parent entity. Draft-enabled entities continue to be an exception to this rule.
- _[cds.java@1.13.0]_ The `DraftAdministrativeData` structure is only created once for a single draft document (root draft entity with all of its composition children). Earlier a dedicated `DraftAdministrativeData` structure was created for each entity in the draft document. This fixes issues where the user, who changed the draft last, or the last changed timestamp weren't consistent across the draft document.
- _[cds.java@1.13.0]_ Temporal timestamps from `sap-valid-at`, `sap-valid-from`, and `sap-valid-to` query parameters are now truncated to microseconds, as this is the general granularity of timestamps in CDS.
- _[cds.java@1.13.0]_ The error messages for Constraint Violation errors have been improved, by distinguishing not null constraint violations from unique constraint violations. With that the previous general error code `409001` (`CONSTRAINT_VIOLATED`) has been deprecated and is replaced by the more specific error codes `409003` (`VALUE_REQUIRED`) and `409006` (`UNIQUE_CONSTRAINT_VIOLATED`).
- _[cds.java@1.13.0]_ Renamed `send` methods in `MessagingService` to `emit` to avoid confusions with function names in Node.js.
- _[cds.java@1.13.0]_ Renamed property `cds.datasource.serviceName` to `cds.datasource.binding` (previous name is deprecated, but still available)
- _[cds.java@1.13.0]_ Renamed property `cds.security.xsuaa.serviceName` to `cds.security.xsuaa.binding` (previous name is deprecated, but still available)
- _[cds4j@1.18.0]_ Fix projection resolvement of aliased to-many associations
- _[cds4j@1.18.0]_ Fix SQL exception on updates having only key values as data
- _[cds4j@1.18.0]_ Fix `NoSuchElementException` when using binary elements in where condition
- _[cds-reflect@2.13.5]_ Sunset. Code is now in `@sap/cds` package.
- _[cds-runtime@2.8.0]_ ETag added for expanded entities
- _[cds-runtime@2.8.0]_ Use `cds.log()` throughout (incl. odata-server)
- _[cds-runtime@2.8.0]_ Replace text keys with default text (that is, w/o locale) before logging error
- _[cds-runtime@2.8.0]_ Read after write on draft activate doesn't read deep
- _[cds-runtime@2.8.0]_ On HTTP error (status >= 400) during remote service consumption: log details and throw gateway error
- _[cds-runtime@2.8.0]_ `accept=application/json,text/plain` is used as default `accept` header for remote service calls
- _[cds-runtime@2.8.0]_ Improved custom error message in case acquiring a client from the pool timed out
- _[cds-runtime@2.8.0]_ Metadata endpoints are protected by default if respective service is protected. Deactivate metadata endpoint protection via `cds.env.odata.protectMetadata = false`.
- _[cds-runtime@2.8.0]_ Streamlined module names used in logging

### Fixed

- _[vscode-cds@3.3.0]_ temporary folder for `CDS Preview` commands is no longer part of project to avoid files being checked in
- _[vscode-cds@3.3.0]_ re-validates workspace after an initial annotation plugin installation to show annotation errors w/o the need of manual code edit
- _[cds-lsp@4.3.0]_ dependency analysis for compilation: if a changed file has dependencies to the roots, but the root models don't cover it, no longer it will compile multiple times
- _[cds-lsp@4.3.0]_ translation code action wasn't shown in the context of annotations
- _[cds-lsp@4.3.0]_ code completion for annotations had a trailing @
- _[cds-lsp@4.3.0]_ annotation assignment spanned beyond semantical end
- _[cds-lsp@4.3.0]_ code formatting of brackets enclosing multiple elements in annotations had wrong indentation
- _[cds-lsp@4.3.0]_ indexing of on condition for elements was broken
- _[cds-lsp@4.3.0]_ update regex to highlight one and many keywords properly
- _[cds-compiler@1.49.0]_ Structured foreign key and forward association reference paths used in ON condition definitions
  are now translatable into the correct short form ON condition paths in Association to Join translation.
- _[cds-compiler@1.49.0]_ to.hdbcds: Aliased mixin-associations are now handled correctly
- _[cds-compiler@1.49.0]_ Using a hex literal like `x'D028'` (in a CSN input) could lead to an error.
- _[cds-compiler@1.49.0]_ for.odata:
  - Fix a bug in constraint calculation if principal has no primary keys.
  - Don't overwrite user-defined `@Core.Computed` annotation.
- _[cds-compiler@1.49.0]_ to.hdi/sql/hdbcds: Fixed a bug during processing of skipped/otherwise not db-relevant artifacts.
- _[cds-compiler@1.49.0]_ to.hdbcds/hdi/sql:
  - Types aren't rendered anymore for SAP HANA in quoted mode.
  - Aliases are now respected when resolving $self
  - Association clones are now prepended with three underscores (`_`) instead of two
    to prevent shadowing of context names or usages
- _[cds@4.5.1]_ Update `@sap/cds-runtime` dependency
- _[cds@4.5.0]_ `cds build` now correctly supports multitenant applications defining multiple database modules, for example, one database for tenant-related data and one for shared data.
- _[cds@4.5.0]_ `cds deploy --to hana` does no longer fail with an invalid service name error if `.` is used in the MTA ID.
- _[cds@4.4.9]_ `cds build` for SAP HANA no longer fails sporadically with ENOENT when writing CSV files.
- _[cds@4.4.8]_ Add missing setter for `user.locale`.
- _[cds.java@1.13.0]_ Fixed a bug that caused OData V4 to handle results of `min` functions on date elements incorrectly.
- _[cds.java@1.13.0]_ Fixed a bug that caused properties mapped to `null` to miss in JSON responses to OData V4 requests using `$apply`
- _[cds.java@1.13.0]_ Fixed a bug that caused multiple OData V2 expands with common navigation properties to be handled incorrectly.
- _[cds.java@1.13.0]_ Fixed a bug that caused OData V2 function imports returning empty result sets to fail with an error.
- _[cds.java@1.13.0]_ Fixed a bug that prevented element values to be changed to `null`, when saving an edited draft.
- _[cds.java@1.13.0]_ Fixed a bug that could cause inconsistent states after a draft GC. The draft GC is now only triggered on the root entity of a draft-document, which ensures that either the whole document or nothing is garbage-collected. This aligns with the change around `DraftAdministrativeData`.
- _[cds.java@1.13.0]_ Improved the logged error message in case deletion of a draft during the draft GC failed.
- _[cds.java@1.13.0]_ Fixed a bug that caused frequent `Missing type information` warnings in the log, when accessing draft-enabled entities.
- _[cds.java@1.13.0]_ Fixed a bug that caused immutable fields of draft-enabled entities to be handled incorrectly when new child entities are created.
- _[cds.java@1.13.0]_ Fixed a bug that caused errors, when Microsoft JavaScript Dates with offsets (for example, `/Date(1601359314168-0100)/`) were returned from a remote OData V2 API.
- _[cds.java@1.13.0]_ Fixed a bug that caused incorrect result structures when a remote OData V2 API returned `__deferred` links.
- _[cds.java@1.13.0]_ Fixed a bug that caused `404` errors received from requests on remote OData collection endpoints to be silently ignored.
- _[cds.java@1.13.0]_ Fixed a bug that caused precision loss in floating point numbers returned from remote OData services.
- _[cds.java@1.13.0]_ Fixed a bug that caused the DataSource pool to be initialized multiple times in case the DataSource is configured based on service bindings.
- _[cds.java@1.13.0]_ Removed the misleading term "secondary" from log lines, indicating which database services have been auto-configured.
- _[cds.java@1.13.0]_ Fixed a bug that caused project URLs in the pom.xml to be invalid.
- _[cds.java@1.13.0]_ Fixed a bug that caused issues with loading EDMX files in Maven test executions on Windows.
- _[cds.java@1.12.1]_ Fixed a bug that caused the ETag header to miss in a OData V4 response, when the request header `Prefer: return=minimal` was set.
- _[cds.java@1.12.1]_ Fixed a bug that caused tenant-specific extensions (MTX) to be ignored in the OData V2 adapter.
- _[cds.java@1.12.1]_ Fixed a bug that caused the asynchronous tenant unsubscription to be incomplete, if the tenant HDI container was explicitly not deleted.
- _[cds4j@1.18.0]_ Deprecate positional parameters in favor of indexed and named parameters
- _[cds4j@1.18.0]_ Draft: Deletion isn't cascaded anymore to the `DraftAdministrativeData` of a non-root draft entity, because one deep draft document shares a single `DraftAdministrativeData` entity now.
- _[cds4j@1.18.0]_ Reflection API: Refactor `CdsEvent` to inherit `CdsStructuredType`
- _[cds4j@1.18.0]_ Deprecate `ConstraintViolationException`
- _[cds4j@1.18.0]_ Improve performance of Deep Update: execute update statements in batches
- _[cds4j@1.18.0]_ Search: The SQL rendering for search on SQL backends has been changed for localized elements: besides in the user's language texts are now additionally searched in the default language. On SAP HANA the performance of search over large data sets has been improved. This optimization is requires the association `localized` to the texts entity.
- _[cds-runtime@2.8.3]_ No pagination while reading single entity
- _[cds-runtime@2.8.3]_ `SELECT.limit.offset.val` should be a number
- _[cds-runtime@2.8.2]_ `@mandatory` annotation of typed parameters of actions/functions
- _[cds-runtime@2.8.1]_ Skip input validation for arrayed types as parameter of actions/functions
- _[cds-runtime@2.8.1]_ Log error stack when serving to REST
- _[cds-runtime@2.8.1]_ `@assert.range` doesn't imply `@mandatory`
- _[cds-runtime@2.8.0]_ Aggregated-away properties in `$select`, `$expand`, and `$filter` now behave correctly
- _[cds-runtime@2.8.0]_ Exception when accessing texts for a renamed localized draft entity
- _[cds-runtime@2.8.0]_ Deep Update wrongly tried to create entries in case of nested `to-one` compositions
- _[cds-runtime@2.8.0]_ Navigation on singleton
- _[cds-runtime@2.8.0]_ Localized error messages if no authentication used
- _[cds-runtime@2.8.0]_ Fix draft with expand when ordering by draft-specific columns
- _[cds-runtime@2.8.0]_ Incorrect content type in batch response if no `Accept` header is provided
- _[cds-runtime@2.8.0]_ Input validation for enums using `falsy` values
- _[cds-runtime@2.8.0]_ Insert via navigation throws an error if the root of navigation doesn't exist
- _[cds-runtime@2.8.0]_ Filter virtual fields from columns and expand by READ
- _[cds-runtime@2.8.0]_ `auto-expand` of generated foreign keys when functions/actions return entities
- _[cds-runtime@2.8.0]_ Custom headers are normalized to lower case
- _[cds-runtime@2.8.0]_ Post-processing of arrayed elements in Database Service
- _[cds-runtime@2.8.0]_ Duplicated key condition in DELETE CQN
- _[cds-runtime@2.8.0]_ To be checked data for DELETE integrity checks in actions was wrong
- _[cds-runtime@2.8.0]_ Fixed missing != comparator for query generation of remote services
- _[cds-runtime@2.8.0]_ CSN modification during resolve view
- _[cds-runtime@2.8.0]_ Clash of language-code-like namespaces (for example, `de.` or `fr.`) with localized entities
- _[cds-runtime@2.8.0]_ `hdb`'s error event invalidates client
- _[cds-runtime@2.7.10]_ Downport of fix "CSN modification during resolve view".
- _[cds-runtime@2.7.9]_ Don't crash if release called without client.
- _[cds-runtime@2.6.11]_ Downport of fix "CSN modification during resolve view".
- _[cds-mtx@1.0.27]_ Extensions via `extend projection` are now checked correctly by the linter.
- _[cds-mtx@1.0.27]_ Cross HDI container access is now supported properly. See section [Deployment Options in HDI](https://help.sap.com/docs/SAP_HANA_PLATFORM/4505d0bdaf4948449b7f7379d24d0f0d/a4bbc2dd8a20442387dc7b706e8d3070.html) in SAP HANA Platform documentation for more details.
- _[cds-mtx@1.0.27]_ When using`hdb` as driver for the database, the tenant updates are now logged properly
- _[cds-odata-v2-adapter-proxy@1.5.5]_ Align determination of locale including sub tags (for example, `zh-TW`)
- _[cds-odata-v2-adapter-proxy@1.5.4]_ Support action/function array parameter types
- _[cds-odata-v2-adapter-proxy@1.5.4]_ Introduce proxy option for body parser size limit
- _[cds-odata-v2-adapter-proxy@1.5.3]_ Improve TypeScript typings
- _[cds-odata-v2-adapter-proxy@1.5.2]_ Add TypeScript typings for proxy constructor
- _[cds-odata-v2-adapter-proxy@1.5.1]_ Normalize service root path in service root xml to include trailing slash
- _[cds-odata-v2-adapter-proxy@1.5.0]_ Update minor version
- _[cds-odata-v2-adapter-proxy@1.4.63]_ Fix that file upload error message doesn't return with 500 status code
- _[cds-odata-v2-adapter-proxy@1.4.61]_ Fix accept header for binary data retrieval to include `application/json`
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Respect offset for Edm.DateTimeOffset, and default to UTC offset (+0000)
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Fix ticks and offset calculation for type DateTimeOffset to handle offset as minutes
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Update README for custom bootstrap to give proxy() priority over `cds.serve` (as with cds run)
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Make authorization header parsing more robust
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Provide \_\_metadata type information for function/action result
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Data format of type `cds.Time` (`Edm.Time`) is switchable to ISO 8601 with proxy option `isoTime` or entity annotation `@cov2ap.isoTime`
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Data format of type `cds.Date` (`Edm.DateTime`) is switchable to ISO 8601 with proxy option `isoDate` or entity annotation `@cov2ap.isoDate`
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Data format of type `cds.DateTime` / `Edm.DateTimeOffset` is switchable to ISO 8601 with proxy option `isoDateTime` or entity annotation `@cov2ap.isoDateTime`
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Data format of type `cds.Timestamp` / `Edm.DateTimeOffset` is switchable to ISO 8601 with proxy option `isoTimestamp` or entity annotation `@cov2ap.isoTimestamp`
- _[cds-odata-v2-adapter-proxy@1.4.60]_ Process `DateTimeOffset` always as UTC information (with `Z`)

### Removed

- _[cds-runtime@2.8.1]_ Reconnect for `hdb`
- _[cds-runtime@2.8.0]_ Usage of deprecated `req.run`
- _[cds-runtime@2.8.0]_ Support for deprecated config `cds.auth.passport`. Use `cds.requires.auth` instead.
- _[cds-runtime@2.8.0]_ Default `$format` query option in case of `GET` requests to remote OData services
