Compatible with OpenSearch and OpenSearch Dashboards version 3.7.0
- Add Union command in PPL with type coercion and UNION ALL semantics (#5240)
- Support SQL Vector Search via
vectorSearch()table function with k-NN pushdown and filtering modes (#5394)
- Add query-type whitelist to block non-query statements (DML/DDL) in unified SQL execution path (#5330)
- Add time conversion functions (
ctime,mktime,mstime,dur2sec) andtimeformatparameter for the PPL convert command (#5210) - Add
tests.analytics.parquet_indicestoggle for analytics-engine integration test coverage (#5436) - Define unified SQL language spec with composable extensions for OpenSearch SQL syntax (#5360)
- Register
LENGTH,REGEXP_REPLACE,DATE_TRUNCin unified function spec for ClickBench query support (#5419) - Register missing SQL V2 relevance functions and aliases in Calcite function table (#5440)
- Route unified SQL path through V2 ANTLR parser with
CalciteRelNodeVisitor(#5438) - Resolve SQL unified query gaps for SELECT clauses, LIMIT/OFFSET, derived tables, and window functions (#5450)
- Extend V2 SQL parser with
IN/EXISTSsubquery support for unified query path (#5448) - Extend V2 SQL parser with
JOIN(INNER/LEFT/RIGHT/CROSS) for unified query path (#5446) - Add UDT support for IP and Binary types in analytics-engine response schema (#5463)
- Add coercion rules and placeholder UDF to handle VARBINARY-to-VARCHAR comparisons for IP/binary fields (#5443)
- Close gaps from top/rare analytics-engine wiring by forwarding
PPL_SYNTAX_LEGACY_PREFERREDand adding stable tie-break (#5433) - Use
leastRestrictiveformvappendelement-type widening to fix analytics-engine Substrait serialization (#5424) - Lower
isempty/isblanktoCHAR_LENGTH = 0instead of multisetIS_EMPTYfor analytics-engine compatibility (#5439) - Add
IS [NOT] NULLpredicate syntax support in PPL (#5278) - Allow
limit=Nkeyword syntax forheadandtopcommands (#4249) - Register
DISTINCT_COUNT_APPROXlogical marker in PPLFuncImpTable for unified/analytics-engine paths (#5466) - Fix singleton stack-corruption NPE in
DatetimeUdtNormalizeRuleby instantiating rules perplan()call (#5458) - Improve exception handling in
UnifiedQueryPlannerwith proper error classification and logging (#5465) - Create parquet-backed test indices for
spathcommand analytics-engine route (#5441) - Improve error messages for invalid index mapping by formatting index patterns and including underlying error details (#5370)
- Initial implementation of report-builder interface for richer error context in responses (#5266)
- Validate materialized view subqueries against SQL grammar deny list (#5485)
- Fix
COALESCE(null, int)returning string type by usingSqlTypeName.NULLfor substituted literals (#5382) - Fix
NOT INincluding null/missing rows by adding exists filter for three-valued logic compliance (#5337) - Fix
NOT LIKEincorrectly including rows with null/missing fields (#5338) - Fix PPL mixed text/keyword field type across wildcard indices causing silently dropped documents (#5358)
- Fix
bin/chartNPE with null values by declaring nullable return type and adding nullsLast to sorts (#5334) - Fix chained
streamstatswith window causing NPE by replacing correlate-based plan with self-join (#5359) - Fix
evaloverwriting MAP root field when assigning multiple dotted-path names (#5351) - Fix
json_setcrash andjson_deleteno-op with$.keypaths by preventing double-prefixing (#5339) - Fix multiple
appendpipeerror while revisiting parent AST by using relBuilder stack directly (#5322) - Fix
renamewith wildcard applying on hidden/metadata fields (#5350) - Fix sort order not preserved through
dedupin Calcite engine (#5353) - Fix
transposecommand name collision with 'value' field (#5352) - Scope SQL cursor continuation to original query indices under Fine-Grained Access Control (#5399)
- Normalize datetime types for unified query API with UDT rewrite and output cast rules (#5408)
- Fix SQL query routing to analytics engine after V2 parser change (#5456)
- Fix
SemanticCheckExceptionnot thrown for invalid field in nested function (#5239) - Handle Prometheus
/api/v1/metadataresponses withoutdatafield for Cortex-backed datasources (#5437) - Use
ObjectInputFilterallowlist for deserialization in cursor and script pushdown serializers (#5469)
- Add integration tests for analytics engine index-level authorization (#5462)
- Add issues write permission to untriaged label workflow (#5457)
- Add tiebreaker to stats sort-on-measure IT queries for deterministic results across engines (#5435)
- Land analytics-engine PPL integration into main with query routing, explain, profiling, and async execution (#5430)
- Fix distribution build by pinning
analytics-apidependency to3.7.0-SNAPSHOT(#5455) - Pin GitHub Actions to commit SHAs for supply chain security (#5464)
- Bump Gradle wrapper to 9.4.1 and workaround
@Ignoretest failure (#5414) - Fix link checker CI failure by excluding LinkedIn URLs (#5461)
- Integration test cases for field-level security (#5008)
- Update SQL docs for querying multiple indices with backtick-enclosed list syntax (#5340)
- Update PPL command doc examples to use OpenTelemetry sample data (#5303)
- Add PPL bugfix skill for Claude Code with automated triage, TDD-style fix, and PR creation (#5307)
- Refactor the dedupe workflow by extracting a reusable workflow to opensearch-build (#5319)
- Skip bot-created issues in dedupe detect workflow (#5328)
- Update dedupe workflow to have correct name (#5327)
- Version bump to OpenSearch 3.7 with Jackson 2 → 3 parser API and
_sourceexcludes serialization fixes (#5361)