write method
Implementation
void write(
StringSink sink, {
bool lockTables = true,
}) {
checkTables();
sink.write("""
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
""");
for (final tbl in _tables) {
sink.writeln("""
--
-- Dumping data for table `${tbl.name}`
--""");
if (lockTables) {
sink.writeln("LOCK TABLES `${tbl.name}` WRITE;");
}
if (tbl.hasColumnsWithRows) {
// insert data
final colNames = tbl.keys.toList();
sink.write("INSERT INTO `${tbl.name}` (");
sink.write(colNames.joinToString(transform: (e) => "`$e`"));
sink.writeln(") VALUES");
// ([\\'"]{1})
final strEscapeRegex = RegExp("([\\\\'\"]{1})");
final rowCount = tbl.first.value.length;
for (var row = 0; row < rowCount; row++) {
sink.write("(");
for (final name in colNames) {
final col = tbl[name];
final val = col[row];
if (null == val) {
sink.write("NULL");
} else {
final escaped = val.replaceAllMapped(
strEscapeRegex,
(match) => "\\${match[0]!}",
);
sink.write(col.encloseInSingleQuotes ? "'$escaped'" : escaped);
}
if (name != colNames.last) {
sink.write(", ");
}
}
sink.write(")");
if (row == rowCount - 1) {
sink.writeln(";");
} else {
sink.writeln(",");
}
}
}
if (lockTables) {
sink.writeln("UNLOCK TABLES;");
}
}
sink.write("""
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
""");
}