Skip to content

Commit

Permalink
Merge pull request #2663 from Leylan24/custom-expression-dialect
Browse files Browse the repository at this point in the history
CustomExpression.dialectSpecific when used would add in empty arguments when generating queries
  • Loading branch information
simolus3 authored Oct 3, 2023
2 parents fcd984f + f0ce04a commit 8122ae3
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 15 deletions.
2 changes: 2 additions & 0 deletions drift/lib/src/runtime/query_builder/expressions/custom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class CustomExpression<D extends Object> extends Expression<D> {
final dialectSpecific = _dialectSpecificContent;

if (dialectSpecific != null) {
final dialect = context.dialect;
context.buffer.write(dialectSpecific[dialect]);
} else {
context.buffer.write(content);
}
Expand Down
12 changes: 12 additions & 0 deletions drift/test/database/expressions/expression_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,16 @@ void main() {
generates('(a OR b) AND c AND d'),
);
});

test('dialect-specific custom expression', () {
final expr = CustomExpression.dialectSpecific({
SqlDialect.mariadb: 'mariadb',
SqlDialect.postgres: 'pg',
SqlDialect.sqlite: 'default',
});

expect(expr, generatesWithOptions('mariadb', dialect: SqlDialect.mariadb));
expect(expr, generatesWithOptions('pg', dialect: SqlDialect.postgres));
expect(expr, generatesWithOptions('default', dialect: SqlDialect.sqlite));
});
}
31 changes: 24 additions & 7 deletions drift/test/test_utils/matchers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,40 @@ void expectNotEquals(dynamic a, dynamic expected) {
/// matching [sql] and, optionally, the matching [variables].
Matcher generates(dynamic sql, [dynamic variables = isEmpty]) {
return _GeneratesSqlMatcher(
wrapMatcher(sql), wrapMatcher(variables), const DriftDatabaseOptions());
wrapMatcher(sql),
wrapMatcher(variables),
const DriftDatabaseOptions(),
SqlDialect.sqlite,
);
}

Matcher generatesWithOptions(dynamic sql,
{dynamic variables = isEmpty,
DriftDatabaseOptions options = const DriftDatabaseOptions()}) {
Matcher generatesWithOptions(
dynamic sql, {
dynamic variables = isEmpty,
DriftDatabaseOptions options = const DriftDatabaseOptions(),
SqlDialect dialect = SqlDialect.sqlite,
}) {
return _GeneratesSqlMatcher(
wrapMatcher(sql), wrapMatcher(variables), options);
wrapMatcher(sql),
wrapMatcher(variables),
options,
dialect,
);
}

class _GeneratesSqlMatcher extends Matcher {
final Matcher _matchSql;
final Matcher? _matchVariables;

final DriftDatabaseOptions options;
final SqlDialect dialect;

_GeneratesSqlMatcher(this._matchSql, this._matchVariables, this.options);
_GeneratesSqlMatcher(
this._matchSql,
this._matchVariables,
this.options,
this.dialect,
);

@override
Description describe(Description description) {
Expand Down Expand Up @@ -78,7 +95,7 @@ class _GeneratesSqlMatcher extends Matcher {
return false;
}

final ctx = stubContext(options: options);
final ctx = stubContext(options: options, dialect: dialect);
item.writeInto(ctx);

var matches = true;
Expand Down
21 changes: 14 additions & 7 deletions drift/test/test_utils/test_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,20 @@ DatabaseConnection createConnection(QueryExecutor executor,
streamQueries: streams ?? StreamQueryStore());
}

GenerationContext stubContext({DriftDatabaseOptions? options}) {
return GenerationContext(
options ?? const DriftDatabaseOptions(), _NullDatabase.instance);
GenerationContext stubContext({
DriftDatabaseOptions? options,
SqlDialect dialect = SqlDialect.sqlite,
}) {
final warnBefore = driftRuntimeOptions.dontWarnAboutMultipleDatabases;
driftRuntimeOptions.dontWarnAboutMultipleDatabases = true;
final database = _NullDatabase(_NullExecutor(dialect: dialect));
driftRuntimeOptions.dontWarnAboutMultipleDatabases = warnBefore;

return GenerationContext(options ?? const DriftDatabaseOptions(), database);
}

class _NullDatabase extends GeneratedDatabase {
static final instance = _NullDatabase();

_NullDatabase() : super(_NullExecutor());
_NullDatabase([QueryExecutor? e]) : super(e ?? _NullExecutor());

@override
Iterable<TableInfo<Table, dynamic>> get allTables =>
Expand All @@ -63,7 +68,9 @@ class _NullDatabase extends GeneratedDatabase {

class _NullExecutor extends Fake implements QueryExecutor {
@override
SqlDialect get dialect => SqlDialect.sqlite;
final SqlDialect dialect;

_NullExecutor({this.dialect = SqlDialect.sqlite});
}

class CustomTable extends Table with TableInfo<CustomTable, void> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

#include "generated_plugin_registrant.h"

#include <sqlcipher_flutter_libs/sqlite3_flutter_libs_plugin.h>

void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) sqlcipher_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlcipher_flutter_libs_registrar);
}
1 change: 1 addition & 0 deletions examples/encryption/linux/flutter/generated_plugins.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#

list(APPEND FLUTTER_PLUGIN_LIST
sqlcipher_flutter_libs
)

list(APPEND FLUTTER_FFI_PLUGIN_LIST
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import FlutterMacOS
import Foundation

import path_provider_macos
import path_provider_foundation
import sqlcipher_flutter_libs

func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

#include "generated_plugin_registrant.h"

#include <sqlcipher_flutter_libs/sqlite3_flutter_libs_plugin.h>

void RegisterPlugins(flutter::PluginRegistry* registry) {
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#

list(APPEND FLUTTER_PLUGIN_LIST
sqlcipher_flutter_libs
)

list(APPEND FLUTTER_FFI_PLUGIN_LIST
Expand Down

0 comments on commit 8122ae3

Please sign in to comment.