ADO.NET Provider for Couchbase

Build 23.0.8839


General Changes

  • Added support for EFCore 8.
  • The ROUND function doesn't accept the negative precision values anymore.

  • The returning types of the FDMonth, FDQuarter, FDWeek, LDMonth, LDQuarter, LDWeek functions are changed from Timestamp to Date.
  • The return type of the ABS function will be consistent with the parameter value type.
  • NuGet license and icon are now embedded within the package itself, in compliance with the package authoring best practices.
  • Added the new sys_lastresultinfo system table.
  • Added support for parallelizing batch INSERT and UPSERT operations. MaxThreads determines the number of worker threads that the driver spawns when executing a batch operation. Parallelism happens within a single batch so for best results the batch size should be as large as possible.
  • Removed support for the SELECT INTO CSV statement. The core code doesn't support it anymore.
  • Removed support for EFCore 3.1.
  • Removed support for SSRS 2012.

  • Added support for SSRS 2022.
  • Added support for Analytics views and tabular Analytics views. Tabular Analytics views use the metadata provided as part of the
    DDL statement instead of performing rowscan. Supported column metadata includes column names, types, nullability, primary keys, and foreign keys. Both types of views have similar limitations to external Analytics collections (they do not support Document.Id or Document.TTL, and are not scanned for child tables).
  • Added the Default column to the sys_procedureparameters table.
  • Added the IsPath column to the sys_procedureparameters table.
  • Removed support for VS2010.
  • Removed support for .NET 2.0.
  • Removed support for EFCore 3.0 and EFCore5.0.
  • Added support for the NATIVEQUERY table function. This function can be used after a FROM to execute a query using Couchbase-native N1QL instead of SQL. For example,
    SELECT * FROM NATIVEQUERY('SELECT META(a).id, b.rowdata FROM abucket AS a UNNEST a.rows AS b')
    will execute the inner query directly on Couchbase and return the results. This will work even in tools which are not normally compatible with QueryPassthrough=true.
  • Added support for UpdateNullValues. This provides control over whether NULL values written to doucments via UPDATE are stored as NULL in Couchbase, or are removed from the document.
  • Added support for N1Q transactions. They apply to all N1QL queries that are not triggered by metadata or stored procedures. They can be either disabled entirely (the default), enabled for explicit use only (like setAutoCommit(false) or BeginTransaction()), or for implicit use where a one-statement transaction is used when no explicit transaction is active on the connection. Connection properties were also added to control transaction durability and lifetime requirements.
  • Added the corresponding connection properties, UseTransactions, TransactionDurability, and TransactionTimeout.
  • Added support for calling user-defined functions in N1QL and Analytics. Global functions may be called using their unscoped names (to_meters("")) or their scoped names ("Default.to_meters"("")). Scoped functions must be called using their fully qualified names, which are two-parts or three-parts in Analytics ("experiments.to_meters") or three-parts only in N1QL ("experiments.units.to_meters").
  • Added support for the STRING_SPLIT table-valued function in the CROSS APPLY clause.
  • Added the KeySeq column to the sys_foreignkeys table.
  • Added the new sys_primarykeys system table.
  • Updated the Literal Function Names for relative date/datetime functions. Previously, relative date/datetime functions resolved to a different value when used in the projection as opposed to the predicate. For example: SELECT LAST_MONTH() AS lm, Col FROM Table WHERE Col > LAST_MONTH(). Formerly, the two LAST_MONTH() methods would resolve to different datetimes. Now, they will match.
  • As a replacement for the previous behavior, the relative date/datetime functions in the criteria may have an 'L' appended to them. For example: WHERE col > L_LAST_MONTH(). This will continue to resolve to the same values that were previously calculated in the criteria. Note that the "L_" prefix will only work in the predicate - it not available for the projection.
  • Added support for performing DML on nested child tables in NewChildJoinsMode, which completes our new relational model. You can now INSERT, UPDATE, and DELETE on every table exposed by the provider when NCJM is enabled.
  • Added support for creating collections via DDL. When the hidden UseCollectionsForDDL property is enabled, CREATE TABLE "abucket.ascope.acollection"(...) will create the bucket, scope and collection which correspond to the table's name.
  • Added support for the DbCommand.CommandTimeout property.
  • Removed support for SSRS 2008.
  • Added support for creating collections via DDL. When the hidden UseCollectionsForDDL property is enabled, CREATE TABLE "abucket.ascope.acollection"(...) will create the bucket, scope and collection which correspond to the table's name.
  • Added support for handling client side formulas during insert / update. For example: UPDATE Table SET Col1 = CONCAT(Col1, " - ", Col2) WHERE Col2 LIKE 'A%'
  • Updated how display sizes are determined for varchar primary key and foreign key columns so they will match the reported length of the column.
  • Separated the ADO.NET Provider assembly and Entity Framework Core 5 Nuget packages.
  • Single precision floating point numbers are now reported as with the Data Type Name as "real". Double precision floating point numbers now have their Data Type Name reported as "float". This change does not impact the actual data types of these columns - only the reported data type name.
  • Separate EFCore 3.0, 3.1 and EFCore 5 dlls are now shipped with the driver. The 2.0 and 2.1 EFCore dlls are removed.
  • Non-conditional updates between two columns is now available to all drivers. For example: UPDATE Table SET Col1=Col2
  • Reduced the length to 255 for varchar primary key and foreign key columns.

  • Updated index naming convention to avoid duplicates.
  • Updated implicit and metadata caching to improve performance and support for multiple connections. Old metadata caches are not compatible - you need to generate new metadata caches if you are currently using CacheMetadata.
  • Added support for the USE KEYS query construct. When executing an N1QL query, the driver will attempt to determine if it contains any eligible filters on Document.Id - if there are any they are removed from the WHERE clause and migrated to the USE KEYS clause. When this transformation is applied the resulting query can avoid index scans, which allows for more queries to be run without a primary index and improves execution speed.
  • Updated AddDocuments and ManageIndices so the interface no longer operates based on column#1 values. AddDocuments now accepts either a single ID and Document or a SourceTable that refers to a #TEMP table (analogus to a normal bulk insert), while ManageIndices accepts JSON arrays for multiple values since these are mostly typed by hand and have very few elements.
  • Added support for collections and scopes within Couchbase v7. This touches on a lot of the driver but here are the main aspects:
    • Tables are now generated for collections as well as buckets/datasets in both N1Ql and Analytics. They have dotted names similar to Analytics datasets. The only exceptions are N1QL default collections which just use the bucket name (the server calls them _default) and Analytics legacy dataverses (which have the same two-level hierarchy)
    • Queries can now use data from collections in all the usual ways (flavors, UNNEST, etc), and collection tables can now be used with DROP TABLE. Buckets still work with DROP TABLE as well but only in limited contexts to prevent users from deleting data outside the default collection.
    • Added new stored procedures for creating and dropping scopes/collections, and updated index management stored predures to report information about scopes/collections.
    • The Dataverse option now expects to follow SQL quoting rules, and can be either a single SQL identifier (foo) for legacy dataverses, or a two-level qualified identifier ( for Analytics dataverses/scopes

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 23.0.8839