ii- padrão odmg object query language - oql. ii.3 a linguagem oql consultas a reposit ó rios de...

30
II- Padrão ODMG II- Padrão ODMG Object Query Language - OQL Object Query Language - OQL

Upload: internet

Post on 16-Apr-2015

110 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

II- Padrão ODMGII- Padrão ODMGII- Padrão ODMGII- Padrão ODMG

Object Query Language - OQLObject Query Language - OQL

Page 2: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

II.3 A Linguagem OQL

• Consultas a repositórios de classes - ODL

• OQL combina os aspectos declarativos da linguagem SQL com o paradigma de programação OO

• Apresentação by example

Page 3: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Consultas Intra-Classe• Qual o ano do filme "E o vento levou“?

–  f é uma variável do tipo Filme que "varre" o repositório Filmes (isto é, pode receber cada valor da repositório corrente Filmes)

SELECT f.anoFROM Filmes fWHERE f.título = "E o vento levou?"

Page 4: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Consultas Inter-Classes• Quais os nomes das estrelas do filme

"Casablanca"?

– Note o tratamento unificado para atributos e relacionamentos

SELECT e.nomeFROM Filmes f, f.estrelado_por eWHERE f.título = "Casablanca"

For each f in Filmes do If f.título = "Casablanca" then For each e in f.estrelado_por then Add e.nome to output bag

Page 5: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Consultas Com Método• Quais os títulos e anos dos filmes com mais de 2

horas de duração?

– Note o tratamento unificado para atributos, relacionamentos e métodos

SELECT f.título, f.anoFROM Filmes fWHERE f.duração_em_horas( ) > 2.0;

/* pode ser também duração_em_horas(f) */

Page 6: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Path Expressions • Se o denota um objeto pertencendo a uma

classe C, e p é uma propriedade da classe, então o.p é o resultado de aplicar p a o – Se p é um atributo, então o.p é o valor do atributo

no objeto o – Se p é um relacionamento, então o.p é o objeto ou

coleção de objetos relacionados com o através do relacionamento p

– Se p é um método (talvez, com parâmetros), então o.p é o resultado de aplicar o método a o

• Pode ser usado o símbolo -> em lugar do ponto

Page 7: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Path Expressions (2) • O valor de meu_filme.duração é a duração

do filme, isto é, o valor do atributo duração para o objeto Filme denotado por meu_filme

• O valor de meu_filme.duração_em_horas() é um número real, a duração do filme em horas, calculada pela aplicação do método duração_em_horas() ao objeto meu_filme

Page 8: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Path Expressions (3)• O valor de meu_filme.estrelado_por é o conjunto

de objetos Estrela que estrelaram o filme meu_filme

• A expressão meu_filme.estrelas (nomes) não retorna valor (em C++, o tipo de função void). Entretanto retorna o conjunto dos nomes das estrelas de meu_filme (parâmetro de saída nomes, do tipo coleção)

• O que significa meu_filme.realizado_por.nome?

Page 9: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões OQL• Estilo SQL

– Select-From-Where

• A palavra-chave SELECT seguida por uma lista de expressões

• A palavra-chave FROM seguida por uma ou mais declarações de variáveis simples. Uma variável é declarada por dar– uma expressão cujo valor tem um tipo coleção, isto

é, um conjunto, ou bag, ou lista, ou array – A palavra-chave opcional AS – O nome da variável simples, que “varre” a coleção

Page 10: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões OQL• Tipicamente, a expressão de (a) é o repositório

de alguma classe, como o repositório Filmes da classe Filme. Entretanto, qualquer expressão que produza uma coleção de objetos pode ser utilizada, incluindo outra expressão Select-From-Where

• A palavra-chave WHERE e uma expressão booleana. Este expressão, como a expressão seguindo o SELECT, pode usar somente constantes e variáveis declaradas na cláusula FROM

• Uma consulta produz um bag de objetos

Page 11: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Eliminação de Duplicatas

SELECT DISTINCT e.nomeFROM Filmes f, f.estrelado_por eWHERE f.realizado_por.nome =

"Disney"

Page 12: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Objetos ComplexosSet<Struct N {string c1, string c2}> N1 N1 = SELECT DISTINCT Struct(estrela1: e1.nome, estrela2: e2.nome) FROM Estrelas e1, Estrelas e2 WHERE e1.endereço = e2.endereço AND e1.nome < e2.nome

Page 13: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Sub-consultasSELECT DISTINCT e.nomeFROM (SELECT f FROM Filmes f WHERE f.realizado_por.nome

= "Disney") d, d.estrelado_por e

Page 14: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Resultado como ListaSELECT fFROM Filmes fWHERE f.realizado_por.nome =

"Disney"ORDER BY f.duração, f.título

Page 15: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com Quantificadores

• FOR ALL x IN C : C(x), onde C é um conjunto, x é uma variável, e C(x) é uma condição

SELECT e FROM Estrelas e WHERE ALL f IN e.estrelou_em : f.realizado_por.nome = "Disney"

Page 16: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com Quantificadores (2)

• EXISTS x IN C : C(x)

SELECT e FROM Estrelas e WHERE EXISTS f IN e.estrelou_em : f.realizado_por.nome = "Disney"

Page 17: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com Agregação

• OQL usa os mesmos cinco operadores de agregação usados em SQL: AVG, COUNT, SUM, MIN, e MAX. – Aplicáveis a qualquer coleção cujos

membros são de tipos apropriados

SELECT ... AVG(SELECT f.duração FROM Filmes f)...

Page 18: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com GROUP BY

• A forma de uma cláusula GROUP BY em OQL é – As palavras chave GROUP BY– Uma lista de atributos-partição ("partition

attributes"). Cada atributo-partição consiste de • Um nome de uma variável (um critério de agregação) • Dois pontos • Uma expressão mencionando uma variável na

cláusula FROM

Page 19: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com GROUP BY (2)

• Na lista do SELECT, só podem aparecer os critérios de agregação, e os valores agregados

• O valor retornado pela cláusula GROUP BY é um conjunto de estruturas

• Cada estrutura tem a forma

Struct(critério_agregação1:v1, ..., critério_agregaçãon:vn, lista_de_valores_agregados)

Page 20: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Expressões com GROUP BY (3)

• Os valores agregados referem-se a uma partição (um conjunto de valores de atributos-partição)

SELECT nome_estúdio, ano_filme, média_durações: AVG(SELECT p.f.duração FROM partition p) FROM Filmes f GROUP BY nome_estúdio: f.realizado_por.nome,

ano_filme: f.ano HAVING MAX(SELECT p.f.duração FROM

partition p) > 120

Page 21: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Operadores sobre Coleções

• Pode-se aplicar os operadores de união (UNION), interseção (INTERSECT) e diferença (EXCEPT) a duas coleções compatíveis de objetos

(SELECT DISTINCT f FROM Filmes f, f.estrelado_por e WHERE e.nome = "Harrison Ford") EXCEPT (SELECT DISTINCT f FROM Filmes f WHERE f.realizado_por = "Disney")

Page 22: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Variáveis Hospedeiras (Binding)

Set<Filme> Velhos_filmes

Velhos_filmes = SELECT DISTINCT f FROM Filmes f WHERE f.ano <

1920;

Page 23: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Variáveis Hospedeiras (Binding) (2)

List<Filme> Minha_lista

Minha_lista = SELECT f FROM Filmes f ORDER BY f.título, f.ano

Page 24: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Extraindo o Elemento de uma Coleção

UnitáriaFilme Meu_filme

Meu_filme = ELEMENT(SELECT f FROM Filmes f WHERE f.título = "E o Vento

Levou")

Page 25: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Exercícios • Considere a

classe

Page 26: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Exercícios (2)Class Empregado (extent Empregados key matricula){ attribute string matricula; attribute string nome; attribute float salario; relationship Set<Empregado> gerencia inverse Empregado::eh_gerenciado_por; relationship Empregado eh_gerenciado_por inverse Empregado::gerencia; ...;}

Page 27: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Exercícios (3)Escreva em OQL Quais o nome e o

salário do gerente de Natasha?

Page 28: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Exercícios (4)• Seja o esquema de filmes, estrelas e

estúdios visto em aula. Escrever em OQL as seguintes perguntas – Quais os estúdios que realizaram algum

filme com duração maior que a duração de cada filme realizado pela Eurofilmes?

– Quais os estúdios que realizaram mais filmes?

– Quais os estúdios que não realizaram filmes antes de 1960?

Page 29: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Exercícios (5)

– Quais as estrelas dos filmes com duração maior que pelo menos a de um filme realizado pela Disney?

– Quais as estrelas que estrelaram em todos os filmes do estúdio Cinecittá?

– Quais os estúdios que menos realizaram filmes?

Page 30: II- Padrão ODMG Object Query Language - OQL. II.3 A Linguagem OQL Consultas a reposit ó rios de classes - ODL OQL combina os aspectos declarativos da

Omissões da Linguagem OQL

• Não oferece abstrações como visões SQL

• Linguagem de consulta stricto sensu