Fix syntax error in generated code for queries

This commit is contained in:
Simon Binder 2022-10-19 23:35:54 +02:00
parent 2ec63749f8
commit e3b6c56f08
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
9 changed files with 1759 additions and 637 deletions

View File

@ -686,4 +686,10 @@ abstract class _$Database extends GeneratedDatabase {
$TodoCategoryItemCountView(this);
late final $TodoItemWithCategoryNameViewView customViewName =
$TodoItemWithCategoryNameViewView(this);
@override
Iterable<TableInfo<Table, dynamic>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities =>
[todoItems, todoCategories, todoCategoryItemCount, customViewName];
}

View File

@ -14,6 +14,11 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
);
}
@override
Iterable<TableInfo<Table, dynamic>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [];
@override
DriftDatabaseOptions get options =>
const DriftDatabaseOptions(storeDateTimeAsText: true);

File diff suppressed because it is too large Load Diff

View File

@ -85,12 +85,15 @@ class FileAnalyzer {
} else if (element is DriftView) {
final source = element.source;
if (source is SqlViewSource) {
final stmt = parsedFile.statements
.whereType<CreateViewStatement>()
.firstWhere(
(e) => e.firstPosition == element.declaration.offset);
source.parsedStatement = stmt;
source.parsedStatement =
parsedFile.findStatement(element.declaration);
}
} else if (element is DriftTrigger) {
element.parsedStatement =
parsedFile.findStatement(element.declaration);
} else if (element is DriftIndex) {
element.parsedStatement =
parsedFile.findStatement(element.declaration);
}
}
}
@ -152,3 +155,11 @@ class _OptionsAndRequiredVariables {
_OptionsAndRequiredVariables(this.options, this.variables);
}
extension on DriftFile {
Node findStatement<Node extends AstNode>(DriftDeclaration declaration) {
return statements
.whereType<Node>()
.firstWhere((e) => e.firstPosition == declaration.offset);
}
}

View File

@ -1,3 +1,5 @@
import 'package:sqlparser/sqlparser.dart';
import 'element.dart';
import 'table.dart';
@ -30,4 +32,10 @@ class DriftIndex extends DriftSchemaElement {
@override
Iterable<DriftElement> get references => [if (table != null) table!];
/// The parsed `CREATE VIEW` statement from [createView].
///
/// This node is not serialized and only set in the late-state, local file
/// analysis.
CreateIndexStatement? parsedStatement;
}

View File

@ -1,4 +1,5 @@
import 'package:drift/drift.dart';
import 'package:sqlparser/sqlparser.dart';
import 'element.dart';
import 'query.dart';
@ -32,4 +33,10 @@ class DriftTrigger extends DriftSchemaElement {
@override
String get dbGetterName => DriftSchemaElement.dbFieldName(id.name);
/// The parsed `CREATE VIEW` statement from [createView].
///
/// This node is not serialized and only set in the late-state, local file
/// analysis.
CreateTriggerStatement? parsedStatement;
}

View File

@ -80,24 +80,27 @@ class DatabaseWriter {
returnType: tableClassName,
code: '$tableClassName(this)',
);
} /* else if (entity is DriftTrigger) {
} else if (entity is DriftTrigger) {
final sql = scope.sqlCode(entity.parsedStatement!);
writeMemoizedGetter(
buffer: dbScope.leaf().buffer,
getterName: entity.dbGetterName,
returnType: 'Trigger',
code: 'Trigger(${asDartLiteral(entity.createSql(scope.options))}, '
'${asDartLiteral(entity.displayName)})',
code: 'Trigger(${asDartLiteral(sql)}, '
'${asDartLiteral(entity.schemaName)})',
);
} else if (entity is DriftIndex) {
final sql = scope.sqlCode(entity.parsedStatement!);
writeMemoizedGetter(
buffer: dbScope.leaf().buffer,
getterName: entity.dbGetterName,
returnType: 'Index',
code: 'Index(${asDartLiteral(entity.displayName)}, '
'${asDartLiteral(entity.createSql(scope.options))})',
code: 'Index(${asDartLiteral(entity.schemaName)}, '
'${asDartLiteral(sql)})',
);
} */
else if (entity is DriftView) {
} else if (entity is DriftView) {
writeMemoizedGetter(
buffer: dbScope.leaf().buffer,
getterName: entity.dbGetterName,
@ -130,7 +133,7 @@ class DatabaseWriter {
// Write List of tables
final schemaScope = dbScope.leaf();
/*
schemaScope
..write(
'@override\nIterable<TableInfo<Table, dynamic>> get allTables => ')
@ -139,17 +142,16 @@ class DatabaseWriter {
..write('=> [');
schemaScope
..write(db.entities.map((e) {
if (e is SpecialQuery) {
final sql = e.formattedSql(scope.options);
return 'OnCreateQuery(${asDartLiteral(sql)})';
}
..write(db.references.map((e) {
// if (e is SpecialQuery) {
// final sql = e.formattedSql(scope.options);
// return 'OnCreateQuery(${asDartLiteral(sql)})';
// }
return entityGetters[e];
}).join(', '))
// close list literal and allSchemaEntities getter
..write('];\n');
*/
final updateRules = FindStreamUpdateRules(db).identifyRules();
if (updateRules.rules.isNotEmpty) {

View File

@ -156,7 +156,8 @@ class QueryWriter {
final dartLiteral = asDartLiteral(specialName ?? column.name);
final method = column.nullable ? 'readNullable' : 'read';
final rawDartType = dartTypeNames[column.sqlType];
final rawDartType =
_emitter.dartCode(AnnotatedDartCode([dartTypeNames[column.sqlType]!]));
var code = 'row.$method<$rawDartType>($dartLiteral)';
final converter = column.typeConverter;

View File

@ -163,6 +163,10 @@ abstract class _NodeOrWriter {
return buffer.toString();
}
String sqlCode(sql.AstNode node) {
return SqlWriter(writer.options, escapeForDart: false).writeSql(node);
}
}
abstract class _Node extends _NodeOrWriter {