object query language (oql) marián kamenišťák mff – uk praha 26.11.2003

18
Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Upload: annabelle-wilkerson

Post on 13-Dec-2015

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Object Query Language (OQL)

Marián KamenišťákMFF – UK Praha26.11.2003

Page 2: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Úvod

podobný SQL jazykuzaložený na ODMG štandarteArchitektúra: Nástroje: C, C++, Java, … DB engine: napr. O2 engine & store Interfaces: O2ODBC, O2Cobra, ..

Page 3: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Základné dotazy (C++)

class item {String what; double price;};class client {String name;

Array <item> order;int amount();};

Page 4: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Základné dotazy

Select distinct e.salary from e in Schema.employees

where e.family != nil and e.position = “reporter”;

… where count(e.children) >=1;… group by … having …… order by … (vracia pole) existujú agregačné fcie: min, max, sum, avg

Page 5: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Tvorenie výsledkov

Define MyEmployees asselect struct(employee:

struct(e.name,position: e.post),

salary: e.salary)from e in Company.employees;

element (select e from e in MyEmployees where e.salary>150000);

Page 6: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Množinové operátory

Zjednotenie(+): MyEmployees + YourEmployeesPrienik (*)Rozdiel (-)

Page 7: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Konverzie

listtoset(Companies[2].clients)Naopak: select e from e in MyEmployees order by e.name;z kolekcie kolekcií na plochú kolekciu:flatten(select e.clients from c in

Companies); flatten(list(list(1,2), list(1,2,3)))

-> list(1,2,1,2,3)

‘string’ like ‘%nice_%’

Page 8: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Preddefinované typy kolekcií

Set<T> - mna set(1,2,5)

Bag<T> - multimna bag(1,2,2,3,3)

Varray<T> - dynamické poleList<T> - Varray s metódami pre manipuláciu (insert, delete,..) list(1,2,2,3); list(3..5)

Ref - perzistentný pointer

Page 9: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Pokročilé OQLclass Person {String name;Date birth;set<ref<Person>> childs inverse parents;set<ref<Person>> parents inverse childs;

Person(); //constructorvoid birth(ref<Person> child); //narodenie d.virtual set<String> activities();

}

Page 10: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL

class Employee:Person{ //podtriedafloat salary;virtual set<String> activities();//predefinit.

};

Join: Select p from p in Persons,

b in (select a.building from a in Apartments)

Where p.name = b.address.street;

Page 11: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL – Data manipulation

select struct (me:p.name,

address:p.lives_in.building.address;childs: (select struct(name: c.name,

address: c.lives_in.building.address)

from c in p.children))from p in Persons;//adresy detí cez všetky osoby.

Page 12: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL Polymorfizmus

napr. mna Persons obsahuje prvky tried Preson, Employee, Student.Potom sa virtuálna metóda activities() vykoná pre konkrétnu triedu. Select ((Student)p).grade

from p in Personswhere “lecture” in p.activities;

Page 13: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL

define salary_map asselect street,

average_salary: avg(select p.e.salary from partition p)

from e in Employeesgroup by e.lives_in.building.address.street;

//returns Bug<struct{String street; float avg_salary;>};

Page 14: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL

define sorted_salary_map asselect s from s in salary_maporder by s.average_salary

List<struct{String street; float avg_salary;}>

sorted_salary_map[2].street;

Page 15: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL

define Jakes asselect x from Students xwhere x.name = “Jake”;

define Jake as first(element(select x from Students xwhere x.name = “Jake”));

//first, last operators in list

Page 16: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL

Prechádzanie štruktúrami: person.name == person->name //rovnaké Jake->woman!=nil and Jake->woman->name=Carol

Dereferencie p1 = p2 je pravda, ak ukazujú na rovnaký objekt *p1 = *p2 je pravda, ak majú rovnaké hodnoty

Page 17: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

OQL - group by

select * from Employees egroup by

low: e.salary<1000,medium: e.salary>=1000 and

e.salary<2000,high: e.salary>=2000;

Vytvorí pomenované partition bugy

Page 18: Object Query Language (OQL) Marián Kamenišťák MFF – UK Praha 26.11.2003

Literatúra

ODMG OQL user manual 5.0 feb. 1998