-
Notifications
You must be signed in to change notification settings - Fork 19
Roadmap
Nikolai Amelichev edited this page Jun 5, 2025
·
14 revisions
-
Deploy version=> Done, 28 December 20231.0.0
to Maven Central using GitHub Actions. 1-2 weeks after initial commit -
Regularly run=> Done, #6repository-ydb-v2
integration tests using GitHub Actions. 1-2 weeks after initial commit -
Support Kotlin dataclasses in=> Done, #7StdReflector
. 2-4 weeks after initial commit -
JsonConverter
implementations for popular JSON libraries:Jackson(in v1.0.1), Google Gson and/or Square Moshi. 2-4 weeks after initial commit - Add JavaDoc to all public classes
-
Document unstable APIs with Guava's=>@Beta
annotation or something similar.@ExperimentalApi
for experimental APIs,@InternalApi
for implementation details not meant to be used by end-users - Add an explicit versioning policy (recent SemVer?) + Document the first library version it applies to. 1-2 months after initial commit
- ⏳
Change outdated and/or deprecated data binding defaults, while supporting older defaults for backwards compatibility.=> Opt-in since summer 2024, #20. Will become opt-out in YOJ 3.0.0 - ⏳ Stricter
ReflectType
for POJOs. Remove deprecated logic for all-args constructor detection which relies on e.g.Class.getDeclaredFields()
being in a predictable order => #19 - Use common timestamp and interval (
Instant
andDuration
) data binding logic in bothYdbRepository
andInMemoryRepository
. Support qualifiers for these types inInMemoryRepository
, for more precise tests. 1-2 months after initial commit - Support
GROUP BY
inYqlStatementPart
andquery()
DSL (TableQueryBuilder
). 1-2 months after initial commit - Add row-limit-aware upserts and selects (never causing
ResultTruncatedException
); the row limit must be configurable if YDB [still] has no API to get the actual limit value. 1-2 months after initial commit - Translate all code comments to English, and actualize them if needed. See e.g.
YdbValidator
. 1-2 months after initial commit - Deprecate
LegacyYdbSpliterator
andReadTableParams.useNewSpliterator()
for removal; then remove them permanently in a minor release. 1-2 months after initial commit -
Actualize YOJ dependencies, use latest minor versions of everything.1-2 months after initial commit- Maybe add Dependabot to our repository?
- Maybe use SLF4J 2.x?
- Overhaul nullability annotations in YOJ. 3-4 months after initial commit
- Ideally, we should have minimum annotations, assuming non-null parameters and return values by default, with nullable parameters and results being annotated with
@Nulable
. Want to use@ParametersAreNonnullByDefault
,@CheckForNull
, and sometimes@Nullable
annotations. - If the "ideal" plan doesn't work with IntelliJ IDEA at least, add missing
@NonNull
annotations (there will be lots of them 😢). - Should we use Lombok's
@NonNull
annotations to haverequireNonNull()
code generated for us? I think yes.
- Ideally, we should have minimum annotations, assuming non-null parameters and return values by default, with nullable parameters and results being annotated with
- Remove unsafe methods from
Table
(blind upserts and deletes), have a separate interface for them to force users to write e.g.db.myTable().unsafe().blindDelete(...)
. 3-4 months after initial commit - Deprecate
Changeset
for removal, or, alternatively, move it tounsafe().blindSetField()
. 3-4 months after initial commit - Deprecate and remove
static
configuration. Move such configuration to type and field annotations, orSchemaRegistry
if that is not possible. This will allow to have multiple differently configured ORM instances inside a single JVM, for much easier component and integration testing. 3-6 months after initial commit- ⌛
FieldValueType.registerStringValueType()
=> #24 -
Ydb{Schema,Data}CompatibilityChecker
(and, way more importantly, InMemoryTable and YdbTable and YqlStatement) do not take aSchemaRegistry
and implicitly depend on the default one - Move
CommonConverters
+JsonConverter.{define,disable}JsonConverter
to useSchemaRegistry
, maybe?
- ⌛
- Overhaul magic ID field naming logic, and custom naming logic in general:
NamingStrategy
currently has avoid
which calls deprecatedJavaField.setName()
method to define column names. Maybe rewrite it to use builders or something like that :-). 3-6 months after initial commit - Fix data migration problem: older client reads newer version of the entity, changes it and saves it; but columns unknown to the older client are not set to
NULL
and remain as-is, potentially violating data invariants in the newer clients. Try to useREPLACE
for this. 6-8 months after initial commit -
Get rid of=> Done, since 2.3.0repository-ydb-v1
.
- Asynchronous and/or reactive API (YDB SDK uses
CompletableFuture
s underneath, so this is doable, just painful.) :-) - Stricter code style and Checkstyle rules to enforce it
- Minimize library dependencies
- Apache Commons Text is used essentially in one place (compatibility checker), is it even really necessary?
- Do we need Google Guava? Can we live without it?
- Quick Start Documentation
- Code Reference
- Code Samples