- Significant refactoring of materialization is included. It splits creation of table from filling a table in many cases.
This may lead to unexpected changes in log output. For now, the `INSERT INTO SELECT` statement is only printed in
shortened version, because the creation of the table already includes the same statement in full. In the future, this
might be made configurable, so your feedback is highly welcome.
- pipedag.Table() now supports new parameters `nullable` and `non_nullable`. This allows specifying which columns are
nullable both as a positive and negative list. If both are specified, they must mention each column in the table and
have no overlap. For most dialects, non-nullable statements are issued after creating the empty table. For dialects
`mssql` and `ibm_db2`, both nullable and non-nullable column alterations are issued because constant literals create
non-nullable columns by default. If neither nullable nor non_nullable are specified, the default `CREATE TABLE as SELECT`
is kept unmodified except for primary key columns where some dialects require explicit `NOT NULL` statements.
- Refactored configuration for cache validation options. Now, there is a separate section called cache_validation configurable
per instance which includes the following options:
* mode: NORMAL, ASSERT_NO_FRESH_INPUT (protect a stable pipeline / fail if tasks with cache function are executed),
IGNORE_FRESH_INPUT (same as ignore_cache_function=True before),
FORCE_FRESH_INPUT (invalidates all tasks with cache function), FORCE_CACHE_INVALID (rerun all tasks)
* disable_cache_function: True disables the call of cache functions. Downside: next mode=NORMAL run will be cache invalid.
* ignore_task_version: Option existed before but a level higher
* REMOVED option ignore_cache_function: Use `cache_validation: mode: IGNORE_FRESH_INPUT` in pipedag.yaml or
`flow.run(cache_validation_mode=CacheValidationMode.IGNORE_FRESH_INPUT)` instead.
- Set transaction isolation level to READ UNCOMMITTED via SQLAlchemy functionality
- Fix that unlogged tables were created as logged tables when they were copied as cache valid
- Materialize lazy tasks, when they are executed without stage context.