SQLite é uma biblioteca C de código-fonte aberto, multiplataforma, livre e pequena que implementa um mecanismo de banco de dados SQL autocontido, incorporável, transacional, sem servidor e com configuração zero. É o mecanismo de banco de dados SQL mais usado do mundo.
Recursos em resumo
Os principais recursos incluem suporte para transações isoladas, atômicas, duráveis e consistentes, implementação do SQL92, arquivos de banco de dados podem ser compartilhados livremente entre computadores, suporte a bancos de dados de até 2 terabytes, suporte a blobs e strings de tamanho gigabyte, pequeno código bem como uma API fácil de usar e muito simples (Application Programming Interface).
Além disso, o SQLite não requer configuração inicial ou administração adicional, permite que os desenvolvedores armazenem um banco de dados completo em um único arquivo de disco de plataforma cruzada, perfeito para usar formatos de arquivos de aplicativos, não tem dependências externas, vem com em ligações TCL (Tool Command Language) e documentação abrangente.
Ligações para várias outras linguagens de programação estão disponíveis separadamente. Seu código-fonte é bem comentado e vem com um CLI (Interface de Linha de Comando) autônomo que foi projetado a partir do offset a ser usado para a administração de bancos de dados SQLite.
Para que posso usá-lo?
O mecanismo de banco de dados SQLite pode ser usado para qualquer finalidade, pessoal ou comercial. Usos sugeridos para o SQLite incluem banco de dados para gadgets, banco de dados de sites, stand-in para um RDBMS (Sistema de Gerenciamento de Banco de Dados Relacional) corporativo, bem como formato de arquivo do aplicativo.
Sob o capô e sistemas operacionais suportados
A distribuição SQLite vem com um programa de acesso à linha de comando independente (sqlite) que pode ser usado para administrar um banco de dados SQLite e que serve como um exemplo de como usar a biblioteca SQLite. Está escrito inteiramente na linguagem de programação ANSI-C.
Os sistemas operacionais de desktop suportados incluem GNU / Linux, Mac OS X e Microsoft Windows. Os sistemas operacionais móveis suportados incluem o Android e o iOS. Ele foi testado com sucesso em plataformas de hardware de 32 e 64 bits e é facilmente transportável para outros sistemas operacionais.
O que há de novo nesta versão:
- Os destaques desta versão incluem suporte para UPSERT no estilo PostgreSQL e desempenho aprimorado, especialmente para consultas ORDEM POR LIMITE.
O que há de novo na versão:
- Aproveite os recursos de gravação atômica no sistema de arquivos F2FS, quando disponíveis, para sobrecarga de transação bastante reduzida. Atualmente, isso requer a opção de tempo de compilação SQLITE_ENABLE_BATCH_ATOMIC_WRITE.
- Permitir que os comandos ATTACH e DETACH funcionem dentro de uma transação.
- Permitir que as tabelas virtuais WITHOUT ROWID sejam graváveis se a PRIMARY KEY contiver exatamente uma coluna.
- O & quot; fsync () & quot; que ocorre depois que o cabeçalho é gravado em uma reinicialização do WAL agora usa as configurações de sincronização para pontos de verificação. Isso significa que ele usará um & quot; fullfsync & quot; no macs se o PRAGMA checkpoint_fullfsync estiver ativado.
- A função sqlite3_sourceid () tenta detectar se o código-fonte foi modificado do que está marcado no controle de versão e, se houver modificações, os últimos quatro caracteres do hash da versão serão mostrados como & quot; alt1 & quot; ou "alt2". O objetivo é detectar edições acidentais e / ou descuidadas. Um falsificador pode subverter esse recurso.
- Decodificação aprimorada de nomes de coluna para instruções CREATE TABLE AS com uma consulta agregada no lado direito.
- Menos & quot; stat () & quot; chamadas do sistema emitidas pelo unix VFS.
- Aprimorou a otimização LIKE para que funcione com uma cláusula ESCAPE.
- Aprimorado PRAGMA integrity_check e PRAGMA quick_check para detectar corrupção de linha obscura que eles estavam perdendo anteriormente. Atualize também ambos os pragmas para que eles retornem texto de erro em vez de SQLITE_CORRUPT ao encontrarem danos nos registros.
- O planejador de consultas agora prefere implementar subconsultas de cláusulas FROM usando co-rotinas, em vez de usar a otimização de nivelador de consulta. O suporte para o uso de co-rotinas para subconsultas não pode mais ser desativado.
- Passar informações sobre as restrições! =, IS, IS NOT, NULL e IS NULL no método xBestIndex das tabelas virtuais.
- Aprimorou a tabela virtual CSV para que ela aceite a última linha de entrada se o caractere final de nova linha estiver ausente.
- Remova o item "rascunho" raramente usado alocador de memória. Substitua-o pela configuração SQLITE_CONFIG_SMALL_MALLOC, que dá ao SQLite uma indicação de que grandes alocações de memória devem ser evitadas sempre que possível.
- Adicionada a tabela virtual de enxame à extensão de tabela virtual de união existente.
- Adicionada a tabela virtual sqlite_dbpage para fornecer acesso direto às páginas do arquivo de banco de dados. O código-fonte está embutido na fusão e é ativado usando a opção de tempo de compilação -DSQLITE_ENABLE_DBPAGE_VTAB.
- Adicione um novo tipo de tabela virtual fts5vocab - & quot; instance & quot; - que fornece acesso direto a um índice de texto completo do FTS5 no nível mais baixo possível.
- Remover uma chamada para rand_s () no Windows VFS, pois estava causando problemas no Firefox em alguns laptops mais antigos.
- O código-fonte src / shell.c para o shell da linha de comandos não está mais sob controle de versão. Esse arquivo agora é gerado como parte do processo de criação.
- Microoptimizações diversas reduzem o uso da CPU em cerca de 2,1%.
- Correções de bugs:
- Corrigir uma declaração assert () de falha descoberta pelo OSSFuzz. Bilhete cb91bf4290c211d
- Corrigir um vazamento de memória obscuro em sqlite3_result_pointer (). Bilhete 7486aa54b968e9b
- Evite um possível erro use-after-free adiando as redefinições de esquema até que o planejador de consulta tenha terminado a execução. Bilhete be436a7f4587ce5
- Use apenas índices-em-expressões para otimizar ORDER BY ou GROUP BY se COLLATE estiver correto. Bilhete e20dd54ab0e4383
- Corrigir uma falha de asserção que estava surgindo quando a expressão em um índice-em-expressões é realmente uma constante. Bilhete aa98619ad08ddca
- Corrigir uma falha de declaração que pode ocorrer após PRAGMA reverse_unordered_selects. Bilhete cb91bf4290c211d
- Corrija um segfault que pode ocorrer para consultas que usam funções com valor de tabela em uma subconsulta IN ou EXISTS. Bilhete b899b6042f97f5
- Corrigir um possível problema de estouro de inteiro ao compilar uma horrível expressão de tabela comum. Este foi outro problema descoberto pelo OSSFuzz. Check-in 6ee8cb6ae5.
- Correção de uma possível leitura fora do limite ao consultar um arquivo de banco de dados corrompido, um problema detectado por Natalie Silvanovich do Google Project Zero. Check-in 04925dee41a21f.
O que há de novo na versão 3.20.1:
- A versão do patch da versão 3.20.1 altera duas linhas de código na interface sqlite3_result_pointer () para corrigir um raro vazamento de memória.
O que há de novo na versão 3.9.2:
- O SQLite versão 3.9.2 é uma versão de correção que corrige dois bugs obscuros.
O que há de novo na versão 3.8.9:
- Os novos recursos desta versão incluem o comando PRAGMA index_xinfo, a interface sqlite3_status64 () e o comando ".dbinfo" do shell da linha de comandos.
O que há de novo na versão 3.8.8.2:
- O patch release 3.8.8.2 corrige um único problema menor: garante que a operação sqlite3_wal_checkpoint (TRUNCATE) sempre truncará o log write-ahead, mesmo que o log já tenha sido redefinido e não contenha nenhum novo conteúdo. Não está claro se isso é uma correção de bug ou um novo recurso.
- Algo como isso normalmente ocorreria no próximo lançamento programado regularmente, mas um usuário importante do SQLite precisava da mudança com pressa, por isso ficamos felizes em apressar o processo com esse patch.
- Não há razão para atualizar, a menos que você realmente precise do comportamento aprimorado de sqlite3_wal_checkpoint (TRUNCATE).
O que há de novo na versão 3.8.8.1:
- Corrigir um erro na lógica de classificação, presente desde a versão 3.8.4, que pode fazer com que a saída apareça na ordem errada em consultas que contenham uma cláusula ORDER BY, uma cláusula LIMIT e que tenham aproximadamente 60 ou mais colunas o conjunto de resultados. Bilhete f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- SHA1 para sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
O que há de novo na versão 3.8.8:
- Novos recursos:
- Adicionado o comando PRAGMA data_version que pode ser usado para determinar se um arquivo de banco de dados foi modificado por outro processo.
- Adicionada a opção SQLITE_CHECKPOINT_TRUNCATE à interface sqlite3_wal_checkpoint_v2 (), com aprimoramentos correspondentes ao wal_checkpoint da PRAGMA.
- Adicionada a interface sqlite3_stmt_scanstatus (), disponível somente quando compilada com SQLITE_ENABLE_STMT_SCANSTATUS.
- O sqlite3_table_column_metadata () é aprimorado para funcionar corretamente em tabelas WITHOUT ROWID e para verificar a existência de uma tabela se o parâmetro de nome da coluna for NULL. A interface agora também está incluída na construção por padrão, sem requerer a opção de tempo de compilação SQLITE_ENABLE_COLUMN_METADATA.
- Adicionada a opção de tempo de compilação SQLITE_ENABLE_API_ARMOR.
- Adicionada a opção de tempo de compilação SQLITE_REVERSE_UNORDERED_SELECTS.
- Adicionada a opção de tempo de compilação SQLITE_SORTER_PMASZ e a opção de hora de início SQLITE_CONFIG_PMASZ.
- Adicionada a opção SQLITE_CONFIG_PCACHE_HDRSZ a sqlite3_config (), o que torna mais fácil para os aplicativos determinarem a quantidade adequada de memória para uso com SQLITE_CONFIG_PAGECACHE.
- O número de linhas em uma cláusula VALUES não está mais limitado por SQLITE_LIMIT_COMPOUND_SELECT.
- Adicionada a extensão carregável eval.c que implementa uma função SQL eval () que avaliará recursivamente SQL.
- Melhorias no desempenho:
- Reduza o número de operações de memcpy () envolvidas no balanceamento de uma b-tree, para um aumento de 3,2% no desempenho geral.
- Melhorias nas estimativas de custo para a otimização de ignorar varredura.
- A otimização de indexação automática agora é capaz de gerar um índice parcial, se isso for apropriado.
- Correções de bugs:
- Garanta a durabilidade após uma perda de energia com "PRAGMA journal_mode = TRUNCATE" chamando fsync () logo após o truncamento do arquivo de diário.
- O planejador de consulta agora reconhece que qualquer coluna na tabela à direita de um LEFT JOIN pode ser NULL, mesmo que essa coluna tenha uma restrição NOT NULL. Evite tentar otimizar os testes NULL nesses casos. Correção para ticket 6f2222d550f5b0ee7ed.
- Certifique-se de que ORDER BY coloque linhas em ordem crescente, mesmo se o operador DISTINCT for implementado usando um índice decrescente. Correção para ticket c5ea805691bfc4204b1cb9e.
- Corrija as disputas de dados que podem ocorrer sob estresse ao executar com muitos encadeamentos no modo de cache compartilhado, onde alguns dos encadeamentos estão abrindo e fechando conexões.
- Corrigir erros de falha obscuros encontrados pelo lop confuso americano. Bilhete a59ae93ee990a55.
- Trabalhe com um erro do otimizador GCC (para o gcc 4.2.1 no MacOS 10.7) que fez com que a extensão R-Tree computasse resultados incorretos quando compilada com -O3.
- Outras alterações:
- Desative o uso da rotina strchrnul () da biblioteca C, a menos que esteja especificamente ativada usando a opção de tempo de compilação -DHAVE_STRCHRNULL.
- Melhorias na eficácia e precisão das funções de sugestão SQL likelihood (), likely () e improvável ().
- SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
- SHA1 para sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
O que há de novo na versão 3.8.7.4:
- Esta versão corrige adiciona um mutex que é requerido pelas mudanças do patch 3.8.7.3, mas foi acidentalmente omitido. O mutex não foi requerido por nenhum dos testes internos do SQLite, mas o Firefox falha sem ele. Casos de teste foram adicionados para garantir que o mutex nunca mais seja perdido.
O que há de novo na versão 3.8.7.3:
- Correção de bug: certifique-se de que os objetos KeyInfo armazenados em cache (uma abstração interna não visível para o aplicativo) não se tornem obsoletos ao operar no modo de cache compartilhado e frequentemente fechando e reabrindo algumas conexões de banco de dados enquanto deixa outras conexões de banco de dados abertas no mesmo cache aberto continuamente. Bilhete e4a18565a36884b00edf.
- Correção de bug: Reconheça que qualquer coluna na tabela à direita de um LEFT JOIN pode ser NULL, mesmo que a coluna tenha uma restrição NOT NULL. Não aplique otimizações que supõem que a coluna nunca seja NULL. Bilhete 6f2222d550f5b0ee7ed.
- SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
- SHA1 para sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
O que há de novo na versão 3.8.7.2:
- O principal motivo dessa liberação é aprimorar o comando ROLLBACK para permitir que as consultas em execução na mesma conexão de banco de dados continuem em execução, desde que o ROLLBACK não altere o esquema. Em todas as versões anteriores do SQLite, um ROLLBACK faria com que as consultas pendentes parassem imediatamente e retornassem SQLITE_ABORT ou SQLITE_ABORT_ROLLBACK. As consultas pendentes ainda serão anuladas se o ROLLBACK alterar o esquema do banco de dados, mas, a partir desta versão de correção, as consultas poderão continuar em execução se o esquema não estiver modificado.
- Além do aprimoramento ROLLBACK, este lançamento de patch também inclui correções para três bugs obscuros.
O que há de novo na versão 3.8.7.1:
- A principal razão para essa versão de correção de erros é resolver um problema com a atualização do valor de campos no final de uma tabela que foi adicionada usando ALTER TABLE ADD COLUMN. Este problema 1 apareceu pela primeira vez na versão 3.8.7.
- Outro aborrecimento menor na versão 3.8.7 foi o fato de que a versão Android tentou usar a função strchrnul () da biblioteca C padrão, mas essa função não está disponível no Android. As versões do Android tiveram que adicionar -DHAVE_STRCHRNUL = 0 para contornar o problema. Esse patch corrige isso para que o Android construa agora deve funcionar sem quaisquer alterações.
- A operação de PRAGMA journal_mode = TRUNCATE foi aprimorada para que invoque fsync () após truncar o arquivo de diário quando PRAGMA synchronous = FULL. Isso ajuda a preservar a durabilidade das transações no caso de uma perda de energia que ocorre logo após a confirmação.
- Finalmente, alguns problemas antigos e obscuros associados à execução de UPDATE e DELETE em VIEWs foram corrigidos.
O que há de novo na versão 3.8.7:
- A maioria das alterações da versão anterior foram micro-otimizações projetadas para ajudar o SQLite a rodar um pouco mais rápido. Cada otimização individual tem um impacto de desempenho imensamente pequeno. Mas as melhorias se somam. Medido em uma carga de trabalho bem definida (que os desenvolvedores SQLite usam como proxy para uma carga de trabalho típica de aplicativo) usando cachegrind no Linux e compilado com gcc 4.8.1 e -Os em x64 linux, a versão atual faz mais de 20% mais trabalho para o mesmo número de ciclos de CPU em comparação com o release anterior. O cachegrind não é uma CPU real e a carga de trabalho usada para medição é apenas um proxy. Então seu desempenho pode variar. Esperamos ver cerca de metade da melhoria medida e relatada em aplicativos do mundo real. 10% é menos de 20%, mas ainda é muito bom, pensamos.
- Esta versão inclui um novo conjunto de interfaces de linguagem C que possuem parâmetros de 64 bits não assinados em vez de 32 bits. As novas APIs não fornecem novos recursos. Mas eles facilitam a criação de aplicativos mais resistentes a vulnerabilidades de estouro de números inteiros.
- Esta versão também inclui um novo classificador capaz de usar vários segmentos para ajudar em grandes operações de classificação. Às vezes, as operações de ordenação são necessárias para implementar cláusulas ORDER BY e / ou GROUP BY e quase sempre são necessárias para CREATE INDEX. O classificador de vários segmentos está desativado por padrão e deve ser ativado usando o comando SQL de threads PRAGMA. Observe que o classificador multi-thread fornece desempenho mais rápido em tempo real para grandes tipos, mas também usa mais ciclos de CPU e mais energia.
O que há de novo na versão 3.8.3.1:
- O SQLite versão 3.8.3.1 corrige um bug presente nas versões 3.8.1, 3.8.2 e 3.8.3 que podem fazer com que as consultas omitem linhas de saída válidas. A atualização dessas versões é recomendada.
- O problema só aparece quando o SQLite é compilado com as opções de tempo de compilação SQLITE_ENABLE_STAT3 ou SQLITE_ENABLE_STAT4. Nesse caso, se uma consulta tiver uma cláusula WHERE que contenha expressões como esta:
- WHERE (expr1 OU expr2 OU ... OU exprN) E coluna NÃO É NULA
- Quando todos os expr1 a exprN são adequados para uso por índices, durante o planejamento de consultas, o SQLite pode converter o termo "column IS NOT NULL" em "column & gt; NULL" por engano. Mas o último termo nunca é verdadeiro e, portanto, a consulta não retornará nenhuma linha.
O que há de novo na versão 3.8.3:
- Adicionado suporte para expressões de tabela comuns e a cláusula WITH.
- Adicionada a função SQL printf ().
- Adicionado SQLITE_DETERMINISTIC como um bit opcional no 4º argumento para o sqlite3_create_function () e interfaces relacionadas, fornecendo aos aplicativos a capacidade de criar novas funções que podem ser fatoradas de loops internos quando eles têm argumentos constantes.
- Adicione o código de erro SQLITE_READONLY_DBMOVED, retornado no início de uma transação, para indicar que o arquivo de banco de dados subjacente foi renomeado ou movido para fora do SQLite.
- Permitir expressões arbitrárias, incluindo chamadas de função e subconsultas, no argumento filename para ATTACH.
- Permitir que uma cláusula VALUES seja usada em qualquer lugar em que uma instrução SELECT seja válida.
- Reseed o PRNG usado pelo sqlite3_randomness (N, P) quando invocado com N == 0. Reenvie automaticamente após um fork () no unix.
- Aprimore a tabela virtual spellfix1 para que possa pesquisar com eficiência pelo rowid.
- Melhorias no desempenho.
- Melhorias nos comentários na exibição do código de bytes VDBE ao executar o EXPLAIN.
- Adicione a diretiva "% token_class" ao gerador de analisadores LEMON e use-a para simplificar a gramática.
- Altere o código-fonte LEMON para evitar chamar funções da biblioteca C que o OpenBSD considere perigosas. (Ex: sprintf).
- Correção de bug: no recurso de importação de CSV do shell de linha de comando, não finalize um campo quando ocorrer uma aspa dupla entre aspas no final de uma linha de CRLN.
- SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
- SHA1 para sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
Comentários não encontrado