Skip to content

Instantly share code, notes, and snippets.

@Piterden
Last active May 11, 2019 23:05
Show Gist options
  • Select an option

  • Save Piterden/ad22a1d4163dbb8819f759e23e6165be to your computer and use it in GitHub Desktop.

Select an option

Save Piterden/ad22a1d4163dbb8819f759e23e6165be to your computer and use it in GitHub Desktop.
Generate MySQL dump from JSON with Node
const fs = require('fs');
var wordsSql = `-- MySQL dump 10.13 Distrib 5.7.24, for Linux (x86_64)
--
-- Host: localhost Database: crossword
-- ------------------------------------------------------
-- Server version 5.7.24-0ubuntu0.16.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!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 */;
--
-- Table structure for table \`default_crosswords_words\`
--
DROP TABLE IF EXISTS \`default_crosswords_words\`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE \`default_crosswords_words\` (
\`id\` int(10) unsigned NOT NULL AUTO_INCREMENT,
\`sort_order\` int(11) DEFAULT NULL,
\`created_at\` datetime NOT NULL,
\`created_by_id\` int(11) DEFAULT NULL,
\`updated_at\` datetime DEFAULT NULL,
\`updated_by_id\` int(11) DEFAULT NULL,
\`word\` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (\`id\`)
) ENGINE=InnoDB AUTO_INCREMENT={INCR_FOR_PASTE} DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table \`default_crosswords_words\`
--
LOCK TABLES \`default_crosswords_words\` WRITE;
/*!40000 ALTER TABLE \`default_crosswords_words\` DISABLE KEYS */;
INSERT INTO \`default_crosswords_words\` VALUES `;
cluesSql = `-- MySQL dump 10.13 Distrib 5.7.24, for Linux (x86_64)
--
-- Host: localhost Database: crossword
-- ------------------------------------------------------
-- Server version 5.7.24-0ubuntu0.16.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!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 */;
--
-- Table structure for table \`default_repeater_clues\`
--
DROP TABLE IF EXISTS \`default_repeater_clues\`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE \`default_repeater_clues\` (
\`id\` int(10) unsigned NOT NULL AUTO_INCREMENT,
\`sort_order\` int(11) DEFAULT NULL,
\`created_at\` datetime NOT NULL,
\`created_by_id\` int(11) DEFAULT NULL,
\`updated_at\` datetime DEFAULT NULL,
\`updated_by_id\` int(11) DEFAULT NULL,
\`name\` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
\`word_id\` int(11) NOT NULL,
PRIMARY KEY (\`id\`)
) ENGINE=InnoDB AUTO_INCREMENT={INCR_FOR_PASTE} DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table \`default_repeater_clues\`
--
LOCK TABLES \`default_repeater_clues\` WRITE;
/*!40000 ALTER TABLE \`default_repeater_clues\` DISABLE KEYS */;
INSERT INTO \`default_repeater_clues\` VALUES `;
var wordId = 1;
var clueId = 1;
fs.readdirSync('.').filter((file) => file.endsWith('json')).forEach((file) => {
var data = require(`./${file.replace('.json', '')}`)
var clues = [];
if (!Array.isArray(data)) {
return;
}
data.forEach((w) => {
wordsSql += `(${wordId},${wordId},'2019-01-06 08:48:01',NULL,'2019-01-06 08:48:01',NULL,'${w.answer}')`;
wordsSql += wordId % 4000 === 0
? `;
INSERT INTO \`default_crosswords_words\` VALUES `
: ',';
w.clues.forEach((c) => {
cluesSql += `(${clueId},${clueId},'2019-01-06 08:48:02',NULL,'2019-01-06 08:48:02',NULL,'${c.replace(/'/g, '"')}',${wordId})`;
cluesSql += clueId % 5000 === 0
? `;
INSERT INTO \`default_repeater_clues\` VALUES `
: ',';
clueId++;
});
wordId++;
});
})
cluesSql = cluesSql.replace(/,$/, '').replace('{INCR_FOR_PASTE}', clueId)
wordsSql = wordsSql.replace(/,$/, '').replace('{INCR_FOR_PASTE}', wordId)
wordsSql += `;
/*!40000 ALTER TABLE \`default_crosswords_words\` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-01-11 0:34:35
`;
cluesSql += `;
/*!40000 ALTER TABLE \`default_repeater_clues\` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-01-11 0:35:18
`;
fs.writeFileSync('words.sql', wordsSql);
fs.writeFileSync('clues.sql', cluesSql);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment