Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(refactor) Improve escaping by using library #531

Merged
merged 3 commits into from
May 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
lists:
dependency: transitive
description:
name: lists
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
logging:
dependency: transitive
description:
Expand Down Expand Up @@ -429,6 +436,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
strings:
dependency: transitive
description:
name: strings
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
synchronized:
dependency: transitive
description:
Expand Down Expand Up @@ -464,6 +478,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
unicode:
dependency: transitive
description:
name: unicode
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.0"
vector_math:
dependency: transitive
description:
Expand Down
21 changes: 21 additions & 0 deletions floor/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
lists:
dependency: transitive
description:
name: lists
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
logging:
dependency: transitive
description:
Expand Down Expand Up @@ -429,6 +436,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
strings:
dependency: transitive
description:
name: strings
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
synchronized:
dependency: transitive
description:
Expand Down Expand Up @@ -464,6 +478,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
unicode:
dependency: transitive
description:
name: unicode
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.0"
vector_math:
dependency: transitive
description:
Expand Down
3 changes: 3 additions & 0 deletions floor/test/integration/dao/person_dao.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ abstract class PersonDao {
@Query('SELECT * FROM person WHERE custom_name LIKE :name')
Future<List<Person>> findPersonsWithNamesLike(String name);

@Query("SELECT * FROM person WHERE custom_name == ''")
Future<List<Person>> findPersonsWithEmptyName();

@Insert(onConflict: OnConflictStrategy.replace)
Future<void> insertPerson(Person person);

Expand Down
12 changes: 12 additions & 0 deletions floor/test/integration/database_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,18 @@ void main() {

expect(actual, equals(person));
});

test("query with ''", () async {
final person = Person(1, 'Frank');
final personNoName = Person(2, '');
await personDao.insertPerson(person);
await personDao.insertPerson(personNoName);

final actual = await personDao.findPersonsWithEmptyName();

// find (only) personNoName
expect(actual, equals([personNoName]));
});
});

group('transaction', () {
Expand Down
5 changes: 3 additions & 2 deletions floor_generator/lib/misc/extension/string_extension.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'package:strings/strings.dart';

extension StringExtension on String {
/// Returns a copy of this string having its first letter lowercased, or the
/// original string, if it's empty or already starts with a lower case letter.
Expand Down Expand Up @@ -48,8 +50,7 @@ extension NullableStringExtension on String? {
if (this == null) {
return 'null';
} else {
//TODO escape correctly
return "'$this'";
return "'${escape(this!)}'";
}
}
}
15 changes: 8 additions & 7 deletions floor_generator/lib/writer/database_writer.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:code_builder/code_builder.dart';
import 'package:floor_generator/misc/annotation_expression.dart';
import 'package:floor_generator/misc/extension/string_extension.dart';
import 'package:floor_generator/value_object/database.dart';
import 'package:floor_generator/value_object/entity.dart';
import 'package:floor_generator/writer/writer.dart';
Expand Down Expand Up @@ -68,18 +69,18 @@ class DatabaseWriter implements Writer {
}

Method _generateOpenMethod(final Database database) {
final createTableStatements =
_generateCreateTableSqlStatements(database.entities)
.map((statement) => "await database.execute('$statement');")
.join('\n');
final createTableStatements = _generateCreateTableSqlStatements(
database.entities)
.map((statement) => 'await database.execute(${statement.toLiteral()});')
.join('\n');
final createIndexStatements = database.entities
.map((entity) => entity.indices.map((index) => index.createQuery()))
.expand((statements) => statements)
.map((statement) => "await database.execute('$statement');")
.map((statement) => 'await database.execute(${statement.toLiteral()});')
.join('\n');
final createViewStatements = database.views
.map((view) => view.getCreateViewStatement())
.map((statement) => "await database.execute('''$statement''');")
.map((view) => view.getCreateViewStatement().toLiteral())
.map((statement) => 'await database.execute($statement);')
.join('\n');

final pathParameter = Parameter((builder) => builder
Expand Down
28 changes: 28 additions & 0 deletions floor_generator/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "8.0.5"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
Expand Down Expand Up @@ -232,6 +239,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
lists:
dependency: transitive
description:
name: lists
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
logging:
dependency: transitive
description:
Expand Down Expand Up @@ -393,6 +407,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
strings:
dependency: "direct main"
description:
name: strings
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
term_glyph:
dependency: transitive
description:
Expand Down Expand Up @@ -435,6 +456,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
unicode:
dependency: transitive
description:
name: unicode
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.0"
vm_service:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions floor_generator/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies:
path: ../floor_annotation/
meta: ^1.3.0
source_gen: ^1.0.0
strings: ^0.2.1

dev_dependencies:
build_test: ^2.1.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ void main() {
expect('A'.toLiteral(), equals("'A'"));
});

test('Escaping \'', () {
expect("a'd'b".toLiteral(), equals("'a\\'d\\'b'"));
});

test('Escaping \n', () {
expect('A\ns\t'.toLiteral(), equals("'A\\ns\\t'"));
});

test('long-string', () {
final actual = 'The quick brown fox jumps over the lazy dog'.toLiteral();
expect(actual, equals("'The quick brown fox jumps over the lazy dog'"));
Expand Down
2 changes: 1 addition & 1 deletion floor_generator/test/writer/database_writer_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ void main() {
'CREATE TABLE IF NOT EXISTS `Person` (`id` INTEGER NOT NULL, `name` TEXT NOT NULL, PRIMARY KEY (`id`))');

await database.execute(
'''CREATE VIEW IF NOT EXISTS `names` AS SELECT custom_name as name FROM person''');
'CREATE VIEW IF NOT EXISTS `names` AS SELECT custom_name as name FROM person');

await callback?.onCreate?.call(database, version);
},
Expand Down