mirror of https://github.com/AMT-Cheif/drift.git
Fix dialect properties
This commit is contained in:
parent
763c09c024
commit
f379ca0b25
|
@ -292,7 +292,7 @@ class DelegatedDatabase extends _BaseExecutor {
|
||||||
SqlDialect get dialect => SqlDialect.sqlite;
|
SqlDialect get dialect => SqlDialect.sqlite;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsBigInt => false;
|
bool get supportsBigInt => true;
|
||||||
|
|
||||||
final Lock _openingLock = Lock();
|
final Lock _openingLock = Lock();
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,10 @@ class GenerationContext {
|
||||||
final SqlTypeSystem typeSystem;
|
final SqlTypeSystem typeSystem;
|
||||||
|
|
||||||
/// The [SqlDialect] that should be respected when generating the query.
|
/// The [SqlDialect] that should be respected when generating the query.
|
||||||
final SqlDialect dialect;
|
SqlDialect get dialect => executor?.executor.dialect ?? SqlDialect.sqlite;
|
||||||
|
|
||||||
|
/// Whether executor supports BigInt type
|
||||||
|
bool get supportsBigInt => executor?.executor.supportsBigInt ?? true;
|
||||||
|
|
||||||
/// The actual [DatabaseConnectionUser] that's going to execute the generated
|
/// The actual [DatabaseConnectionUser] that's going to execute the generated
|
||||||
/// query.
|
/// query.
|
||||||
|
@ -36,9 +39,6 @@ class GenerationContext {
|
||||||
/// This is almost always the case, but not in a `CREATE VIEW` statement.
|
/// This is almost always the case, but not in a `CREATE VIEW` statement.
|
||||||
final bool supportsVariables;
|
final bool supportsVariables;
|
||||||
|
|
||||||
/// Whether executor supports BigInt type
|
|
||||||
bool get supportsBigInt => executor?.executor.supportsBigInt ?? false;
|
|
||||||
|
|
||||||
final List<dynamic> _boundVariables = [];
|
final List<dynamic> _boundVariables = [];
|
||||||
|
|
||||||
/// The values of [introducedVariables] that will be sent to the underlying
|
/// The values of [introducedVariables] that will be sent to the underlying
|
||||||
|
@ -61,14 +61,12 @@ class GenerationContext {
|
||||||
/// Constructs a [GenerationContext] by copying the relevant fields from the
|
/// Constructs a [GenerationContext] by copying the relevant fields from the
|
||||||
/// database.
|
/// database.
|
||||||
GenerationContext.fromDb(this.executor, {this.supportsVariables = true})
|
GenerationContext.fromDb(this.executor, {this.supportsVariables = true})
|
||||||
: typeSystem = executor?.typeSystem ?? SqlTypeSystem.defaultInstance,
|
: typeSystem = executor?.typeSystem ?? SqlTypeSystem.defaultInstance;
|
||||||
// ignore: invalid_null_aware_operator, (doesn't seem to actually work)
|
|
||||||
dialect = executor?.executor?.dialect ?? SqlDialect.sqlite;
|
|
||||||
|
|
||||||
/// Constructs a custom [GenerationContext] by setting the fields manually.
|
/// Constructs a custom [GenerationContext] by setting the fields manually.
|
||||||
/// See [GenerationContext.fromDb] for a more convenient factory.
|
/// See [GenerationContext.fromDb] for a more convenient factory.
|
||||||
GenerationContext(this.typeSystem, this.executor,
|
GenerationContext(this.typeSystem, this.executor,
|
||||||
{this.dialect = SqlDialect.sqlite, this.supportsVariables = true});
|
{this.supportsVariables = true});
|
||||||
|
|
||||||
/// Introduces a variable that will be sent to the database engine. Whenever
|
/// Introduces a variable that will be sent to the database engine. Whenever
|
||||||
/// this method is called, a question mark should be added to the [buffer] so
|
/// this method is called, a question mark should be added to the [buffer] so
|
||||||
|
|
|
@ -9,21 +9,36 @@ typedef DatabaseOpener = FutureOr<QueryExecutor> Function();
|
||||||
/// A special database executor that delegates work to another [QueryExecutor].
|
/// A special database executor that delegates work to another [QueryExecutor].
|
||||||
/// The other executor is lazily opened by a [DatabaseOpener].
|
/// The other executor is lazily opened by a [DatabaseOpener].
|
||||||
class LazyDatabase extends QueryExecutor {
|
class LazyDatabase extends QueryExecutor {
|
||||||
late QueryExecutor _delegate;
|
/// Underlying executor
|
||||||
|
late final QueryExecutor _delegate;
|
||||||
|
|
||||||
bool _delegateAvailable = false;
|
bool _delegateAvailable = false;
|
||||||
|
final SqlDialect _dialect;
|
||||||
|
|
||||||
Completer<void>? _openDelegate;
|
Completer<void>? _openDelegate;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsBigInt => _delegate.supportsBigInt;
|
bool get supportsBigInt => _delegate.supportsBigInt;
|
||||||
|
|
||||||
|
@override
|
||||||
|
SqlDialect get dialect {
|
||||||
|
// Drift reads dialect before database opened, so we must know in advance
|
||||||
|
if (_delegateAvailable && _dialect != _delegate.dialect) {
|
||||||
|
throw Exception('LazyDatabase created with $_dialect, but underlying '
|
||||||
|
'database is ${_delegate.dialect}.');
|
||||||
|
}
|
||||||
|
return _dialect;
|
||||||
|
}
|
||||||
|
|
||||||
/// The function that will open the database when this [LazyDatabase] gets
|
/// The function that will open the database when this [LazyDatabase] gets
|
||||||
/// opened for the first time.
|
/// opened for the first time.
|
||||||
final DatabaseOpener opener;
|
final DatabaseOpener opener;
|
||||||
|
|
||||||
/// Declares a [LazyDatabase] that will run [opener] when the database is
|
/// Declares a [LazyDatabase] that will run [opener] when the database is
|
||||||
/// first requested to be opened.
|
/// first requested to be opened. You must specify the same [dialect] as the
|
||||||
LazyDatabase(this.opener);
|
/// underlying database has
|
||||||
|
LazyDatabase(this.opener, {SqlDialect dialect = SqlDialect.sqlite})
|
||||||
|
: _dialect = dialect;
|
||||||
|
|
||||||
Future<void> _awaitOpened() {
|
Future<void> _awaitOpened() {
|
||||||
if (_delegateAvailable) {
|
if (_delegateAvailable) {
|
||||||
|
|
Loading…
Reference in New Issue