A seção SQL fornece um banco de dados SQLite dedicado para cada projeto. Você pode criar tabelas, índices e visualizações, editar dados manualmente, escrever qualquer consulta e acessar o banco de dados diretamente do seu fluxo de trabalho. É um SQLite completo, com sintaxe sem restrições: tudo o que é suportado pelo SQLite também funciona aqui.

O banco de dados SQL é armazenado separadamente das tabelas na seção Tabelas. Alterações feitas em um não afetam o outro.

Como abrir

Projeto → Tabelas → clique em SQL à direita de Adicionar tabela.

Para retornar à lista de tabelas, clique na seta no cabeçalho da página.

A seção SQL está disponível para membros da equipe com permissão para editar tabelas. Usuários com acesso somente leitura podem ver a estrutura do banco de dados, mas não podem acessar seus dados ou consultas.

Estrutura do banco de dados

A árvore do banco de dados é exibida à direita. Ela contém tabelas com suas colunas e índices, seguidas por visualizações. Cada coluna mostra seu tipo de dados, colunas de chave primária são marcadas com um ícone de chave, e os índices exibem o atributo UNIQUE e suas colunas associadas.

Todas as ações relacionadas à estrutura estão disponíveis no menu do nó: clique com o botão direito em um nó, clique no ícone que aparece ao passar o mouse, ou use o botão + acima da árvore.

Ações
Banco de dados criar tabela, criar visualização, atualizar, baixar banco de dados
Tabela abrir, adicionar coluna, adicionar índice, renomear, DDL, atualizar, excluir
Coluna renomear, excluir
Índice DDL, excluir
Visualização abrir, DDL, excluir

Criar uma tabela. Especifique o nome da tabela e as colunas: nome, tipo, valor padrão, PK e NOT NULL. Você pode selecionar um tipo de dados nas sugestões ou inserir o seu próprio. Se você marcar várias colunas como PK, elas formarão uma chave primária composta.

DDL exibe a instrução CREATE do objeto no console. Isso é útil para copiar sua estrutura ou recriá-la em outro projeto.

Os botões acima da árvore permitem criar objetos, atualizar o banco de dados, mostrar ou ocultar o console, visualizar o DDL da tabela selecionada, baixar o banco de dados ou limpar o banco de dados.

Dados da tabela

Clique em uma tabela na árvore do banco de dados para abrir seus dados. A grade funciona de forma semelhante a uma planilha na seção Tabelas:

  • Edite uma célula clicando duas vezes nela. Pressione Enter para salvar ou Esc para cancelar. O valor é gravado no banco de dados imediatamente.
  • Linhas. Clique em + para adicionar uma linha vazia ou para excluir as linhas selecionadas. Clique no número da linha na primeira coluna para selecioná-la. Use Shift ou Cmd/Ctrl para selecionar várias linhas.
  • Os valores NULL são exibidos como NULL. Limpar uma célula grava uma string vazia no banco de dados. Para gravar um valor NULL, use uma consulta.
  • Os campos WHERE e ORDER BY acima da grade aceitam condições SQL e expressões de ordenação. Insira uma expressão e pressione Enter. O campo ORDER BY tem precedência sobre a ordenação aplicada através do menu da coluna.
  • Menu da coluna (o ícone no cabeçalho da coluna): ordenar de forma crescente ou decrescente, ou filtrar por substring.
  • Os dados são carregados conforme você rola, em lotes de 100 linhas. O contador à direita mostra o intervalo atual e o número total de linhas.
  • As visualizações são somente leitura.

Console

Clique no botão </> acima da árvore do banco de dados para abrir o console, que inclui um editor de consultas com realce de sintaxe e os resultados das consultas.

  • Execute uma consulta usando o botão ou Ctrl+Enter (Cmd+Enter no Mac).
  • Você pode executar várias consultas separadas por ;. O resultado exibe as linhas retornadas pela última consulta que produziu dados, juntamente com o número total de linhas afetadas.
  • Os erros do SQLite são exibidos como estão. Ao executar várias consultas, o número da consulta é adicionado à mensagem de erro: [2] no such table: ....
  • Favoritos. Clique em Adicionar aos favoritos para salvar a consulta atual com um nome. As consultas salvas aparecem como chips acima do editor: clique em um para carregar a consulta ou clique no X para excluí-lo. Os favoritos são armazenados no seu navegador separadamente para cada projeto.
  • O texto da sua última consulta é preservado entre sessões.

Baixar e limpar o banco de dados

Baixar banco de dados baixa o banco de dados inteiro como project_<id>_sql.sqlite3. Você pode abri-lo com qualquer aplicativo compatível com SQLite, transferi-lo para outro projeto ou usá-lo fora do Mavibot.

Limpar banco de dados exclui todas as tabelas e dados da seção SQL. Esta ação não pode ser desfeita e requer que você digite uma palavra de confirmação. As tabelas na seção Tabelas não são afetadas.

Funções de calculadora

Duas funções de calculadora permitem acessar o banco de dados SQL do seu fluxo de trabalho. Ambas estão disponíveis nas sugestões do editor e são reconhecidas pelo assistente.

sql(query, params=null, strict=true)

Executa uma consulta.

Consulta Valor de retorno
Consulta com resultado (SELECT, RETURNING, PRAGMA) Lista JSON de linhas, com cada linha representada como um objeto: [{"id": 1, "name": "Anna"}, ...]
Consulta sem resultado (INSERT, UPDATE, DELETE) Número de linhas afetadas
CREATE, DROP e outras alterações de esquema 0
Erro String ERROR: <mensagem de erro do SQLite>

Exemplo:

rows = sql("SELECT name, phone FROM clients WHERE city = ?", [city])
n = sql("UPDATE clients SET status = :s WHERE id = :id", {"s": "vip", "id": client_id})

sql_value(query, params=null, strict=true)

Funciona como sql, mas retorna um único valor: a primeira coluna da primeira linha do resultado.

Se não houver linhas, nenhum resultado ou o valor for NULL, retorna uma string vazia.

total = sql_value("SELECT count(*) FROM clients")
name = sql_value("SELECT name FROM clients WHERE id = ?", [client_id])

Parâmetros

params passa valores para a consulta separadamente do texto da consulta: use um array JSON para placeholders ? ou um objeto JSON para placeholders :name. Dentro de [...] e {...}, as variáveis são escritas como nomes de variáveis simples:

[client_id], não [#{client_id}].

Passe quaisquer valores recebidos de um cliente através de params, como nome, número de telefone ou texto da mensagem. Um valor concatenado diretamente no texto da consulta pode modificar a própria consulta.

Modo estrito

Por padrão, strict=true: a função aceita exatamente uma consulta e não permite comentários no texto da consulta. Isso impede que um valor recebido de uma mensagem de cliente anexe uma segunda consulta ou trunque o restante da consulta original.

Defina strict=false para remover essa restrição, por exemplo, ao executar várias consultas separadas por ;.

Limites

Limite Valor
Tempo de execução para uma única consulta ou lote de consultas 5 segundos
Linhas retornadas até 1.000; linhas adicionais não são retornadas
Comprimento do texto da consulta 64 KB
Tamanho do banco de dados 200 MB; uma vez excedido, apenas leitura e exclusão de dados estão disponíveis

Os únicos comandos proibidos são aqueles que acessam recursos fora do banco de dados do projeto: ATTACH com um caminho de arquivo e VACUUM INTO.

Todo o resto, incluindo VACUUM, PRAGMA e transações padrão, é suportado.