- [-] Basic functionality
- Model mapping with legacy decorator
- Complex schema delegates for internal use
- Plain schema metadata mapping for external use (e.g migration tracker, extension API)
- [-] Relationship mapping
- One-to-one
- One-to-many
- Many-to-many
- Through relationships
- Polymorphic relationships
- Self-referencing relationships
- Query API for common operations
- Where
- Limit/Offset
- Order by
- Select
- Distinct
- Join
- Set operations (union, intersect, except)
- Aggregate functions (count, sum, avg, min, max)
- Any/All
- Group by
- Fetch as plain object instead of class/entity instance
- Dataset's findByIdentity and findManyByIdentity
- CUD operations
- Insert
- Insert many
- Update
- Update many by condition
- Delete
- Delete many by condition
- Upsert
- [-] Raw SQL query API
- Basic support
- Prepared statements
- Advanced support (TBD)
- Use schema's metadata for query building
- Fetch as class or entity instance
- Queryable interop
- Model mapping with legacy decorator
- [-] Relationship API
- [-] Lazy loading (default)
- Many relationships (collection) with RelationSet
- One relationship (record) with EntityRecord
- Loading strategies
- Eager or auto loading
- Batch loading
- Subquery loading
- Loading depth control
- Single level
- Recursive
- Fetching strategies
- Single query
- Split queries
- Scope load by root collection for N+1 guard
- [-] Lazy loading (default)
- Collection API with fusion mechanism
- [-] DB support
- Reusable ANSI SQL builder
- PostgreSQL
- MySQL
- SQLite
- MSSQL
- [-] Internal API
- Query context & context builder
- Basic caching & hashing
- Parameter mapper and extractor
- Query execution
- Query result processing with ResultMapper
- Entity mapper
- Scalar mapper
- Record mapper
- Integrate with IdentityMap
- Connection pool-centric provider API
- Identity map on connection level
- Type transformers API (handle non-entity objects)
- Common types (date, json, etc)
- User-defined types
- [-] Function or class' method adapter (support function call in query)
- Built-in types
- string
- number
- boolean
- date
- json
- array
- Built-in query helper
- User-defined types
- Built-in types
- [-] QOL or helper enhacement
- Created and updated timestamps
- Soft delete
- UUID primary key
- [-] Composite primary key
- Basic support
- Advanced support (TBD)
- Indexes
- Concurrency lock (versioning)
- Migration
- Explicit transaction API
- Query tagging
- Documentation
- Tests
- Better error information
- Release pipeline - transpile, minify, etc
- TypeScript
- Babel
- Rollup
- Webpack
- Parcel
- Uglify
- Flow
- Compiled lambda query API
- Better subquery support
- Multi schema support
- Advanced CUD operations
- Batch insert using copy
- Update many based on entities
- Update many by join
- CQRS support, read/write source separation
- Explicit CTE support
- Extension API for migrations from other ORMs
- Custom thenable-based query instead of promise (for better query compsition with
first,last, etc) - Model mapping with stage3 decorators
- Model mapping with object construct
- Model lifecycle hooks
- Unit of work and persistence context
- Change tracking
- Unmanaged query builder API
- Interop between Queryable <-> Unmanaged query builder <-> Raw SQL
- [ ]
- Query Context-based select sequence for better query planning
- Query Logging
- Interceptors
- Values queryable API
- Knex.js support
- Non-SQL provider support
- NoSQL databases
- MongoDB
- Cassandra
- Redis
- GraphQL API
- ElasticSearch
- NoSQL databases
- Criteria-like query scoping API