-
Notifications
You must be signed in to change notification settings - Fork 12
Roadmap
Nikolai Amelichev edited this page Apr 11, 2024
·
12 revisions
- ✔️
Deploy version=> Done, 28 December 20231.0.0
to Maven Central using GitHub Actions. 1-2 weeks after initial commit - ⏳ Regularly run
repository-ydb-v2
integration tests using GitHub Actions. 1-2 weeks after initial commit => #6 - ✔️
Support Kotlin dataclasses in=> Done, #7StdReflector
. 2-4 weeks after initial commit - ⏳
JsonConverter
implementations for popular JSON libraries:Jackson, Google Gson/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. 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. => #20
- ⏳ 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 -
Kikimr{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
repository-ydb-v1
. 6-12 months after initial commit
- 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