using backticks instead of double quotes to escape and adding bool check constraint for mariadb

DO NOT MERGE THIS since Column.escapedName is hardcoded for mariadb dialect!
This commit is contained in:
BananaMasterz 2023-07-19 18:17:48 +03:00
parent 3fe50ffc69
commit d2c3532c3f
5 changed files with 17 additions and 8 deletions

View File

@ -393,6 +393,8 @@ String escapeIfNeeded(String s, [SqlDialect dialect = SqlDialect.sqlite]) {
isKeyword |= additionalMariaDBKeywords.contains(inUpperCase);
}
if (isKeyword || _notInKeyword.hasMatch(s)) return '"$s"';
if (isKeyword || _notInKeyword.hasMatch(s)) {
return dialect == SqlDialect.mariadb ? '`$s`' : '"$s"';
}
return s;
}

View File

@ -43,7 +43,7 @@ abstract class Column<T extends Object> extends Expression<T> {
/// In the past, this getter only used to add double-quotes when that is
/// really needed (for instance because [name] is also a reserved keyword).
/// For performance reasons, we unconditionally escape names now.
String get escapedName => '"$name"';
String get escapedName => '`$name`'; // mariadb backtick escape DOT NOT MERGE
}
/// A column that stores int values.

View File

@ -87,6 +87,8 @@ class GenerationContext {
void writeWhitespace() => buffer.write(' ');
/// Turns [columnName] into a safe SQL identifier by wrapping it in double
/// quotes.
String identifier(String columnName) => '"$columnName"';
/// quotes, or backticks depending on the dialect.
String identifier(String columnName) {
return dialect == SqlDialect.mariadb ? '`$columnName`' : '"$columnName"';
}
}

View File

@ -147,10 +147,13 @@ extension NameWithAlias on ResultSetImplementation<dynamic, dynamic> {
/// can be used in select statements, as it returns something like "users u"
/// for a table called users that has been aliased as "u".
String get tableWithAlias {
var dialect = attachedDatabase.executor.dialect;
if (aliasedName == entityName) {
return '"$entityName"';
return dialect == SqlDialect.mariadb ? '`$entityName`' : '"$entityName"';
} else {
return '"$entityName" "$aliasedName"';
return dialect == SqlDialect.mariadb
? '`$entityName` `$aliasedName`'
: '"$entityName" "$aliasedName"';
}
}
}

View File

@ -73,9 +73,11 @@ Map<SqlDialect, String> defaultConstraints(DriftColumn column) {
}
if (column.sqlType == DriftSqlType.bool) {
final name = '"${column.nameInSql}"';
final name = column.nameInSql;
dialectSpecificConstraints[SqlDialect.sqlite]!
.add('CHECK ($name IN (0, 1))');
.add('CHECK ("$name" IN (0, 1))');
dialectSpecificConstraints[SqlDialect.mariadb]!
.add('CHECK (`$name` IN (0, 1))');
}
for (final constraints in dialectSpecificConstraints.values) {