Scheman
SQL schema parser.
Usage
Create diff from 2 schema files.
require "scheman"
before = "CREATE TABLE `table1` (\n `column1` INTEGER(11) PRIMARY KEY NOT NULL AUTO INCREMENT,\n `column2` DATETIME DEFAULT NOW()\n);\n\nCREATE TABLE `table2` (\n `column1` INTEGER(11) NOT NULL AUTO INCREMENT,\n PRIMARY KEY (`column1`)\n);\n"
after = "CREATE TABLE `table1` (\n `column1` CHAR(11) NOT NULL AUTO INCREMENT,\n `column2` DATETIME DEFAULT CURRENT_TIMESTAMP(),\n `column3` VARCHAR(255) NOT NULL DEFAULT \"a\",\n PRIMARY KEY (`column2`)\n);\n\nCREATE TABLE `table3` (\n `column1` INTEGER(11) NOT NULL AUTO INCREMENT,\n PRIMARY KEY (`column1`)\n);\n"
puts Scheman::Diff.new(before: before, after: after, type: "mysql")
The result would be the following:
BEGIN;
SET foreign_key_checks=0;
CREATE TABLE `table3` (
`column1` INTEGER(11) NOT NULL AUTO INCREMENT,
PRIMARY KEY (`column1`)
);
ALTER TABLE `table1` ADD COLUMN `column3` VARCHAR(255) NOT NULL DEFAULT "a",
CHANGE COLUMN `column1` CHAR(11) NOT NULL AUTO INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY `column2`;
DROP TABLE `table2`;
SET foreign_key_checks=1;
COMMIT;