Novidades do Firebird 2 Rodrigo Gonçalves [email protected] 17 de Novembro de 2006 Resumo Este artigo apresenta as novidades do Firebird 2 de uma forma bem sucinta, deixando maiores detalhes sobre os aspectos abordados para serem consultados através do livro Firebird - o banco de dados do novo milênio, de Carlos H. Cantu. Ao final de cada item abordado serão incluı́das as páginas referentes ao assunto no livro. 1 Novidades Através da ferramenta ISQL, temos agora o comando show database; que nos permite obter informações sobre o banco (semelhante ao comando gstat [1, p. 13]. A manutenção de usuários (criar, incluir, excluir) agora só pode ser feita via API. Não é mais permitido acessar remotamente o banco de dados (isto tem importância com relação a criação do usuário Replicador pelo Utilitários). [1, p. 37]. Em relação à instalação das bibliotecas nas máquinas clientes, temos alguns recursos novos no instalador para otimizar e acelerar o processo de instalação (fazer o mesmo ser automático, sem intervenção do usuário para dar “Next”, “Next”, ... [1, p. 20,21]. Conexões ao banco de dados não aceitam mais o protocolo local (o protocolo mudou, portanto componentes feitos para trabalhar com o Firebird 1/1.5 não funcionam com o 2). O protocolo TCP/IP funciona sem problemas. Em comandos SELECT não é permitido mais misturar o nome da tabela e seu alias. Portanto um comando SELECT a.nome, cl pacientes.idade FROM cl pacientes a não é mais válido, sendo válido apenas SELECT a.nome, a.idade FROM cl pacientes a ou SELECT nome, cl pacientes. idade FROM cl pacientes [1, p. 75]. A função current timestamp agora trás milissegundos também no valor. No Linux, para Kernels maiores ou iguais a versã o 2.6 (ou seja, em qualquer distribuição nova de Linux - incluindo Mandrake/Mandriva) é recomendado utilizar a versão NPLT do Firebird 2. Em um Firebird 2 instalado no Linux, existe agora um script para trocar a senha do usuário SYSDBA em /opt/firebird/changeDBApassword.sh. 1 Este script irá pedir a senha atual, que vai estar no arquivo /opt/firebird/ SYSDBA.password, bastando dar um cat nele para ver a senha. Alguns problemas com o banco de dados que originavam buffer overflows foram corrigidos nesta nova versão [1, p. 45,46]. Temos agora o predicado SKIP em comandos SELECT para pular os n primeiros registros [1, p. 72,72]. Pode-ser fazer um cast de parâmetros agora - SELECT * FROM cl pacientes WHERE nome = CAST(:nome AS VARCHAR(50)) [1, p. 73]. Foi implementado o recurso de crossjoin, para permitir o produto cartesiano entre tabelas [1, p. 78.79]. A cláusula GROUP BY agora aceita apelidos de campos e expressões para fazer o agrupamento [1, p. 80]. O comando UNION agora está mais inteligente e consegue compatibilizar mais tipos de dados sem a necessidade de casts [1, p. 81]. Existe agora a clásula WITH LOCK em comandos SELECT, que trava os registros retornados contra edição por outros usuários até o fim da transação [1, p. 86]. Temos agora a possibilidade de fazer consultas sobre dados de outras consultas: SELECT ... FROM (SELECT ... FROM (SELECT ... FROM tabela)) [1, p. 89,90]. Comandos SELECT ordenando por um campo sendo usado para cálculo (AVG, SUM) não são mais permitidos [1, p. 91]. O comando SELECT agora tem uma cláusula ROWS que tem um funcionamento que engloba as cláusulas FIRST/SKIP, que segue o SQL padrão ANSI [1, p. 95]. Temos novos operadores de comparação: !¿, !¡, ˜¡, etc. [1, p. 102]. Podemos especificar um collate especı́fico na cláusula WHERE, que nos permite por exemplo filtrar independente de acentos [1, p. 102]. Temos a cláusla ESCAPE em comandos SQL agora para indicar um caracter como caracter de escape e permitir que coloquemos caracteres como % em um SELECT [1, p. 107]. Predicados existenciais estão disponı́veis: ALL, ANY, EXISTS, etc., que nos permitem algumas consultas otimizadas [1, p. 109]. Temos agora o operador DISTINCT, que tem um funcionamento igual ao <> porém sabe tratar corretamente campos nulos [1, p. 116, 117]. Podemos agora usar a sintaxe SEQUENCE ao invés de GENERATOR,pois ela segue o SQL Padrão ANSI e tem alguns recursos adicionais [1, p. 134]. Views agora são atualizáveis [1, p. 140,141]. Podemos fazer o INSERT em uma tabela a partir dos dados de uma consulta (INSERT INTO ... SELECT * FROM ... [1, p. 151]. Podemos agora incluir no comando INSERT uma cláusula RETURNING que nos permite retornar valores passados ao INSERT (útil especialmente para quando damos INSERT via generator e queremos o valor do nov o handle) [1, p. 152]. Podemos obter o dia da semana de uma data através da função WEEKDAY [1, p. 159]. Temos agora o comando SUBSTRING em SELECTs [1, p. 160]. Também temos o comando TRIM em SELECTs [1, p. 163]. 2 Agora podemos usar o comando RECREATE TRIGGER para criar uma nova trigger ou atualizar uma existente sem precisar verificar se a mesma existe ou não [1, p. 173]. Além do CASE, temos agora as funções IIF e NULLIIF em comandos SQL [1, p. 183-185]. Podemos agora usar a variável USER SESSION e a função $rdb setcontext para definir variáveis que ficam disponı́veis a todos os comandos SQLs de uma conexão (semelhante a uma sessão em PHP) [1, p. 208]. Temos também a variável SYSTEM para obter informação sobre o servidor e a conexão ao banco de dados [1, p. 210]. Foram realizadas otimizações nos ı́ndices do banco de dados que melhoram a performance do mesmo depois de vários dias em operação, além de outras otimizações diversas [1, p. 248,251 ]. É possı́vel agora criar ı́ndices em cima de campos calculados [1, p. 251]. O Garbage Collector foi melhorado, ajudando na performance do banco no decorrer de sua utilizaçào por vários diass/semanas [1, p. 258-262]. Temos agora o comando gfix -shut -single que garante que apenas uma conexão ao banco de dados será permitida - muito útil para fazer manutenção em um banco de dados garantido que nenhum usuário irá conectar no mesmo MNGUtilitários [1, p. 264, 265]. Por último temos o comando gfix -shut -full que impede qualquer conexão ao banco de dados - útil para derrubar o banco de forma garantida que nenhum usuário consiga conectar nele - bom para renomear o banco de dados sem precisar parar o banco [1, p. 264]. Referências [1] Carlos H. Cantú. Firebird 2.0 - O Banco de Dados do Novo Milênio. Editora Ciência Moderna, 2006. 3