0.89.0 (2026-04-19)
- core: bump to substrait v0.87.0 (#797)
0.88.0 (2026-04-12)
- add missing extension YAMLs and test for completeness (#723) (c14f3e3)
- core: add MaskExpression POJO and ReadRel projection support (#782) (6f79ac8)
- core: add typeVariationReference to UserDefined type (#794) (a7ad40a)
0.87.0 (2026-03-29)
0.86.1 (2026-03-22)
0.86.0 (2026-03-19)
- core: use new aggregate grouping behavior in RelProtoConverter (#744) (dc33518)
- examples: update sql example (#747) (a4bb095)
- improve the javadoc generation (#642) (b06c786)
- javadoc for isthmus-cli and examples (#644) (7cbeec5)
- javadoc: partial isthmus (#758) (5ee2b63)
- javadoc: partial isthmus (#765) (57ac3fb)
- javadoc: partial isthmus (#766) (9718899)
- javadoc: partial isthmus calcite (#755) (163e23a)
- javadoc: partial isthmus calcite rel (#756) (68c8671)
- javadoc: partial isthmus sql (#754) (3fc1c58)
0.85.0 (2026-03-14)
- core: fully drops URI usage
0.84.1 (2026-03-14)
- isthmus: fix calcite optimization when DDL statements are used (#739) (94a0188)
- minimise overflow on timestamp conversion (#737) (dd89ce0)
0.84.0 (2026-03-12)
- core: expose metadata from YAML extension files (#691) (b865296)
- isthmus: enable precision timestamp addition/subtraction (#745) (df13eb8)
- core: create precision time protobuf (#742) (824fc58)
- isthmus: support DDL statements in SqlToSubstrait conversion (#736) (ff3607d)
0.83.0 (2026-03-09)
- isthmus: migrate to PrecisionTime / PrecisionTimestamp (#721) (7b43752)
- spark: build and publish multi-variant targets (#707) (d3ce994)
- properly deprecate Time(stamp) in favor of PrecisionTime(stamp) (#720) (d4697f7)
- release of spark variants failed (#734) (724aa22)
0.82.0 (2026-03-02)
- core: add SubstraitBuilder.fieldReference(s) methods for joins (#712) (66d7c0b)
- introduce Type#withNullable(boolean) (#713) (ea1a708)
- spark: support lpad and rpad functions (#719) (5cf6820)
0.81.0 (2026-03-01)
0.80.0 (2026-02-24)
- removed FeatureBoard class
- all constructors consuming a FeatureBoard have been removed
- a number of methods/constructors have been replaced with ConverterProvider equivalents
0.79.0 (2026-02-22)
- isthmus: add method to convert Plan into SQL strings using dialect (#704) (e75b621)
- spark: upgrade scala compiler to 2.13.18 (#705) (becd45e)
0.78.0 (2026-02-01)
0.77.0 (2026-01-25)
- io.substrait.relation.EmptyScan has been removed
- core: enforce NullLiteral nullable invariant (#686) (65c6881), closes #685
- isthmus: preserve nullability in VirtualTableScan Calcite roundtrip (#684) (e1c5207), closes #683
0.76.0 (2026-01-18)
- core:
UserDefinedLiteralimmutable abstract class becomes aUserDefinedAnyLiteralandUserDefinedStructLiteral - core: Removed
ExpressionCreator#userDefinedLiteralmethod - core: Removed all visitor methods operating on
Expression.UserDefinedLiteral
- add javadoc to core (part i) (#648) (5e2d0bb)
- isthmus: correct strpos parameter order (#676) (e0d0e52)
0.75.0 (2026-01-11)
0.74.0 (2025-12-21)
- handle parameterConsistency option in YAML extensions (#624) (acaecb5)
- isthmus: support month()-style datetime operators (#643) (82141bb)
0.73.0 (2025-12-14)
- isthmus: add dynamic function conversion capabilities (#457) (c5b1536)
- support Nested Lists (#627) (717242a)
0.72.0 (2025-12-07)
0.71.0 (2025-11-30)
- add ExchangeRel support to core (#602) (194f4e4)
- isthmus: mapping of string extract and pad fns (#619) (359cc7c)
0.70.0 (2025-11-23)
- isthmus: mapping of positional scalar fns (#610) (96541a9)
- isthmus: support bitwise left shift (#605) (22448d1)
0.69.0 (2025-11-16)
- enforce row type consistency with schema in virtual tables (#601) (a5322ea)
- isthmus: log2, greatest and least scalar fn mappings added (#598) (848bfcf)
- isthmus: true, false, distinct comparator scalar fn mappings (#597) (f59ecc5)
- handle valid YAML extension types (#595) (ed25bed), closes #594
- isthmus: support TPC-DS queries 1, 30, 81 (#593) (442f1f2)
0.68.0 (2025-11-02)
- isthmus: mapping of angular scalar functions (#586) (9c4db92)
- isthmus: mapping of bitwise functions from substrait (#582) (e1e8689)
- isthmus: mapping of factorial function from substrait (#589) (4b83666)
- isthmus: mapping of hyperbolic functions from substrait (#581) (ac9ad28)
- isthmus: support fully qualified table names in SubstraitCreateStatementParser (#575) (ab5943e)
0.67.0 (2025-10-28)
- core,isthmus: support grouping set index in Aggregate (#565) (a00a811)
- isthmus: extend Schema collector for dml (#570) (3f0f8f1)
- isthmus: improve extensibility of SubstraitRelVisitor (#553) (3c3db23)
- isthmus: mapping of square root function from substrait to calcite (#568) (a140d21)
- spark: dialect YAML file for spark converter (#554) (c4c6153)
- core: close AdvancedExtension serde gaps (#569) (2ba50cb)
- core: disable @Generated annotations for immutables (#560) (7222906)
- prevents exception on construction of
FunctionConverterwith duplicate functions (#564) (1b1dc73), closes #562 - spark: add versions for jackson dependencies (#576) (3605322)
- spark: convert UnsafeArrayData literal to substrait (#557) (a6b2187)
0.66.0 (2025-10-09)
- core: Plan now uses POJO AdvancedExtension
- core: Optimization class is now nested under AdvancedExtension
- core: Enhancement class is now nested under AdvancedExtension
- core: EmptyOptimization has been removed
- uri() methods are now urn()
- namespace() methods are now urn()
- removed SimpleExtension.loadDefaults
- core: use AdvancedExtension POJO in Plan POJO (#533) (2819bc6)
- enable handling of URNs alongside URIs (#522) (26e1e3e)
- handle new grouping mechanism in AggregateRel protos (#521) (637ffbf)
- introduce DefaultExtensionCatalog.DEFAULT_COLLECTION (#529) (a15d9c7)
- isthmus: support subquery nested in project (#530) (c7a1a34)
- spark: support Hive DDL / Insert operations (#518) (c20836e)
- isthmus: improve derivation of AggregateRel return type (#508) (cf4ad93)
- spark: sporadic failures in Hive test suite (#540) (c6c552d)
0.65.0 (2025-09-22)
- isthmus: introduce SqlToSubstrait#convert method (#473) (418742f)
- isthmus: introduce SubstraitSqlToCalcite and SubstraitStatementParser (#474) (8906eb8)
- isthmus: support limited processing of DDL statements(#432) (260a1c4)
- remove incorrect override of Project output schema (9c0248a)
0.64.0 (2025-08-11)
0.63.0 (2025-08-03)
- core,isthmus: add DML support to SqlToSubstrait (#431) (76684d8)
- spark: add LogicalRDD support (#451) (142c574)
- spark: support insert/append operations (#429) (1954fc8)
0.62.1 (2025-07-27)
0.62.0 (2025-07-13)
- ExpressionVisitor methods have new Context parameter
- RelVisitor methods have new Context parameter
- FunArgVisitor methods have new Context parameter
- isthmus: removed SqlToSubstrait#execute(String sql, List tables)
- isthmus: removed SqlToSubstrait#execute(String sql, String name, Schema schema)
- isthmus: removed SubstraitToSql#substraitRelToCalciteRel(Rel relRoot, List tables)
- isthmus: removed SubstraitToSql#toSql(RelNode root)
- add visit context to Rel, Expression and FuncArg Visitors (#427) (0e9c492)
- isthmus: additional parsing and unparsing utils for SQL (#430) (f87929d)
0.61.0 (2025-06-29)
- add additional builder methods (#425) (bb4c3bd)
- core: add UpdateRel (#421) (5e6741d)
- isthmus: support for SQL TRIM function (#401) (1f0e4de)
- spark: use core spec bitwise shift functions (#424) (8f14f62)
0.60.0 (2025-06-18)
0.59.0 (2025-06-15)
- expose Nullability and Decomposability enums (#415) (e445a50)
- support Version field in plans (#406) (de8bf2a)
- add fallback to version lookup (#413) (ac707e2)
- core: create and use SubstraitVersion Java class (#416) (1cb2eec)
- isthmus,spark: add MANIFEST.MF specification version to JAR (#412) (33c83dc)
0.58.0 (2025-06-08)
- add new join types (#402) (5907815)
- core: add WriteRel (#404) (e0cd29f)
- isthmus: upgrade Apache Calcite to 1.40.0 (#403) (bbe77ef)
0.57.0 (2025-05-25)
0.56.0 (2025-05-04)
- LookupCalciteSchema has been removed
0.55.0 (2025-04-27)
0.54.1 (2025-04-20)
0.54.0 (2025-04-13)
- isthmus: converting a Calcite RelRoot no longer produces a Substrait Rel
- isthmus: convert Calcite RelRoot to Substrait Plan.Root (#370) (b7abddd)
- isthmus: support more datetime extract variants (#360) (134c224)
- pojo: add builder methods to Plan and Plan.Root (#374) (ae70dc4)
- spark: add some date functions (#373) (2ece486)
- spark: make SparkSession optional (#385) (b67599e)
- isthmus: use explicit return type for scalar function expressions (#355) (867697c)
- spark: remove internal functions MakeDecimal and UnscaledValue (#386) (7a689e9)
- spark: use ImmutableFileFormat builders (#384) (7b520a7)
0.53.0 (2025-04-06)
- isthmus: removed AllowsSqlBatch from FeatureBoard
- isthmus: removed SqlConformance from FeatureBoard
- isthmus: removed CrossJoinPolicy from FeatureBoard
- removed function-based table lookup conversion methods
- isthmus: always allow batch queries (#372) (2d17d58)
- isthmus: always emit Cross relation when possible (#367) (7705243)
- isthmus: parse SQL using SqlConformanceEnum.LENIENT (#368) (2ce3501)
- new Prepare.CatalogReader based APIs for SQL to/from Substrait (#363) (3852640)
- missing throws for CREATE statement conversion failures (#364) (339b59c)
- spark: enable aliased expressions to round-trip (#348) (791f7ce)
0.52.0 (2025-03-30)
- spark: root names for plans now include nested names
- type derivation for Set now matches spec
- type derivation for Join now handles ANTI and SEMI
- validate and refine ScalarSubquery return type during proto conversion
- set nullability of aggregate references and groupings coming from Spark
- add
unquotedcasingoption to Isthmus CLI (#351) (f859c2e) - isthmus: add support for scalar subqueries (#353) (5b12f9b)
- isthmus: support exists and unique set predicates (#354) (424e8b3)
- spark: support for Struct types and literals (#342) (f27004a)
- spark: support merged structures (#346) (9e4afb9)
0.51.0 (2025-03-23)
- parsed SQL no longer uses the default Calcite type system
- ToProto#toProto now consumes a RelProtoConverter
build: enable protobuf compilation for use with Isthmus tests test: add RelExtensionRoundtripTest
Helps verify that substrait-java can handle Extension relations from protobuf to Calcite and back
- allow for more ergonomic conversion of Extension relations (#341) (d705f5a)
- spark: support round, floor and ceil functions (#347) (2d7fd37)
- spark: support SELECT without FROM clause (#344) (d91b44f)
0.50.0 (2025-03-16)
- isthmus: convert Substrait EmptyScan to Calcite Values relation (#340) (1ec0c57)
- isthmus: support converting Substrait Plan.Root to Calcite RelRoot (#339) (42b87ae)
- spark: support ExistenceJoin internal join type (#333) (59270f2)
0.49.0 (2025-03-09)
- pojo: support best_effort_filter on ReadRel messages (780a0bb)
0.48.0 (2025-02-24)
0.47.0 (2025-02-09)
- pojo: AggregationPhase enum has a new allowed value
- pojo: add UNSPECIFIED value to AggregationPhase enum (#320) (a0ef1dd)
- spark: add support for DelimiterSeparatedTextReadOptions (#323) (13da183)
0.46.1 (2024-12-22)
0.46.0 (2024-12-01)
0.45.1 (2024-11-24)
0.45.0 (2024-10-27)
- spark: Spark TimestampNTZType is now emitted as Substrait PrecisionTimestamp
- spark: Spark TimestampType is now emitted as Substrait PrecisionTimestampTZ
feat(core): added support for Expression.EmptyMapLiteral
- spark: add Window support (#307) (b3f61a2)
- spark: additional type and literal support (#311) (513a049)
- spark: bitwise functions (#309) (b8ccd8b)
- spark: convert VirtualTableScan to LocalRelation (#312) (3f2cc1e)
- spark: enable upper/lower/concat/coalesce string functions (#308) (fc8a764)
- propagate sorts in aggregate function invocation proto->rel (#313) (75ebac2)
- spark: nullability of output columns of expand relation (#310) (6413e55)
0.44.0 (2024-10-20)
- spark: map EqualNullSafe fn to is_not_distinct_from (#306) (357cc01)
- spark: support conversion of boolean types (#305) (d5452ad)
0.43.0 (2024-10-13)
0.42.0 (2024-10-06)
- EXCEPT ALL and INTERSECT ALL now output different SetOps
- spark: add MakeDecimal support (#298) (eec9727)
- spark: support UNION ALL in SparkSql (#301) (b55d8b0)
0.41.0 (2024-09-29)
0.40.0 (2024-09-22)
- IntervalDay now has "subsecond" and "precision" fields instead of "microseconds". Old protobufs should be still read correctly.
0.39.0 (2024-09-01)
0.38.1 (2024-08-18)
- core: output nullability of IfThen depends on all possible outputs (a0ca17b)
- core: wrong type derivation for ConsistentPartitionWindow (#286) (60575b3)
0.38.0 (2024-08-11)
0.37.0 (2024-07-21)
- AdvancedExtension#getOptimization() has been removed. Use getOptimizations() instead.
- literal support for precision timestamp types (#283) (94996f9)
- validate VirtualTableScan field names with schema (#284) (0f8514a)
0.36.0 (2024-07-14)
- Expression#options now returns List
- ProtoAggregateFunctionConverter#from(AggregateFunction) now returns AggregateFunctionInvocation
0.35.0 (2024-06-30)
- deprecate Timestamp and TimestampTZ visit functions (#273) (8a8253e)
- introduce substrait-spark module (#271) (8537dca)
0.34.0 (2024-06-23)
- getDfsNames() has been removed from VirtualTableScan
- getInitialSchema() not longer has a default implementation in VirtualTableScan
0.33.0 (2024-06-16)
0.32.0 (2024-06-04)
- Substrait FP32 is now mapped to Calcite REAL instead of FLOAT
- Calcite FLOAT is now mapped to Substrait FP64 instead of FP32
In Calcite, the Sql Type Names DOUBLE and FLOAT correspond to FP64, and REAL corresponds to FP32
- account for struct fields in VirtualTableScan check (#255) (3bbcf82)
- map Calcite REAL to Substrait FP32 (#261) (37331c2)
0.31.0 (2024-05-05)
- isthumus: CLI related functionality is now in the io.substrait.isthmus.cli package
- allow deployment time selection of logging framework #243 (#244) (72bab63)
- isthumus: extract CLI into isthmus-cli project #248 (#249) (a49de62)
0.30.0 (2024-04-28)
- ParameterizedTypeVisitor has new visit methods
- TypeExpressionVisitor has new visit methods
- TypeVisitor has new visit methods
- BaseProtoTypes has new visit methods
0.29.1 (2024-03-31)
0.29.0 (2024-03-17)
- isthmus: method ExpressionCreator.cast(Type, Expression) has been removed
0.28.1 (2024-03-10)
0.28.0 (2024-02-25)
- isthmus: add WindowRelFunctionConverter (#234) (a5e1a21)
- isthmus: improve signature matching for functions with wildcard arguments (#226) (ec1887c)
- disable task caches in the gradle build (#233) (7879f2b)
- isthmus: allow for conversion of plans containing Calcite SqlAggFunctions (#230) (0bdac49), closes #180
0.27.0 (2024-02-18)
- ExpressionVisitor now has a
visit(Expression.EmptyListLiteral)method - LiteralConstructorConverter constructor now requires a TypeConverter
- add support for empty list literals (#227) (2a98e3c)
- pojo: add POJO representation and converters for ConsistentPartitionWindowRel (#231) (f148bbb)
- support for user-defined type literals (#232) (ca8187f)
0.26.0 (2024-02-11)
- isthmus: support for replace (#224) (e96f4ba)
- isthmus: support for SQL expressions in CLI (#209) (e63388d)
0.25.0 (2024-01-21)
-
isthmus: signatures for aggregate building utils have changed
-
feat: additional builder methods for arithmetic aggregate functions
-
feat: sortField builder method
-
feat: grouping builder method
-
feat: add, subtract, multiply, divide and negate methods for builder
-
refactor: extract row matching assertions to PlanTestBase
-
feat(isthmus): improved Calcite support for Substrait Aggregate rels
-
refactor: builder functions for aggregates and aggregate functions now consume and return Aggregate.Measure instead of AggregateFunctionInvocation
- enable conversion of SQL expressions to Substrait ExtendedExpressions (#191) (750220e)
- improved error messages for Substrait conversion failures (#221) (#222) (8c70245)
- isthmus: improved Calcite support for Substrait Aggregate rels (#214) (1689c93)
0.24.0 (2024-01-07)
- introduce DefaultExtensionCatalog (#217) (35f9b62)
- isthmus: additional output formats for cli (#216) (6e62f46)
0.23.0 (2023-12-18)
- isthmus: support for char_length (#212) (7424483)
- pojo: support for extended expressions (#206) (9e023a7)
0.22.0 (2023-11-26)
0.21.0 (2023-11-19)
0.20.0 (2023-11-07)
- RelCopyOnWriteVisitor now extends RelVisitor and has generic type parameter
- exhaustive copy on write visitors (#199) (39c56ab)
- improved ReadRel handling (#194) (6548670)
- initial NestedLoopJoin support (#188) (b66d5b1)
0.19.0 (2023-10-29)
0.18.0 (2023-09-24)
- StrLiteral is no longer converted to CHAR()
fix(isthmus): convert BinaryLiteral to VARBINARY
- BinaryLiteral is no longer converted to BINARY)
- calcite: Isthmus no longer uses Calcite built-in MAX, MIN, SUM, SUM0 and AVG functions
- calcite: removed REQUIRED and NULLABLE fields from Type interface
- calcite: dedicated Substrait MAX, MIN, SUM, SUM0 and AVG functions (#180) (477b63e)
- extend literal conversion support (#183) (6e82f39)
0.17.0 (2023-09-17)
- EnumArgument, TypeArgument and ValueArgument are now abstract
- visit over core substrait types (#178)
- calcite: support reading in list and map literals (#177) (e8a2645)
- use Immutables for Argument subclasses (#179) (edfc65f)
- visit over core substrait types (#178) (6bee452)
0.16.0 (2023-09-06)
-
- windowFunction expression creator now requires window bound type parameter
-
the WindowBound POJO representation has been reworked to use visitation and more closely match the spec
-
ExpressionRexConverter now requires a WindowFunctionConverter
0.15.0 (2023-08-20)
- pojos: various public functions that took the AggregateFunction.AggregationInvocation proto now take the POJO equivalent Expression.AggregationInvocation.
- implement fractional second intervals (#167) (68aa7c4)
- support reading Substrait plans with Window Functions (#165) (93c6db5)
0.14.1 (2023-08-06)
0.14.0 (2023-07-23)
0.13.0 (2023-07-16)
0.12.1 (2023-06-18)
0.12.0 (2023-06-06)
- TypeConverter no longer uses static methods
- SimpleExtension.MAPPER has been replaced with SimpleExtension.objectMapper(String namespace)
- handle user-defined types in Isthmus (#149) (7d7acf8)
- support IfThen translation from Substrait to Calcite (#151) (f505c23)
0.11.0 (2023-05-28)
- rename and move extension associated code (#148)
0.10.0 (2023-05-15)
- add comparison function mappings (#142) (77f2744)
- support proto <-> pojo custom type conversion (#144) (9a12e60)
- upgrade calcite to 1.34.0 (#146) (02b0f17)
0.9.0 (2023-04-30)
0.8.0 (2023-04-09)
- Use commonExtension to indicate that these extensions are associated with the RelCommon message
- Use relExtension to indicate that these extensions are associated directly with Rels
0.7.0 (2023-03-12)
0.6.0 (2023-03-05)
0.5.0 (2023-02-05)
0.4.0 (2023-01-29)
0.3.0 (2023-01-19)
- SubstraitRelNodeConverter constructor has changed