This release can mostly be described as a quality-of-life release. While there are not many new groundbreaking features at the moment, almost every part of the library has had some improvement. See the full list of changes below, but to highlight a few:
- We now officially support Kotlin 2.0+. The library is built with 2.0.20 now, so it will work with KSP 2.0.20 too.
- We've continued our work on the DataFrame Kotlin Compiler Plugin. While it is still experimental, it introduces an exciting new approach to working with your data in a zero-boilerplate, type safe way leveraging the amazing power the Kotlin 2.0 compiler gives us. See this demo project to experiment with it yourself.
- See this notebook for some of the small yet exciting features of the 0.14 release!
0.14.1
Includes the fix: #872 which fixes compatibility with Kandy v0.7.1.
Features
- Compiler plugin by @koperagen in #729
- added toDataFrame for float- and double iterables by @Jolanrensen in #631
- Allow any ArrowReader implementation to be use for reading Arrow data #627 by @fb64 in #628
- add random parameter to shuffle by @koperagen in #643
- apply ksp to multiplatform configs in multiplatform modules by @mgroth0 in #647
- Add separator parameter to DataFrame.flatten by @zaleslaw in #667
- POJO toDataFrame support (and array improvements) by @Jolanrensen in #650
- Add JDBC credentials extraction from env variables and improve exception handling by @zaleslaw in #692
- Added MS SQL support for the dataframe-jdbc module by @zaleslaw in #689
- Update SQL all table/schemas reading functions to return maps with table names by @zaleslaw in #718
- Add a support for H2 modes by @zaleslaw in #720
- Add delimiter parameter to readDelimStr by @koperagen in #743
- Add an option to read Excel cell values as a String regardless of their content type by @koperagen in #745
- Add castTo to help working with implicitly generated schemas in notebooks and plugin by @koperagen in #747
- Replace Klaxon with kotlinx-serialization by @devcrocod in #603
- Add df.convertTo(schemaFrom) overload by @koperagen in #764
- Add Convert.asFrame function by @koperagen in #781
- Add extension functions for the ResultSet by @zaleslaw in #772
Work on the compiler plugin
- then operation in pivot column selection DSL inside aggregate by @koperagen in #617
- Compiler plugin fixes by @koperagen in #740
- Compiler plugin update by @koperagen in #755
- Adding utils to help ensure that compile time schema ~ runtime schema by @koperagen in #767
- Improve codegen for stdlib <-> df interop workflow by @koperagen in #763
- Add initial support for CS DSL in the compiler plugin by @koperagen in #783
- Refactor toDataFrame implementation in compiler plugin by @koperagen in #782
- [Compiler plugin] Avoid throwing debugging exceptions in user projects because of false positives by @koperagen in #788
- [Compiler plugin] silently abort interpretation in case of invariant errors by @koperagen in #812
- [Compiler plugin ] Support ColumnName annotation in extension properties codegen by @koperagen in #818
- Update compiler plugin by @koperagen in #832
Fixes
- Added "debug mode" to catch type mismatches in columns during testing only by @Jolanrensen in #713
- Removing dangerous exception in ConvenienceSchemaGeneratorPlugin by @Jolanrensen in #655
- add gradle wrapper validation workflow by @sullis in #648
- Fix #640: Jupyter integration conflicts with variable type converters from other integrations by @ark-1 in #641
- KDoc fixes for IntelliJ 2024.X by @Jolanrensen in #613
- Fix some things that break in the build with K2 enabled by @koperagen in #665
- Add nullability inference support to dataframe-jdbc by @zaleslaw in #672
- Serialize BufferedImages as base64 by @ermolenkodev in #694
- Downsize test images to speed up unit tests execution by @ermolenkodev in #709
- KTNB-693 Send the full dataframe schema as metadata by @cmelchior in #706
- K2 preparation by @Jolanrensen in #708
- File and URL names are used in JDK / suggested in IDE auto-import. Rename our classes to avoid conflict by @koperagen in #725
isComparable()
fix for doubledescribe()
by @Jolanrensen in #726- Fixes std() not inferring column types by @Jolanrensen in #728
- Pivot fix by @Jolanrensen in #735
- Enforce the project to be built with Java 11 by @Jolanrensen in #736
- Rename private properties with names matching library classes by @koperagen in #737
- Add a test for valueCounts by @koperagen in #756
- Revert "Add a test for valueCounts" by @koperagen in #757
- Revert filter condition, fixes broken logic by @koperagen in #759
- Add a test for valueCounts by @koperagen in #758
- Add a notice about external urls by @koperagen in #774
- Make sortBy(ColumnReference) accept pathOf without extra cast by @koperagen in #779
- Update MarkersExtractor.kt by @GeorgCantor in #791
- Build config and Debug mode by @Jolanrensen in #796
- This fixes Nothing by @Jolanrensen in #795
- Small convertTo fix by @Jolanrensen in #800
- Small implode fix by @Jolanrensen in #801
- GroupBy aggregate fix by @Jolanrensen in #803
- Support for the serialization of DataframeConvertible values in ValueColumns has been added to enhance visualization in the KTNB plugin. by @ermolenkodev in #823
- Hide properties of intermediate objects and remove data class attributes by @koperagen in #828
- Fixes reading CSV files with BOM characters by @Jolanrensen in #831
- Improve dataframe sorting in KTNB UI by handling non-comparable columns by @ermolenkodev in #836
- Empty csv fix by @Jolanrensen in #835
- Added test suite for PostgreSQL local tests with covering case with URLs by @zaleslaw in #798
- Enforcing kotlinx datetime bias by @Jolanrensen in #843
- allow applying ksp to custom configs by @mgroth0 in #842
- Fix duplicated jvm signature by @koperagen in #868
- Fixed flaky jsonWrite test by @Jolanrensen in #873
- Rerunning notebooks for 0.14.0-RC1 by @Jolanrensen in #870
- Remove samplesTest task from kover report so "build" don't trigger it by @koperagen in #865
- Improved SQL<->JDBC mapping by @zaleslaw in #855
- Add Language annotations for better IDE experience by @koperagen in #861
Docs and Examples
- Update docs and readme for 0.13.1 by @Jolanrensen in #629
- Fixed a documentation for SQL database connection in Kotlin Notebooks by @zaleslaw in #639
- Updated parse documentation by @Jolanrensen in #652
- Updated split documentation by @Jolanrensen in #653
- Updated mentions of DataFrame to represent objects by @zaleslaw in #664
- Remove incomplete documentation topics by @zaleslaw in #681
- Update comments and doc to provide more details about ResultSet by @zaleslaw in #682
- Introduce OtherSamples.kt to generate tables for writerside docs outside Korro by @koperagen in #695
- Enable sitemap.xml by @Jolanrensen in #698
- Update README.md by @Jolanrensen in #714
- Column Selector Grammar in docs by @Jolanrensen in #619
- Column selector docs function descriptions by @Jolanrensen in #711
- KDocs GH actions by @Jolanrensen in #731
- Korro gh actions by @Jolanrensen in #824
- [KDocs] auto preprocess only when publishing by @Jolanrensen in #749
- google analytics script by @azhebel in #786
- Highlight work in progress in README by @koperagen in #789
- Small update to the linter information for the documentation website by @Jolanrensen in #810
- Adding KDoc preprocessing guide by @Jolanrensen in #806
- Changed documentation regarding extension properties api by @Jolanrensen in #651
- Update links to demos by @koperagen in #833
- Explain the use-case for toDataFrame(columnName) in docs by @koperagen in #837
- Add documentation for Kotlin Notebook Plugin usage and troubleshooting by @ermolenkodev in #839
Version Updates
- Dev version bump to 0.14.0 & updating deprecations by @Jolanrensen in #636
- update ksp to 1.9.23-1.0.20 by @koperagen in #654
- set docPreprocessor to 0.3.6 by @Jolanrensen in #716
- Update Kotlin version for compiler plugin by @koperagen in #744
- Update kotlinDatetime version by @zaleslaw in #753
- Replacing the linter by @Jolanrensen in #754
- Update to Kotlin 2.0 by @Jolanrensen in #792
- Update database URLs and dependencies by @zaleslaw in #802
- Gradle bump to 8.10 and housekeeping by @Jolanrensen in #846
- 0.14 version bumps by @Jolanrensen in #848
Known Issues
- Incompatibility with Kandy 0.7.0 for some functions requiring
statBin
. Resolved in Kandy 0.7.1 and DF 0.14.1. - isOpenApiStr logger leaks to Gradle in #785
- Compiler plugin is still experimental in #704
- Jupyter importDataSchema() does not generate column accessors in #696
- Describe breaks on Number column (and other statistics inconsistencies) in #558
- CSV reading can be slow and needs some rework in #827
- KDocs are lacking in #811
- Many more, see issues and feel free to help us :)
New Contributors
- @mgroth0 made their first contribution in #647
- @sullis made their first contribution in #648
- @ark-1 made their first contribution in #641
- @azhebel made their first contribution in #786
- @GeorgCantor made their first contribution in #791
Full Changelog: v0.13.1...v0.14.0