expressive-analytics/deep-thought-migration

此包已被废弃且不再维护。未建议替代包。

使用 Deep Thought 实现数据库无关迁移的支持。

v1.5.6 2018-02-12 23:11 UTC

README

创建新的迁移

使用当前时间戳命名文件来创建新的迁移文件。

> vendor/bin/dtql mark
ADD COL table.col type;

Migration written to '18284744.dtql`.

添加到现有迁移

> vendor/bin/dtql mark -f 18284744.dtql
ADD COL table.col type;
ADD COL table2.col2 type2;

Migration written to '18284744.dtql'

更新到最新模式

> vendor/bin/dtql migrate --dsn "sqlite://my_sqlite.db"
Updated to version 18284744.

迁移到特定版本

> vendor/bin/dtql migrate --dsn "sqlite://my_sqlite.db" 18374591.dtql
Reverted to version 18374591.

转储当前模式

对于创建单元测试的模式尤其重要。

> vendor/bin/dtql dump --schema --dsn="sqlite://dt.db" --sql="mysql"

转储当前数据

> vendor/bin/dtql dump --data --dsn="sqlite://dt.db" --sql="mysql"

DTQL 定义

添加注释

-- this is a comment

创建表

ADD TAB schema.my_table (
 id primary,
 name text,
 created_at timestamp,
 "count" int DEFAULT 1,
 price_usd double
);

数据类型

为了保持所有存储格式的兼容性,我们建议以下数据类型

类型 描述
主要 主键,整数类型,自动递增
时间戳 日期/时间格式(如有可用,包含时区)
int 整数值
double 十进制值
text 文本类型
* 字面类型--可能引起存储兼容性问题

类型也可以通过指定 'DEFAULT val' 后跟默认值。

移动表

MV TAB schema.my_table > new_schema.new_table;

删除表

RM TAB schema.my_table;

添加列

您可以指定默认值或外键约束。

ADD COL table.col type;

修改列

为了使操作可逆,您必须提供原始类型。

MV COL table.col type > table.new-col new-type;

删除列

为了使操作可逆,需要提供类型。

RM COL table.col type;

添加索引/外键

严格的 外键 (FK!) 将在支持的情况下引起级联删除。

您可以使用 'ISA' 创建数据子类关系。数据子类在语义上与外键不同,可用于在 DTModels 中创建 is_a 清单。

ADD FK wheels.bus_id ~ buses.id;
ADD FK! bees.hive_id ~ hive.id;
ADD ISA employees.contact_id ~ contacts.id;
ADD IDX table.col;

删除索引/外键

RM FK! bees.hive_id ~ hive.id;
RM ISA employees.contact.id ~ contacts.id;
RM IDX table.col;

语法高亮

您可以在以下链接找到最新的 Atom 语法高亮包:[https://github.com/expressive-analytics/atom-language-dtql](https://github.com/expressive-analytics/atom-language-dtql)