-
Notifications
You must be signed in to change notification settings - Fork 22
Roadmap
Nikolai Amelichev edited this page Apr 11, 2024
·
14 revisions
- ✔️
Deploy version=> Done, 28 December 20231.0.0to Maven Central using GitHub Actions. 1-2 weeks after initial commit - ⏳ Regularly run
repository-ydb-v2integration tests using GitHub Actions. 1-2 weeks after initial commit => #6 - ✔️
Support Kotlin dataclasses in=> Done, #7StdReflector. 2-4 weeks after initial commit - ⏳
JsonConverterimplementations 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
@Betaannotation 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
ReflectTypefor 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 (
InstantandDuration) data binding logic in bothYdbRepositoryandInMemoryRepository. Support qualifiers for these types inInMemoryRepository, for more precise tests. 1-2 months after initial commit - Support
GROUP BYinYqlStatementPartandquery()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
LegacyYdbSpliteratorandReadTableParams.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@Nullableannotations. - If the "ideal" plan doesn't work with IntelliJ IDEA at least, add missing
@NonNullannotations (there will be lots of them 😢). - Should we use Lombok's
@NonNullannotations 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
Changesetfor removal, or, alternatively, move it tounsafe().blindSetField(). 3-4 months after initial commit - Deprecate and remove
staticconfiguration. Move such configuration to type and field annotations, orSchemaRegistryif 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 aSchemaRegistryand implicitly depend on the default one - Move
CommonConverters+JsonConverter.{define,disable}JsonConverterto useSchemaRegistry, maybe?
- ⌛
- Overhaul magic ID field naming logic, and custom naming logic in general:
NamingStrategycurrently has avoidwhich 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
NULLand remain as-is, potentially violating data invariants in the newer clients. Try to useREPLACEfor 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
CompletableFutures 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