Acrescentar uma coluna com uma migração
Tradução automática
Esta página foi traduzida automaticamente do inglês e ainda não foi revisada por um falante nativo; correções são bem-vindas no GitHub. Se algo não bater, vale o original em inglês. O código e os resultados são os mesmos do original, importados dos arquivos testados.
Tarefa: os produtos precisam de uma contagem de estoque, e o banco já existe.
# Recipe: change the schema with a new migration, never by editing an old one.
paths:
components: ./components
migrations: ./migrations
datasources:
db:
driver: sqlite
database: ./data/shop.dbA primeira migração criou a tabela:
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
INSERT INTO products (name) VALUES ('Mug'), ('Sticker');A mudança é um segundo arquivo. As migrações rodam em ordem, cada uma uma vez, cada uma na sua própria transação; uma migração já aplicada nunca é editada:
-- Rows that already exist get the default.
ALTER TABLE products ADD COLUMN stock INTEGER NOT NULL DEFAULT 0;
UPDATE products SET stock = 12 WHERE name = 'Mug';quantum migrate up<q:component name="Products">
<q:query name="products" datasource="db">
SELECT name, stock FROM products ORDER BY name
</q:query>
<ui:window title="Products">
<ui:table source="{products}">
<ui:column key="name" label="Name" />
<ui:column key="stock" label="In stock" />
</ui:table>
</ui:window>
</q:component>Cada teste começa de um banco construído pelas migrações, então o teste vê o esquema que uma instalação nova recebe:
<q:test name="both migrations ran, in order" page="/">
<test:visit />
<test:expect text="In stock" />
<test:expect table="products" count="1" where="name = 'Mug' AND stock = 12" />
<test:expect table="products" count="1" where="name = 'Sticker' AND stock = 0" />
</q:test>tests/stock.test.q
PASS both migrations ran, in order
1 passed, 0 failedPrefere escrever o esquema que você quer e deixar o Quantum escrever a migração? Veja quantum migrate plan em Project Structure (em inglês). Veja DB-6 e DB-8.