SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Fórum Internacional Software Livre 8.0




                                               Dropline Fun Theme Wallpaper por Silvestre Herrera
        PEAR::MDB2_Schema




             Igor Feghali [ifeghali@php.net]
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 e 2007* pela organização PHP
–   Autônomo no desenvolvimento de sistemas
    Web baseados em PHP
–   Desenvolvedor PEAR há 10 meses e
    desenvolvedor do pacote MDB2_Schema
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: 40m + perguntas
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
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/
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.
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
Participantes PHP finalistas




                                                 Dropline Fun Theme Wallpaper por Silvestre Herrera
     http://code.google.com/soc/php/about.html
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/package/MDB2_Schema/
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
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.
Prática 1




                                           Dropline Fun Theme Wallpaper por Silvestre Herrera
CREATE DATABASE FISL8;

USE FISL8;

CREATE TABLE inscritos (Codigo INT, Nome
 CHAR(16));
Prática 1




Dropline Fun Theme Wallpaper por Silvestre Herrera
Prática 1
<database>
 <name>FISL8</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>
Prática 1


$ diff fisl.xml fisl_modificado.xml




                                      Dropline Fun Theme Wallpaper por Silvestre Herrera
30a31,39
>    <field>
>     <name>Telefone</name>
>     <type>text</type>
>     <length>10</length>
>     <notnull>false</notnull>
>     <fixed>true</fixed>
>     <default></default>
>    </field>
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'




                                                        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'
DML e DDL




                                             Dropline Fun Theme Wallpaper por Silvestre Herrera
      Até agora tudo é muito bonito...
mas e se a atualização estivesse removendo
       um campo ao invés de criá-lo ?

        Para onde iriam os dados ?
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
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, através de uma tabela
  exclusiva.
O Desafio




                                              Dropline Fun Theme Wallpaper por Silvestre Herrera
CREATE TABLE telefones
   (CodigoInscrito INT, Telefone CHAR(10))

INSERT INTO telefones
   (SELECT Codigo, Telefone FROM inscritos)

ALTER TABLE inscritos
   DROP COLUMN Telefone
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.
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
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>
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 ?
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.
Suporte à DML (XML Schema)




                                                     Dropline Fun Theme Wallpaper por Silvestre Herrera
<table>
  <declaration/>
  <initialization>
    <insert/>*
    <update/>*
    <delete/>*
  </initialization>
</table>


        mais informações na documentação do pacote
INSERT


<insert>




                                        Dropline Fun Theme Wallpaper por Silvestre Herrera
  {field}+
</insert>

<field>
  <name/>
  <null/> ou <value/> ou <column/> ou
 {function} ou {expression}
</field>
INSERT (exemplo)

<insert>
  <field>




                            Dropline Fun Theme Wallpaper por Silvestre Herrera
    <name>foo</name>
    <value>1601</value>
  </field>
  <field>
    <name>creation</name>
    <function>
      <name>NOW</name>
    </function>
  </field>
</insert>
UPDATE

<update>
  {field}+




                               Dropline Fun Theme Wallpaper por Silvestre Herrera
  <where>
    {expression}
  </where>?
</update>

<expression>
  <v/> ou <c/> ou {f} ou {e}
  <operator/>
  <v/> or <c/> or {f} or {e}
</expression>
UPDATE (exemplo)


<update>




                                   Dropline Fun Theme Wallpaper por Silvestre Herrera
  <field>
    <name>id</name>
    <expression>
      <column>id</column>
      <operator>MINUS</operator>
      <value>10</value>
    </expression>
  </field>
</update>
DELETE


<delete>




                                    Dropline Fun Theme Wallpaper por Silvestre Herrera
  <where>
    {expression}
  </where>
</delete>

<function>
  <name/>
  ( <v/> or <c/> or {f} or {e} )+
</function>
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>
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>
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>
Prática 2




Dropline Fun Theme Wallpaper por Silvestre Herrera
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)
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
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)
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
Carregando o pacote




                                             Dropline Fun Theme Wallpaper por Silvestre Herrera
    Agora que já aprendemos o que é o
MDB2_Schema, para quê serve e a estrutura
    básica dos arquivos com os quais ele
trabalha, precisamos saber como carregá-lo
       e utilizá-lo em nosso aplicativo.
Carregando o pacote

require_once 'MDB2/Schema.php';




                                           Dropline Fun Theme Wallpaper por Silvestre Herrera
$options = array(
    'log_line_break' => '<br>',
    'idxname_format' => '%s',
    'debug' => true,
    'quote_identifier' => true,
    'force_defaults' => false,
    'portability' => false
);

$dsn = 'mysql://root:@localhost/DBname';
Carregando o pacote




                                        Dropline Fun Theme Wallpaper por Silvestre Herrera
$schema =& MDB2_Schema::factory($dsn,
 $options);
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);
  }
}
Carregando o pacote




                                 Dropline Fun Theme Wallpaper por Silvestre Herrera
if (isset($error) && $error) {
  echo $error;
} else {
  var_dump($def);
}

$schema->disconnect();
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.
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.
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.
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.
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.
Principais Métodos: Ilustração

                                      Banco
 getDefinitionFromDatabase            Desenvolvimento




                                                              Dropline Fun Theme Wallpaper por Silvestre Herrera
                   parseDatabaseDefinition
                                                        XML



                    dumpDatabase


        updateDatabase                Banco
        createDatabase                Produção
Prática 3




                                                Dropline Fun Theme Wallpaper por Silvestre Herrera
demonstrar a estrutura vetorial resultante do
   carregamento de uma base de dados
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.
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* (GSoC 2007)

● Views

● ...
Fim




                                                           Dropline Fun Theme Wallpaper por Silvestre Herrera
                    ifeghali@php.net

                                   dúvidas



agradeço à minha amada Heloisa por seu apoio e dedicação

Mais conteúdo relacionado

Destaque

Green Schools 2015-2016
Green Schools 2015-2016Green Schools 2015-2016
Green Schools 2015-2016robin.organ
 
Jmanzo Portfolio10 08
Jmanzo Portfolio10 08Jmanzo Portfolio10 08
Jmanzo Portfolio10 08j_a_manzo
 
Cleaning For Health Overview
Cleaning For Health OverviewCleaning For Health Overview
Cleaning For Health Overviewrobin.organ
 
televisión y sociedad argentina
televisión y sociedad argentinatelevisión y sociedad argentina
televisión y sociedad argentinapablitorod
 
Tutorial Deletar Registros
Tutorial Deletar RegistrosTutorial Deletar Registros
Tutorial Deletar RegistrosEduardo Rios
 
Family Bibliogrphy
Family BibliogrphyFamily Bibliogrphy
Family Bibliogrphysfidalgo
 
Las Tribus Urbanas.Pps
Las Tribus Urbanas.PpsLas Tribus Urbanas.Pps
Las Tribus Urbanas.Ppspatito_lp
 

Destaque (14)

Green Schools 2015-2016
Green Schools 2015-2016Green Schools 2015-2016
Green Schools 2015-2016
 
Jmanzo Portfolio10 08
Jmanzo Portfolio10 08Jmanzo Portfolio10 08
Jmanzo Portfolio10 08
 
Milieu
MilieuMilieu
Milieu
 
Cleaning For Health Overview
Cleaning For Health OverviewCleaning For Health Overview
Cleaning For Health Overview
 
Milieu
MilieuMilieu
Milieu
 
Green Cleaning
Green CleaningGreen Cleaning
Green Cleaning
 
UBC Media
UBC MediaUBC Media
UBC Media
 
Samuelramos
SamuelramosSamuelramos
Samuelramos
 
televisión y sociedad argentina
televisión y sociedad argentinatelevisión y sociedad argentina
televisión y sociedad argentina
 
Tutorial Deletar Registros
Tutorial Deletar RegistrosTutorial Deletar Registros
Tutorial Deletar Registros
 
Family Bibliogrphy
Family BibliogrphyFamily Bibliogrphy
Family Bibliogrphy
 
Us Presidents
Us PresidentsUs Presidents
Us Presidents
 
Las Tribus Urbanas.Pps
Las Tribus Urbanas.PpsLas Tribus Urbanas.Pps
Las Tribus Urbanas.Pps
 
Fabiana Pinatti
Fabiana PinattiFabiana Pinatti
Fabiana Pinatti
 

Semelhante a FISL8 Software Livre

PEAR, peras e cachorros
PEAR, peras e cachorrosPEAR, peras e cachorros
PEAR, peras e cachorrosIgor Feghali
 
PHP-PEAR, Peras e Cachorros
PHP-PEAR, Peras e CachorrosPHP-PEAR, Peras e Cachorros
PHP-PEAR, Peras e Cachorroselliando dias
 
CakePHP para iniciantes
CakePHP para iniciantesCakePHP para iniciantes
CakePHP para iniciantesIgor Feghali
 
Internacionalizando­ seu desenvolvimento
Internacionalizando­ seu desenvolvimentoInternacionalizando­ seu desenvolvimento
Internacionalizando­ seu desenvolvimentoRafael Funchal
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template EngineDiego Tremper
 
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend Framework
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend FrameworkDesenvolva para o Mundo - Internacionalização de Sistemas com Zend Framework
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend FrameworkEduardo Bona
 
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCDesafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCJoão Zaratine
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
II Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLII Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLDiego Magalhães
 
Drupal 7 Direto das Trincheiras
Drupal 7  Direto das TrincheirasDrupal 7  Direto das Trincheiras
Drupal 7 Direto das TrincheirasRafael Caceres
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Pablo Dall'Oglio
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 

Semelhante a FISL8 Software Livre (20)

PEAR, peras e cachorros
PEAR, peras e cachorrosPEAR, peras e cachorros
PEAR, peras e cachorros
 
PHP-PEAR, Peras e Cachorros
PHP-PEAR, Peras e CachorrosPHP-PEAR, Peras e Cachorros
PHP-PEAR, Peras e Cachorros
 
CakePHP para iniciantes
CakePHP para iniciantesCakePHP para iniciantes
CakePHP para iniciantes
 
Internacionalizando­ seu desenvolvimento
Internacionalizando­ seu desenvolvimentoInternacionalizando­ seu desenvolvimento
Internacionalizando­ seu desenvolvimento
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
NotORM
NotORMNotORM
NotORM
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template Engine
 
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend Framework
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend FrameworkDesenvolva para o Mundo - Internacionalização de Sistemas com Zend Framework
Desenvolva para o Mundo - Internacionalização de Sistemas com Zend Framework
 
Diazo para todos
Diazo para todosDiazo para todos
Diazo para todos
 
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSCDesafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
Desafios no desenvolvimento de uma aplicação real com Flex @ FUGSC
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Ficha html e css
Ficha   html e cssFicha   html e css
Ficha html e css
 
II Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQLII Bemobi Tech Talk - NoSQL
II Bemobi Tech Talk - NoSQL
 
Drupal 7 Direto das Trincheiras
Drupal 7  Direto das TrincheirasDrupal 7  Direto das Trincheiras
Drupal 7 Direto das Trincheiras
 
Curso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JSCurso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JS
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
Dominando o customizer
Dominando o customizerDominando o customizer
Dominando o customizer
 

FISL8 Software Livre

  • 1. Fórum Internacional Software Livre 8.0 Dropline Fun Theme Wallpaper por Silvestre Herrera PEAR::MDB2_Schema Igor Feghali [ifeghali@php.net]
  • 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 e 2007* pela organização PHP – Autônomo no desenvolvimento de sistemas Web baseados em PHP – Desenvolvedor PEAR há 10 meses e desenvolvedor do pacote MDB2_Schema
  • 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: 40m + perguntas
  • 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. 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. 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. 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. Participantes PHP finalistas Dropline Fun Theme Wallpaper por Silvestre Herrera http://code.google.com/soc/php/about.html
  • 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/package/MDB2_Schema/
  • 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. 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. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera CREATE DATABASE FISL8; USE FISL8; CREATE TABLE inscritos (Codigo INT, Nome CHAR(16));
  • 13. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera
  • 14. Prática 1 <database> <name>FISL8</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. Prática 1 $ diff fisl.xml fisl_modificado.xml Dropline Fun Theme Wallpaper por Silvestre Herrera 30a31,39 > <field> > <name>Telefone</name> > <type>text</type> > <length>10</length> > <notnull>false</notnull> > <fixed>true</fixed> > <default></default> > </field>
  • 16. Prática 1 Dropline Fun Theme Wallpaper por Silvestre Herrera
  • 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. DML e DDL Dropline Fun Theme Wallpaper por Silvestre Herrera Até agora tudo é muito bonito... mas e se a atualização estivesse removendo um campo ao invés de criá-lo ? Para onde iriam os dados ?
  • 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. 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, através de uma tabela exclusiva.
  • 21. O Desafio Dropline Fun Theme Wallpaper por Silvestre Herrera CREATE TABLE telefones (CodigoInscrito INT, Telefone CHAR(10)) INSERT INTO telefones (SELECT Codigo, Telefone FROM inscritos) ALTER TABLE inscritos DROP COLUMN Telefone
  • 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. 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. 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. 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. 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. Suporte à DML (XML Schema) Dropline Fun Theme Wallpaper por Silvestre Herrera <table> <declaration/> <initialization> <insert/>* <update/>* <delete/>* </initialization> </table> mais informações na documentação do pacote
  • 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. INSERT (exemplo) <insert> <field> Dropline Fun Theme Wallpaper por Silvestre Herrera <name>foo</name> <value>1601</value> </field> <field> <name>creation</name> <function> <name>NOW</name> </function> </field> </insert>
  • 30. UPDATE <update> {field}+ Dropline Fun Theme Wallpaper por Silvestre Herrera <where> {expression} </where>? </update> <expression> <v/> ou <c/> ou {f} ou {e} <operator/> <v/> or <c/> or {f} or {e} </expression>
  • 31. UPDATE (exemplo) <update> Dropline Fun Theme Wallpaper por Silvestre Herrera <field> <name>id</name> <expression> <column>id</column> <operator>MINUS</operator> <value>10</value> </expression> </field> </update>
  • 32. DELETE <delete> Dropline Fun Theme Wallpaper por Silvestre Herrera <where> {expression} </where> </delete> <function> <name/> ( <v/> or <c/> or {f} or {e} )+ </function>
  • 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. 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. 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. Prática 2 Dropline Fun Theme Wallpaper por Silvestre Herrera
  • 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. 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. 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. 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. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera Agora que já aprendemos o que é o MDB2_Schema, para quê 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. Carregando o pacote require_once 'MDB2/Schema.php'; Dropline Fun Theme Wallpaper por Silvestre Herrera $options = array( 'log_line_break' => '<br>', 'idxname_format' => '%s', 'debug' => true, 'quote_identifier' => true, 'force_defaults' => false, 'portability' => false ); $dsn = 'mysql://root:@localhost/DBname';
  • 43. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera $schema =& MDB2_Schema::factory($dsn, $options);
  • 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. Carregando o pacote Dropline Fun Theme Wallpaper por Silvestre Herrera if (isset($error) && $error) { echo $error; } else { var_dump($def); } $schema->disconnect();
  • 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. 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. 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. 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. 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. Principais Métodos: Ilustração Banco getDefinitionFromDatabase Desenvolvimento Dropline Fun Theme Wallpaper por Silvestre Herrera parseDatabaseDefinition XML dumpDatabase updateDatabase Banco createDatabase Produção
  • 52. Prática 3 Dropline Fun Theme Wallpaper por Silvestre Herrera demonstrar a estrutura vetorial resultante do carregamento de uma base de dados
  • 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. 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* (GSoC 2007) ● Views ● ...
  • 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