PHP Conference Brasil




                                       Dropline Fun Theme Wallpaper por Silvestre Herrera
  PEAR...
Quem sou eu ?

–   Graduando em Engenharia de Computação
    pela Universidade Federal do Espírito Santo




             ...
Introdução


Proponho apresentar brevemente o pacote




                                                       Dropline F...
Conteúdo


➔   Visão geral do GSoC 2006




                                Dropline Fun Theme Wallpaper por Silvestre Her...
Google Summer of Code 2006




                                              Dropline Fun Theme Wallpaper por Silvestre He...
Google Summer of Code 2006




                                             Dropline Fun Theme Wallpaper por Silvestre Her...
Como funciona ?

➔   Organizações interessadas se cadastram
    Organizações são selecionadas




                        ...
Participantes PHP finalistas




                                                 Dropline Fun Theme Wallpaper por Silvest...
PEAR::MDB2_Schema


 É uma ferramenta que permite ao usuário




                                                    Dropl...
Visão geral do pacote

                                         Edição
                               Dump      Manual



...
Visão geral do pacote

 Aproveitando a camada de abstração criada
       pelo MDB2, uma das propostas do




             ...
Prática 1




                                           Dropline Fun Theme Wallpaper por Silvestre Herrera
CREATE DATABAS...
Prática 1




Dropline Fun Theme Wallpaper por Silvestre Herrera
Prática 1
<database>
 <name>PHPconf2006</name>
 <create>true</create>
 <overwrite>false</overwrite>




                  ...
Prática 1


$ diff phpconf.xml phpconf_modificado.xml
30a31,39




                                            Dropline Fu...
Prática 1




Dropline Fun Theme Wallpaper por Silvestre Herrera
Prática 1

Debug messages

query(1): SHOW COLUMNS FROM `inscritos`
query(1): SHOW COLUMNS FROM `inscritos` LIKE 'Codigo'

...
DML e DDL




                                   Dropline Fun Theme Wallpaper por Silvestre Herrera
Até agora tudo é muito...
DML e DDL

Terminologia

DDL – Data Definition Language




                                   Dropline Fun Theme Wallpape...
O Desafio

Uma agenda de contatos




                                                  Dropline Fun Theme Wallpaper por S...
O Desafio



CREATE TABLE telefones




                                              Dropline Fun Theme Wallpaper por Sil...
O Desafio


A adição de uma nova tabela, e a mudança na




                                                 Dropline Fun ...
Suporte à DML




                                                Dropline Fun Theme Wallpaper por Silvestre Herrera
Sim, ...
Suporte à DML


Primeira abordagem




                                             Dropline Fun Theme Wallpaper por Silve...
Suporte à DML




                                                 Dropline Fun Theme Wallpaper por Silvestre Herrera
Mas ...
Suporte à DML


Segunda abordagem




                                             Dropline Fun Theme Wallpaper por Silves...
Suporte à DML (XML Schema)



<table>




                                                     Dropline Fun Theme Wallpape...
INSERT


<insert>




                                        Dropline Fun Theme Wallpaper por Silvestre Herrera
  {field}...
INSERT (exemplo)

<insert>
  <field>
    <name>foo</name>




                            Dropline Fun Theme Wallpaper por...
UPDATE

<update>
  {field}+
  <where>




                               Dropline Fun Theme Wallpaper por Silvestre Herrer...
UPDATE (exemplo)


<update>
  <field>




                                   Dropline Fun Theme Wallpaper por Silvestre He...
DELETE


<delete>
  <where>




                                    Dropline Fun Theme Wallpaper por Silvestre Herrera
   ...
DELETE (exemplo)

<delete>
  <where>
    <expression>
      <expression>




                                             ...
Mais exemplos de expressões

datediff(`dataentrega`, `datapedido`) / 365




                                             ...
Mais exemplos de expressões

(A ou B) e (C + 2)
<expression>




                                Dropline Fun Theme Wallpa...
Prática 2




Dropline Fun Theme Wallpaper por Silvestre Herrera
Prática 2

bool(true)
Debug messages




                                                          Dropline Fun Theme Wall...
Prática 2

query(1): INSERT INTO `People` (name, birthdate,
 occupation, updated) VALUES ('Igor', '1984-05-23',
 'engineer...
Prática 2

query(1): SHOW /*!50002 FULL*/ TABLES/*!50002 WHERE
 Table_type = 'BASE TABLE'*/
query(1): CREATE TABLE `Packag...
Prática 2




                                                            Dropline Fun Theme Wallpaper por Silvestre Herre...
Carregando o pacote




                                             Dropline Fun Theme Wallpaper por Silvestre Herrera
  ...
Carregando o pacote

require_once 'MDB2/Schema.php';

$options = array(




                                           Dro...
Carregando o pacote




                                        Dropline Fun Theme Wallpaper por Silvestre Herrera
$schema...
Carregando o pacote

$def = $schema->parseDatabaseDefinition();
if (PEAR::isError($def)) {




                           ...
Carregando o pacote




                                 Dropline Fun Theme Wallpaper por Silvestre Herrera
if (isset($err...
Principais métodos

getDefinitionFromDatabase

Faz engenharia reversa na base de dados




                               ...
Principais métodos

parseDatabaseDefinition

Lê o conteúdo de um arquivo MDB2 XML e




                                  ...
Principais métodos

dumpDatabase

Toma como entrada uma definição vetorial,




                                          ...
Principais métodos

updateDatabase

Compara duas versões de uma mesma base




                                           ...
Principais métodos

createDatabase

Toma como entrada uma definição vetorial,




                                        ...
Principais Métodos: Ilustração

                                      Versão
 getDefinitionFromDatabase            Atual

...
Prática 3




                                                Dropline Fun Theme Wallpaper por Silvestre Herrera
demonstra...
Você pode ajudar!


 O MDB2_Schema é um aplicativo de código




                                              Dropline Fu...
O que ainda não está feito




                                            Dropline Fun Theme Wallpaper por Silvestre Herr...
Fim




                                                           Dropline Fun Theme Wallpaper por Silvestre Herrera
    ...
Próximos SlideShares
Carregando em…5
×

Bancos de dados portáveis em XML com PEAR::MDB2_Schema

746 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
746
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
14
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Bancos de dados portáveis em XML com PEAR::MDB2_Schema

  1. 1. PHP Conference Brasil Dropline Fun Theme Wallpaper por Silvestre Herrera PEAR::MDB2_Schema Igor Feghali [ifeghali@php.net]
  2. 2. Quem sou eu ? – Graduando em Engenharia de Computação pela Universidade Federal do Espírito Santo Dropline Fun Theme Wallpaper por Silvestre Herrera (UFES) – Participante do Google Summer of Code 2006 pela organização PHP – Autônomo no desenvolvimento de sistemas Web baseados em PHP – Desenvolvedor PEAR há 6 meses e desenvolvedor do pacote MDB2_Schema
  3. 3. Introdução Proponho apresentar brevemente o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera MDB2_Schema do PEAR focando em suas principais aplicações e demonstrando como utilizá-lo. Darei uma visão geral do Google Summer of Code 2006 expondo as contribuições que ele trouxe para o referido projeto. Tempo estimado: 1h 15m
  4. 4. Conteúdo ➔ Visão geral do GSoC 2006 Dropline Fun Theme Wallpaper por Silvestre Herrera ➔ Introdução ao MDB2_Schema ➔ Prática 1 ➔ DML e DDL ➔ XML Schema ➔ Prática 2 ➔ Carregando o pacote ➔ Prática 3
  5. 5. Google Summer of Code 2006 Dropline Fun Theme Wallpaper por Silvestre Herrera Google Summer of Code é um programa que oferece apoio financeiro à estudantes para desenvolverem projetos pessoais baseados em software de código livre. http://code.google.com/soc/
  6. 6. Google Summer of Code 2006 Dropline Fun Theme Wallpaper por Silvestre Herrera Aconteceu no período de Junho a Setembro de 2006 contando com 630 estudantes e 1200 mentores distribuídos em 90 países. 82% dos estudantes receberam uma avaliação positiva de seus mentores ao final do programa.
  7. 7. Como funciona ? ➔ Organizações interessadas se cadastram Organizações são selecionadas Dropline Fun Theme Wallpaper por Silvestre Herrera ➔ ➔ Estudantes enviam projetos dentro do contexto de uma organização ➔ Estudantes são selecionados ➔ Estudantes selecionados começam a trabalhar em seus projetos ➔ Desempenho dos estudantes é avaliado pela organização
  8. 8. Participantes PHP finalistas Dropline Fun Theme Wallpaper por Silvestre Herrera http://code.google.com/soc/php/about.html
  9. 9. PEAR::MDB2_Schema É uma ferramenta que permite ao usuário Dropline Fun Theme Wallpaper por Silvestre Herrera manter esquemas de bancos de dados em arquivos XML independentes de DBMS. Em caminho inverso, estes arquivos podem ser usados para criar, alterar e excluir bancos de dados, bem como manipular as informações ali contidas. http://pear.php.net/packages/MDB2_Schema/
  10. 10. Visão geral do pacote Edição Dump Manual Dropline Fun Theme Wallpaper por Silvestre Herrera Banco Desenvolvimento XML Compare Create ou Update MySQL PostgreSQL Oracle Interbase MSSQL
  11. 11. Visão geral do pacote Aproveitando a camada de abstração criada pelo MDB2, uma das propostas do Dropline Fun Theme Wallpaper por Silvestre Herrera MDB2_Schema é ser uma ferramenta para auxiliar na atualização de esquema de banco de dados. Pode-se concentrar o desenvolvimento de um banco de dados em um gerenciador específico e, através do MDB2_Schema, sincronizar bancos de dados clientes rodando em outros gerenciadores.
  12. 12. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera CREATE DATABASE PHPconf2006; USE PHPconf2006; CREATE TABLE inscritos (Codigo INT, Nome CHAR(16));
  13. 13. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera
  14. 14. Prática 1 <database> <name>PHPconf2006</name> <create>true</create> <overwrite>false</overwrite> Dropline Fun Theme Wallpaper por Silvestre Herrera <field> <table> <name>Nome</name> <name>inscritos</name> <type>text</type> <length>16</length> <declaration> <notnull>false</notnull> <fixed>true</fixed> <field> <default></default> <name>Codigo</name> </field> <type>integer</type> <length>4</length> </declaration> <notnull>false</notnull> <default></default> </table> </field> </database>
  15. 15. Prática 1 $ diff phpconf.xml phpconf_modificado.xml 30a31,39 Dropline Fun Theme Wallpaper por Silvestre Herrera > <field> > <name>Telefone</name> > <type>text</type> > <length>10</length> > <notnull>false</notnull> > <fixed>true</fixed> > <default></default> > </field>
  16. 16. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera
  17. 17. Prática 1 Debug messages query(1): SHOW COLUMNS FROM `inscritos` query(1): SHOW COLUMNS FROM `inscritos` LIKE 'Codigo' Dropline Fun Theme Wallpaper por Silvestre Herrera query(1): SHOW COLUMNS FROM `inscritos` LIKE 'Nome' query(1): SHOW INDEX FROM `inscritos` query(1): SHOW INDEX FROM `inscritos` query(1): SHOW TABLES query(1): SELECT Codigo, Nome FROM `inscritos` query(1): SHOW DATABASES begintransaction(1): Starting transaction/savepoint query(1): START TRANSACTION query(1): ALTER TABLE `inscritos` ADD `Telefone` CHAR(10) DEFAULT NULL commit(1): Committing transaction/savepoint query(1): COMMIT dumpdatabasechanges(1): Added field 'Telefone'
  18. 18. DML e DDL Dropline Fun Theme Wallpaper por Silvestre Herrera Até agora tudo é muito bonito... mas e quanto à DML ?
  19. 19. DML e DDL Terminologia DDL – Data Definition Language Dropline Fun Theme Wallpaper por Silvestre Herrera ● CREATE ● ALTER ● DROP DML – Data Manipulation Language ● INSERT ● UPDATE ● DELETE
  20. 20. O Desafio Uma agenda de contatos Dropline Fun Theme Wallpaper por Silvestre Herrera Versão 1.0 ● Cada participante possui um único telefone Versão 2.0 ● Cada participante pode ter um número indefinido de telefones, criando-se para isso uma nova tabela.
  21. 21. O Desafio CREATE TABLE telefones Dropline Fun Theme Wallpaper por Silvestre Herrera (CodigoInscrito INT, Telefone CHAR(10)) INSERT INTO telefones (SELECT Codigo, Telefone FROM inscritos) ALTER TABLE inscritos DROP COLUMN Telefone
  22. 22. O Desafio A adição de uma nova tabela, e a mudança na Dropline Fun Theme Wallpaper por Silvestre Herrera estrutura da tabela de participantes podem ser facilmente detectadas pelo MDB2_Schema. O desafio está em atualizar um aplicativo, que já está em estado de produção, garantindo a permanência dos dados.
  23. 23. Suporte à DML Dropline Fun Theme Wallpaper por Silvestre Herrera Sim, então precisamos inserir DML em nosso XML. Mas como ? http://2006.planet-soc.com/blog/238
  24. 24. Suporte à DML Primeira abordagem Dropline Fun Theme Wallpaper por Silvestre Herrera A consulta pode ser escrita diretamente no XML: <query>INSERT ... </query> <query>UPDATE ... WHERE ...</query> <query>DELETE ... WHERE ...</query>
  25. 25. Suporte à DML Dropline Fun Theme Wallpaper por Silvestre Herrera Mas espere, isso não amarraria nosso arquivo à um DBMS específico ? E a filosofia de nosso pacote não é justamente privilegiar a portabilidade ?
  26. 26. Suporte à DML Segunda abordagem Dropline Fun Theme Wallpaper por Silvestre Herrera Deve haver uma representação XML completa, para que possamos construir consultas de uma forma portável.
  27. 27. Suporte à DML (XML Schema) <table> Dropline Fun Theme Wallpaper por Silvestre Herrera <declaration/> <initialization> <insert/>* <update/>* <delete/>* </initialization> </table> mais informações na documentação do pacote
  28. 28. INSERT <insert> Dropline Fun Theme Wallpaper por Silvestre Herrera {field}+ </insert> <field> <name/> <null/> ou <value/> ou <column/> ou {function} ou {expression} </field>
  29. 29. INSERT (exemplo) <insert> <field> <name>foo</name> Dropline Fun Theme Wallpaper por Silvestre Herrera <value>1601</value> </field> <field> <name>creation</name> <function> <name>NOW</name> </function> </field> </insert>
  30. 30. UPDATE <update> {field}+ <where> Dropline Fun Theme Wallpaper por Silvestre Herrera {expression} </where>? </update> <expression> <v/> ou <c/> ou {f} ou {e} <operator/> <v/> or <c/> or {f} or {e} </expression>
  31. 31. UPDATE (exemplo) <update> <field> Dropline Fun Theme Wallpaper por Silvestre Herrera <name>id</name> <expression> <column>id</column> <operator>MINUS</operator> <value>10</value> </expression> </field> </update>
  32. 32. DELETE <delete> <where> Dropline Fun Theme Wallpaper por Silvestre Herrera {expression} </where> </delete> <function> <name/> ( <v/> or <c/> or {f} or {e} )+ </function>
  33. 33. DELETE (exemplo) <delete> <where> <expression> <expression> Dropline Fun Theme Wallpaper por Silvestre Herrera <column>id</column> <operator>GREATER THAN</operator> <value>10</value> </expression> <operator>AND</operator> <expression> <column>id</column> <operator>NOT EQUAL</operator> <value>15</value> </expression> </expression> </where> </delete>
  34. 34. Mais exemplos de expressões datediff(`dataentrega`, `datapedido`) / 365 Dropline Fun Theme Wallpaper por Silvestre Herrera <expression> <function> <name>DATEDIFF</name> <column>dataentrega</column> <column>datapedido</column> </function> <operator>DIVIDED</operator> <value>365</value> </expression>
  35. 35. Mais exemplos de expressões (A ou B) e (C + 2) <expression> Dropline Fun Theme Wallpaper por Silvestre Herrera <expression> <value>A</value> <operator>OR</operator> <value>B</value> </expression> <operator>AND</operator> <expression> <value>C</value> <operator>PLUS</operator> <value>2</value> </expression> </expression>
  36. 36. Prática 2 Dropline Fun Theme Wallpaper por Silvestre Herrera
  37. 37. Prática 2 bool(true) Debug messages Dropline Fun Theme Wallpaper por Silvestre Herrera query(1): SHOW DATABASES query(1): CREATE DATABASE `MDB2Example` begintransaction(1): Starting transaction/savepoint query(1): START TRANSACTION query(1): SHOW /*!50002 FULL*/ TABLES/*!50002 WHERE Table_type = 'BASE TABLE'*/ query(1): CREATE TABLE `People` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(128) DEFAULT 'unknown' NOT NULL, `age` INT UNSIGNED DEFAULT NULL, `birthdate` DATE DEFAULT NULL, `occupation` VARCHAR(128) DEFAULT NULL, `updated` DATETIME DEFAULT NULL, `aux` DOUBLE DEFAULT NULL)
  38. 38. Prática 2 query(1): INSERT INTO `People` (name, birthdate, occupation, updated) VALUES ('Igor', '1984-05-23', 'engineer', CURRENT_TIMESTAMP) Dropline Fun Theme Wallpaper por Silvestre Herrera query(1): INSERT INTO `People` (name, birthdate, occupation, updated) VALUES ('Heloisa', '1984-04-07', 'lawyer', CURRENT_TIMESTAMP) query(1): INSERT INTO `People` (name, birthdate, occupation, updated) VALUES ('Anne Sophie', '2004-01- 16', 'engineer', CURRENT_TIMESTAMP) query(1): INSERT INTO `People` (name, birthdate, occupation, updated) VALUES ('John', '2005-01-16', 'philosopher', CURRENT_TIMESTAMP) query(1): UPDATE `People` SET aux=(DATEDIFF(`updated`, `birthdate`) / '365'), age=floor(`aux`) query(1): UPDATE `People` SET aux=NULL
  39. 39. Prática 2 query(1): SHOW /*!50002 FULL*/ TABLES/*!50002 WHERE Table_type = 'BASE TABLE'*/ query(1): CREATE TABLE `Packages` (`id` INT UNSIGNED NOT Dropline Fun Theme Wallpaper por Silvestre Herrera NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(128) DEFAULT '' NOT NULL, `summary` LONGTEXT NOT NULL, `creation` DATETIME DEFAULT NULL) query(1): INSERT INTO `Packages` (id, name, summary, creation) VALUES ('11', 'PEAR', 'PEAR Base System', '2006-08-16') query(1): INSERT INTO `Packages` (id, name, summary, creation) VALUES ('12', 'MDB2', 'Database Abstraction Layer', '2006-09-03') query(1): INSERT INTO `Packages` (id, name, summary, creation) VALUES ('13', 'MDB2_Schema', 'XML Based Database Schema Manager', CURRENT_TIMESTAMP)
  40. 40. Prática 2 Dropline Fun Theme Wallpaper por Silvestre Herrera query(1): INSERT INTO `Packages` (id, name, summary, creation) VALUES ('14', 'XML_Parser', 'XML parsing class based on PHP's bundled expat', '2005-09-24') query(1): INSERT INTO `Packages` (id, name) VALUES ('77', 'I am supposed to be deleted') query(1): UPDATE `Packages` SET id=(`id` - 10) query(1): DELETE FROM `Packages` WHERE (`id` = 67) commit(1): Committing transaction/savepoint query(1): COMMIT
  41. 41. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera Agora que já aprendemos o que é o MDB2_Schema, para que serve e a estrutura básica dos arquivos com os quais ele trabalha, precisamos saber como carregá-lo e utilizá-lo em nosso aplicativo.
  42. 42. Carregando o pacote require_once 'MDB2/Schema.php'; $options = array( Dropline Fun Theme Wallpaper por Silvestre Herrera 'log_line_break' => '<br>', 'idxname_format' => '%s', 'debug' => true, 'quote_identifier' => true, 'force_defaults' => false, 'portability' => false ); $dsn = 'mysql://root:@localhost/DBname';
  43. 43. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera $schema =& MDB2_Schema::factory($dsn, $options);
  44. 44. Carregando o pacote $def = $schema->parseDatabaseDefinition(); if (PEAR::isError($def)) { Dropline Fun Theme Wallpaper por Silvestre Herrera $error = $def->getMessage(); } else { $op = $schema->createDatabase($def); if (PEAR::isError($op)) { $error = $op->getMessage(); } else { var_dump($op); } }
  45. 45. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera if (isset($error) && $error) { echo $error; } else { var_dump($def); } $schema->disconnect();
  46. 46. Principais métodos getDefinitionFromDatabase Faz engenharia reversa na base de dados Dropline Fun Theme Wallpaper por Silvestre Herrera atual e retorna uma estrutura vetorial processada.
  47. 47. Principais métodos parseDatabaseDefinition Lê o conteúdo de um arquivo MDB2 XML e Dropline Fun Theme Wallpaper por Silvestre Herrera retorna a definição do banco de dados em uma estrutura vetorial processada.
  48. 48. Principais métodos dumpDatabase Toma como entrada uma definição vetorial, Dropline Fun Theme Wallpaper por Silvestre Herrera anteriormente carregada, e produz a descrição XML correspondente.
  49. 49. Principais métodos updateDatabase Compara duas versões de uma mesma base Dropline Fun Theme Wallpaper por Silvestre Herrera de dados e gera a diferença entre elas, atualizando a base atualmente instalada se desejado.
  50. 50. Principais métodos createDatabase Toma como entrada uma definição vetorial, Dropline Fun Theme Wallpaper por Silvestre Herrera anteriormente carregada, e cria a base de dados correspondente.
  51. 51. Principais Métodos: Ilustração Versão getDefinitionFromDatabase Atual Dropline Fun Theme Wallpaper por Silvestre Herrera parseDatabaseDefinition XML dumpDatabase updateDatabase Versão createDatabase Cliente
  52. 52. Prática 3 Dropline Fun Theme Wallpaper por Silvestre Herrera demonstrar a estrutura vetorial resultante do carregamento de uma base de dados
  53. 53. Você pode ajudar! O MDB2_Schema é um aplicativo de código Dropline Fun Theme Wallpaper por Silvestre Herrera livre, distribuído sob a licença BSD. Ele está em constante desenvolvimento e nós o encorajamos a propor correções caso você ache algo que não está funcionando como deveria. Bugs podem ser submetidos através da web no site do PEAR.
  54. 54. O que ainda não está feito Dropline Fun Theme Wallpaper por Silvestre Herrera ● Parser não suporta elementos recursivos ● Sub-consultas ● Cláusulas ORDER ● Chaves estrangeiras ● Views ● ...
  55. 55. Fim Dropline Fun Theme Wallpaper por Silvestre Herrera ifeghali@php.net dúvidas agradeço à minha amada Heloisa por seu apoio e dedicação

×