Support for LAS / LAZ is updated to 3.4.3. This fixes several bugs in encoding and decoding.
(Fix) Reading LAS files with extra field values no longer sometimes fails.
ESRI FILE GDB modules are updated to 22.214.171.1248 (64-bit modules only, the new version of the ESRI SDK does not contain 32-bit modules, so they continue to be 126.96.36.199). This fixes a couple of issues which occur pretty rarely.
The GDB dataport attempts to work around a frequent issue that occurs in geodatabases created by late versions of ArcGIS Pro, that makes a newly created table fail to register completely. The dataport examines the state of the geodatabase and if the table has been created and is operable, reports that the table has been created and marks it in the metadata to execute additional logic on the side of Manifold that compensates for the table not being registered completely in the geodatabase.
The GDB dataport no longer reports indexes on tables returned by the FILE GDB modules as BTREExxx, as they can only be efficiently used to search for individual records, with other operations being unoptimized. This lets the query engine plan around not having these indexes instead of being tricked into using them with subpar results. Built-in indexes on the OBJECTID field continue to be reported as BTREE, with all operations optimized internally by the dataport.
Exporting a drawing to GDB no longer creates a feature data set. (Creating a feature data set for each drawing, eg, when exporting a map with multiple layers, was simply unnecessary. Now we only create a feature class and leave adding the desired feature data sets to the user.)
The query engine allows enclosing identifiers in double quotes ("...", in addition to [...]). We were already allowing enclosing identifiers in double quotes in the ODBC driver, because double quotes are the default for many tools. The change extends this to work for queries ran interactively or through scripts.
The GeomWithin query function optimizes tests for zero distance.
There are new GeomOverlayWithin / GeomOverlayWithinPar query functions that take a primary drawing, an overlay drawing, and a distance in the coordinate system of the primary drawing, and return all pairs of geoms in the primary drawing and the overlay drawing that are within the specified distance.
There are new GeomOverlayWithinFilter / GeomOverlayWithinFilterPar query functions that take a primary drawing, an overlay drawing, and a distance in the coordinate system of the primary drawing, and return all geoms in the primary drawing for which there is at least one geom within the specified distance in the overlay drawing.
The GeomOverlayXxx (non-topology) query functions skip normalizing geoms whenever possible for performance. This frequently produces a significant performance gain, particularly for cases when the overlaid drawings have many overlaps.
The query engine optimizes unindexed INNER / LEFT / RIGHT joins with a condition of the type: f(a) = b.x (where 'a' and 'b' are tables and 'x' is a field, a very common condition). The performance gains depend on the number of records in the involved tables and are typically really big, similar to the performance differences between indexed and unindexed joins.
(The reason we added the above optimization is that while it is always advisable to build appropriate indexes on fields you are using in queries, this is not always possible or desirable. For example, the table you want to index might reside in a data source that does not support indexes, or you might not have permissions to alter the data source. Adding an index on such a table would mean making a copy of it and indexing that, this both takes time and can be inconvenient.)
The query engine allows specifying properties for fields of a table created by SELECT INTO: SELECT ... INTO t (PROPERTY ..., ...) ...; This allows using SELECT INTO with data sources like GDB or GPKG which require additional configuration for geometry fields at the time the table is created (coordinate system, geometry type, whether the geometry is 2d or 3d, etc).
SELECT [area], [code], [name], [geom]
INTO [gdb]::[states] (
PROPERTY 'FieldGeomType.geom' 'area' -- the default would be 'point'
) FROM [states];
The query engine puts the final name of the table created by SELECT INTO into the 'createdname' / 'creatednamequoted' pragmas for further statements that might want to create components linked to the created table. This is similar to what is done for CREATE.
End of list.