This commit is contained in:
Moshe Dicker 2024-04-01 20:36:23 -04:00
parent 4b3dd99a0a
commit ce3e4e2b70
1 changed files with 34 additions and 16 deletions

View File

@ -30,8 +30,8 @@ class TableManagerState<
DT extends DataClass, DT extends DataClass,
FS extends FilterComposer<DB, T>, FS extends FilterComposer<DB, T>,
OS extends OrderingComposer<DB, T>, OS extends OrderingComposer<DB, T>,
C extends ProcessedTableManager<DB, T, DT, FS, OS, C, CH>, C extends ProcessedTableManager<DB, T, DT, FS, OS, C, CI>,
CH extends C Function(TableManagerState<DB, T, DT, FS, OS, C, CH>)> { CI extends CompanionBuilder<DT>> {
/// The database that the query will be exeCCted on /// The database that the query will be exeCCted on
final DB db; final DB db;
@ -69,7 +69,12 @@ class TableManagerState<
final OS orderingComposer; final OS orderingComposer;
/// This function is used internaly to return a new instance of the child manager /// This function is used internaly to return a new instance of the child manager
final CH _getChildManagerBuilder; final C Function(TableManagerState<DB, T, DT, FS, OS, C, CI>)
_getChildManagerBuilder;
/// This function will return a class which contains a function which
///
final CI _getInsertableCompanionBuilder;
/// Defines a class which holds the state for a table manager /// Defines a class which holds the state for a table manager
/// It contains the database instance, the table instance, and any filters/orderings that will be applied to the query /// It contains the database instance, the table instance, and any filters/orderings that will be applied to the query
@ -79,17 +84,20 @@ class TableManagerState<
required this.table, required this.table,
required this.filteringComposer, required this.filteringComposer,
required this.orderingComposer, required this.orderingComposer,
required CH getChildManagerBuilder, required C Function(TableManagerState<DB, T, DT, FS, OS, C, CI>)
getChildManagerBuilder,
required CI getInsertableCompanionBuilder,
this.filter, this.filter,
this.distinct, this.distinct,
this.limit, this.limit,
this.offset, this.offset,
this.orderingBuilders = const {}, this.orderingBuilders = const {},
this.joinBuilders = const {}, this.joinBuilders = const {},
}) : _getChildManagerBuilder = getChildManagerBuilder; }) : _getChildManagerBuilder = getChildManagerBuilder,
_getInsertableCompanionBuilder = getInsertableCompanionBuilder;
/// Copy this state with the given values /// Copy this state with the given values
TableManagerState<DB, T, DT, FS, OS, C, CH> copyWith({ TableManagerState<DB, T, DT, FS, OS, C, CI> copyWith({
bool? distinct, bool? distinct,
int? limit, int? limit,
int? offset, int? offset,
@ -103,6 +111,7 @@ class TableManagerState<
filteringComposer: filteringComposer, filteringComposer: filteringComposer,
orderingComposer: orderingComposer, orderingComposer: orderingComposer,
getChildManagerBuilder: _getChildManagerBuilder, getChildManagerBuilder: _getChildManagerBuilder,
getInsertableCompanionBuilder: _getInsertableCompanionBuilder,
filter: filter ?? this.filter, filter: filter ?? this.filter,
joinBuilders: joinBuilders ?? this.joinBuilders, joinBuilders: joinBuilders ?? this.joinBuilders,
orderingBuilders: orderingBuilders ?? this.orderingBuilders, orderingBuilders: orderingBuilders ?? this.orderingBuilders,
@ -232,10 +241,10 @@ abstract class BaseTableManager<
DT extends DataClass, DT extends DataClass,
FS extends FilterComposer<DB, T>, FS extends FilterComposer<DB, T>,
OS extends OrderingComposer<DB, T>, OS extends OrderingComposer<DB, T>,
C extends ProcessedTableManager<DB, T, DT, FS, OS, C, CH>, C extends ProcessedTableManager<DB, T, DT, FS, OS, C, CI>,
CH extends C Function(TableManagerState<DB, T, DT, FS, OS, C, CH>)> { CI extends CompanionBuilder<DT>> {
/// The state for this manager /// The state for this manager
final TableManagerState<DB, T, DT, FS, OS, C, CH> state; final TableManagerState<DB, T, DT, FS, OS, C, CI> state;
/// Create a new [BaseTableManager] instance /// Create a new [BaseTableManager] instance
BaseTableManager(this.state); BaseTableManager(this.state);
@ -265,9 +274,9 @@ abstract class ProcessedTableManager<
D extends DataClass, D extends DataClass,
FS extends FilterComposer<DB, T>, FS extends FilterComposer<DB, T>,
OS extends OrderingComposer<DB, T>, OS extends OrderingComposer<DB, T>,
C extends ProcessedTableManager<DB, T, D, FS, OS, C, CH>, C extends ProcessedTableManager<DB, T, D, FS, OS, C, CI>,
CH extends C Function(TableManagerState<DB, T, D, FS, OS, C, CH>)> CI extends CompanionBuilder<D>>
extends BaseTableManager<DB, T, D, FS, OS, C, CH> extends BaseTableManager<DB, T, D, FS, OS, C, CI>
implements implements
MultiSelectable<D>, MultiSelectable<D>,
SingleSelectable<D>, SingleSelectable<D>,
@ -299,9 +308,9 @@ abstract class RootTableManager<
D extends DataClass, D extends DataClass,
FS extends FilterComposer<DB, T>, FS extends FilterComposer<DB, T>,
OS extends OrderingComposer<DB, T>, OS extends OrderingComposer<DB, T>,
C extends ProcessedTableManager<DB, T, D, FS, OS, C, CH>, C extends ProcessedTableManager<DB, T, D, FS, OS, C, CI>,
CH extends C Function(TableManagerState<DB, T, D, FS, OS, C, CH>)> CI extends CompanionBuilder<D>>
extends BaseTableManager<DB, T, D, FS, OS, C, CH> { extends BaseTableManager<DB, T, D, FS, OS, C, CI> {
RootTableManager(super.state); RootTableManager(super.state);
C all() { C all() {
@ -310,7 +319,10 @@ abstract class RootTableManager<
// Future<int> create(Insertable<D> Function(CI o) f, // Future<int> create(Insertable<D> Function(CI o) f,
// {InsertMode? mode, UpsertClause<Table, dynamic>? onConflict}) { // {InsertMode? mode, UpsertClause<Table, dynamic>? onConflict}) {
// return state.db.into(state.table) // (state._getInsertableCompanionBuilder.create() as CI).companion = f;
// return state.db
// .into(state.table)
// .insert(f(_createInsertable), mode: mode, onConflict: onConflict); // .insert(f(_createInsertable), mode: mode, onConflict: onConflict);
// } // }
@ -330,3 +342,9 @@ abstract class RootTableManager<
// return state.db.update(state.table).replace(entry); // return state.db.update(state.table).replace(entry);
// } // }
} }
abstract class CompanionBuilder<D> {
late final UpdateCompanion<D> companion;
Function get insert;
Function get create;
}