diff --git a/typed_sql/lib/src/dialect/mysql_dialect.dart b/typed_sql/lib/src/dialect/mysql_dialect.dart index f42d4ab4..cf0490b9 100644 --- a/typed_sql/lib/src/dialect/mysql_dialect.dart +++ b/typed_sql/lib/src/dialect/mysql_dialect.dart @@ -240,7 +240,7 @@ final class _MysqlSqlDialect extends SqlDialect { /// Example: 'my string' -> '`my string`' /// /// Throws if [name] cannot be safely escaped. -String escape(String name) => '`$name`'; // TODO: escape ` +String escape(String name) => '`${name.replaceAll('`', '``')}`'; abstract class SqlContext { String addParameter(Object? value); diff --git a/typed_sql/test/dialect/mysql_escape_test.dart b/typed_sql/test/dialect/mysql_escape_test.dart new file mode 100644 index 00000000..3b930b28 --- /dev/null +++ b/typed_sql/test/dialect/mysql_escape_test.dart @@ -0,0 +1,18 @@ +import 'package:test/test.dart'; +import 'package:typed_sql/src/dialect/mysql_dialect.dart'; + +void main() { + group('MySQL escape', () { + test('simple name', () { + expect(escape('my_table'), '`my_table`'); + }); + + test('name with backtick', () { + expect(escape('my`table'), '`my``table`'); + }); + + test('multiple backticks', () { + expect(escape('`a``b`'), '```a````b```'); + }); + }); +}