Giter Club home page Giter Club logo

akdb's Introduction

This repository is archived. Please use the new repository here!

AKDB

AKDB

https://ailab-foi.github.io/akdb/

An experimental relational DBMS developed by students @ Faculty of Organization and Informatics, University of Zagreb

akdb's People

Contributors

brajic avatar darmirkov avatar darzunec avatar dekadentno avatar dkisic2 avatar edujak avatar elvispopovic avatar embalint avatar fkraljic avatar fzmuk avatar goranalkovic avatar hrvatskibogmars avatar isolic811 avatar ivkristo avatar jodavz avatar jurkrizan avatar kkupa avatar krivite avatar lidija-lastavec avatar lpredova avatar mflajsek avatar mjurinic avatar mschatten avatar nkuzir avatar nmakar avatar nmiljanc avatar svarcf avatar thewildhorse avatar vbencek avatar vukovicluka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

akdb's Issues

23) Proširiti operator projekcije

  1. Proširiti operator projekcije. Trenutno projekcija moze samo raditi projekciju nad stupcima od navedene tablice, u prosirenoj rel algebri mora se moci raditi operacije nad stupcima projekcije npr. artimeticke itd.. Dodati implementaciju za ovaj slucaj. Provjeriti je li potrebno proširenje projekcije (rezultat projekcije je tablica, tako da projekcija uvijek može raditi nad drugom, privremenom tablicom) ili je proširenje potrebno na razini SQL-a.

3) Dokumentacija i alati

Dokumentirati (u svakoj datoteci tako da ih Doxygen hvata i u README datoteci) comments.py parseC.sh parsePy.sh getFiles.sh updateVersion.sh quickrun i premjestiti u novi direktorij tools te dodati u Makefile

Izraditi testove za recovery

  1. Izraditi testove za recovery. Jedna varijanta testa bi mogla biti da se pokreće neka vremenski duža operacija (može biti i spavanje dretve određeni broj sekundi ili
    konkretno izvršavanje naredbi), te se slanjem signala SIGINT (signal bi simulirao pad sustava) pokreće arhiviranje neuspjelih naredbi te pokušaj njihove rekonstrukcije i izvršavanja.

Implementirati CHECK constraint

Provjeriti je li postoji neki dio u SELECT naredbi (WHERE klauzula) koji je iskoristiv. Bilo bi dobro da je sustav za provjeravanje formule obzirom na red u tablici jedinstven na razini sustava.

Popraviti pogreške u memory managementu

  1. Popraviti pogreške u memory managementu:
    a) Funkcija AK_cache_block bi trebala vratiti EXIT_ERROR ukoliko dođe do pogreške, ali u kodu ne vidim taj dio, vraća EXIT_SUCCESS
    b) Ne razumijem dio kod funkcije AK_query_mem_AK_malloc u liniji 261. Mislim da bi taj dio trebalo proučiti i eventualno popraviti.
    c) Ako se ne varam, funkcija AK_mem_block_modify bi trebala vratiti EXIT_SUCCESS
    d) Funkcija AK_find_AK_free_space koristi break, to se vjerojatno može zamijeniti s EXIT_ERROR. Isto tako tu funkciju je potrebno premjestiti. (komentar u liniji 723)
    e) Treba popravit header bug kod funkcije AK_init_new_extent (linija 760)
    f) AK_memoman_test i AK_memoman_test2 - u njima uopće nema komentara i nema poruke da li su se uspješno ili neuspješno završili. Provjeriti testove te obavezno staviti ispis je li test uspješan ili nije.

akdb/src/rel/selection.c - testovi

  1. akdb/src/rel/selection.c
  • Restrukturirati testove (postoje dva testa i treća funkcija ..._test_redolog() koja poziva te testove – beskorisno. Treba napraviti jedan dobar test koji će vratiti success ili fail na kraju (trenutno se testovi izvršavaju, ali bez povratne informacije; osim toga, dosta redova se prikazuje poduplano – provjeriti jeli greška u samom testu ili pak glavnoj funkciji?).
  • Izbaciti zakomentirani kod (ako je višak)

akdb/src/rel/sequence.c

  • Kod funkcije AK_sequence_modify(...) dohvaćanje seq_id-ja napraviti pomoću odgovarajuće već implementirane funkcije za to (AK_sequence_get_id(char *name)), umjesto trenutnog koda na linijama 285-291 (algoritam za dohvaćanje je gotovo isti)

Popraviti operator selekcije

  1. Popraviti operator selekcije: operator selekcije ne radi kako spada. Konstantno upisuje zapise iz src tablice na kraj dest tablice. Te iz tog razloga sve operacije koje koriste operator selekcije ne rade kako spada imamo puno redundantnih zapisa. Provjeriti testove (posebice destinacijske tablice) i osigurati da se rezultat uvijek zapisuje u novu destinacijsku tablicu.

Popraviti memoman AK_find_AK_free_space

  1. mm - int AK_find_AK_free_space(table_addresses * addresses)
    Funkcija je nedovršena, ukoliko ne nađe slobodan prostor, vraća -1
    Trebala bi kreirati novu ekstenziju za blok - dovršiti funkciju

2) Integrirati redo_log

Integrirati redo_log u normalan rad sustava: ako se neki upit ili dio upita ponovi (obzirom na redo_log) te ako nije bilo pisanja po objektima koji su u pitanju (tablice), tada ne izvršavaj ponovno upit nego vrati već dobiveni rezultat.

Integrirati recovery u ostatak sustava

Povezati sustav za recovery tako da se on koristi pri svim operacijama koje mijenjaju podatke u bazi podataka te ih zapisuje u log. Ako dođe do ispada sustava, recovery osigurava da se sve operacije koje eventualno nisu završile na disku (nego o cache memoriji i sl.) povrate.

aggregation.c - test

  1. Radi se o datoteci aggregation.c, a greška je ta da test broj 28, iako prolazi,
    ispisuje i posljednji red koji sadrži null vrijednosti. Trebalo bi vidjeti u čemu je problem te pokušati ukloniti
    posljednji red.

9) Provjeriti integriranost komponenti

  1. provjeriti integriranost komponenti (što je povezano sa serverom, što nije) i napraviti plan integracije - ako je puno, više zadataka, ako je malo jedan zadatak.

Popraviti recovery

  1. recovery - u funkciji AK_recovery_test , kod koji bi ju trebao pokrenuti je zakomentiran. Odkomentirati kod i provjeriti je li radi. Ako ne radi popraviti.

Popraviti sljedeće pogreške (ispraviti kod tako da bude funkcionalan u odnosu na ostatak sustava)

  1. Popraviti sljedeće pogreške (ispraviti kod tako da bude funkcionalan u odnosu na ostatak sustava):

Pogreška 1:

DATOTEKA: hash.c

POGREŠKA: SIGSEGV u funkciji AK_elem_hash_value() kada je pozvana iz
funkcije AK_create_hash_index()

OPIS: Na liniji 564 funkcija AK_create_hash_index() poziva funkcija
AK_elem_hash_value() i prosljeđuje joj referencu na temp_elem. Pozvana
funkcija pokušava iz prosljeđene reference dohvatiti vrijednost atributa
type (linija 31), ali to dovodi to poziva SIGSEGV.

UZROK: Na liniji 563 poziva se funkcija Ak_GetNth_L2() i rposljeđuju joj
se varijable l i row. Tokom debug-iranja saznalo se da je vrijednost
parametra l u tom trenutku jednak 0, što dovodi do toga da navedena
funkcija vraća NULL u varijablu temp_elem. To znači da aplikacija (unutar
funkcije AK_elem_hash_value()) pokušava dohvatiti nepostojeći podatak.

Pogreška 2:

DATOTEKA: btree.c

POGREŠKA: SIGSEGV u funkciji AK_btree_insert()

OPIS: Na liniji 326 u funkciji AK_btree_insert() javlja se SIGSEGV.

UZROK (mogući): Vrijednost od root->root je možda prevelika (malo manje od
2.000.000.000) što dovodi do čitanje izvan dosega polja. Ta vrijednost se
poprimi nakon izvođenja funkcije memcpy() u liniji 322.

Popraviti: between.c i check_constraint.c

  1. Popraviti:
    between.c
  • rusi se na testu
  • dio koda se ponavlja i moze se izvuc van u funkciju
  • umjesto memcpy staviti memmove
  • umjesto iterativnog "resetiranja" varijabli moze se koristit memset
  • kod memcpy-a ko treci argument treba koristiti strlen kod kopiranja stringova (trenutno se rusi zbog krivog sizea zapisanog u strukturi)
  • ime tablica staviti kao konstante u jedan od header fileova

check_constraint.c

  • ne znamo da li test prolazi (nema nikakvi output)
  • memcpy u memmove

Implementirati doctest

  1. Sve testove iz main.c staviti u doctest (swig/test.py -- python -m doctest -v test.py)

U Python serveru implementirati protokol za komunikaciju s klijentom

  1. U Python serveru implementirati protokol za komunikaciju s klijentom - ne proslijeđivati string poruke, nego odgovarajuće objekte (npr. JSON format) koji će se onda na strani klijenta na odgovarajući način interpretirati (posebice obratiti pozornost na tipove podataka).

Ispraviti product.c i projection.c

  1. --product.c--
    Dio koda zadužen za iteraciju kroz redove tablica je nepregledan i mogao
    bi se izdvojiti u zasebnu funkciju.

--projection.c--
Kod sadrži funkciju "AK_temp_create_table" koja bi se trebala nalaziti u
nekoj vanjskoj biblioteci.

Popraviti sljedeće natuknice: akdb/src/file/table.c

Popraviti sljedeće natuknice:
akdb/src/file/table.c

  • Dodatno komentirati kod, funkcije su kratke i jasne
  • U funkciji AK_print_row prilikom prepoznavanja tipa elementa, nije definirano što se događa ukoliko je tip TYPE_VARCHAR; isto tako za ostale tipove (npr. TYPE_NUMBER, TYPE_TIME, TYPE_BOOL...) -> ista stvar u funkciji AK_print_row_to_file, AK_print_table_to_file
  • U funkciji AK_check_tables_scheme unutar for petlje, previše if-ova postavljenih, dalo bi se možda to na jednostavniji i kraći način provjeriti
  • Test AK_table_test() nije vidljiv među ostalim testiranjima i ne može se pokrenuti
  • Test AK_op_rename_test() uredno prolazi, ali ne piše je li uspješno obavljen ili ne

akdb/src/file/test.c

  • U svakoj se funkciji provjerava tip i isti je kod u nekoliko funkcija, možda bi se to moglo izdvojiti kao zaseban dio u kodu

Popraviti probleme koji su uočeni u mapi rel

  1. Popraviti probleme koji su uočeni u mapi rel (aggregation, difference, expression_check, intersect, nat_join, product).

Kod aggregation.c stvara se nepotrebni zadnji red popunjen s null vrijednostima.

Test za nat_join nije dodan.

Kod je na nekim mjestima dosta nepregledan. Potrebno ga je refaktorirati.
Neke funkcije se ne koriste dok s druge strane postoje razliciti dijelovi koda sličnih namjena koji bi mogle biti implementirani u jednu zasebnu funkciju.

Prilikom višestrukih testiranja iste funkcionalnosti zapisi se multipliciraju te bi bilo dobro kad bi se tablice očistile od starih zapisa.

Takoder, neki dijelovi koda nisu adekvatno komentirani te je opcenito potrebno poraditi na dokumentaciji koda.

U recovery implementirati binarnu datoteku

  1. U recovery implementirati spremanje naredbi za rekonstruiranje u binarnu datoteku umjesto u tekstualnu. Na ovaj način se omogućuje brža rekonstrukcija naredbi jer se izbacuje nepotreban parsing datoteke (u binarnoj datoteci bi se spremila struktura koja bi sadržavala naziv tablice, broj koji bi reprezentirao naredbu [UPDATE, DELETE, INSERT], a zatim bi slijedilo polje/hash tablica sa argumentima). Budući da se ovakvim postupkom gubi mogućnost direktnog čitanja log datoteke, predlažem da se promisli o redizajnu gdje bi log datoteka sadržavala više informacija od onih koji su vezani za pad sustava (informacije o izvršavanju operacija, testova i slično) te bi ona bila čitljiva, dok bi binarna datoteka bila korištena samo kod pada sustava te za rekreiranje naredbi koje su izvršavane u trenutku pada. Također i ovaj kod ima određene sitne pogreške koje se mogu ispraviti, no oni nisu toliko značajni za rad ove komponente sustava (ne korištenje parametra filename u archive_log, itd).

Implementirati verzioniranje

  1. implementirati verzioniranje - version (mora se zapisati negdje u kodu i izvršnom kodu, te svaki put updejtati u doxygenu)

Popraviti probleme vezane za main.c,doxygen.config i Makefile

  1. Popraviti probleme vezane za main.c,doxygen.config i Makefile:
    -Main se treba bolje dokumentirati, malo je zbunjujuće za korisnika koji prvi puta koristi dokumentaciju, nedostaju neke bitne stvari u dokumentaciji poput AK_PRO i AK_EPI.
    -Treba dodati da u dokumentaciji postoji search, pošto postoji searchengine za doxygen kao dodatna opcija, za sada je stavljeno na "NO".
    -Bilo bi dobro da se složi naredba u MakeFile-u koja odmah odvara dokumentaciju u html-u ili latex-u.
    -staviti HTML_STYLESHEET na ON da bude preglednije, u tablicama.
    -Napraviti skriptu koja će proći kroz sve testove u main.c (ispisati samo koliko je uspješnih/neuspješnih te koji su konkretno neuspješni), za sada se može samo ručno upisati određeni test koji želimo provjeriti.

Popraviti archive_log

  1. archive_log , recovery i redo_log.

-archive log koristi statičko ime datoteke za kreiranje log-a, to se možda pokušalo popraviti funkcijom AK_get_timestamp, ali ona se zapravo nigdje ne koristi. Ugraditi funkciju u kreiranje log-a. Također, u config.ini ugraditi konfiguracijske elemente koji će odrediti u koji će se direktorij pospremati archive_log, te od tamo učitati direktorij.

32) Eliminacija hrvatskih naziva

  1. Konzistentno eliminirati sve hrvatske nazive, komentare i sl. iz čitavog koda (C, Python, MakeFile, DoxyGen itd.) i prevesti na engleski

Index.c + Bitmap.c- test

  1. Index.c
    Trenutno treba dodati test za ovu datoteku u main datoteku kako bi je bilo u odabiru za testove pa da se dalje može vidjeti ako nešto dobro ne radi.
    --> Dodati test

Bitmap.c
Funkcija int Ak_write_block je samo zakomentirana te trenutno nema
implementaciju
Funkcija void Ak_print_Header_Test bi trebala biti prenamijenjena u obicnu
a ne test funkciju ili implementirana u testni dio.

Debugging i sitne pogreške: U Privilges.c

Debugging i sitne pogreške: U Privilges.c funkcija add_user_to_group provjerava samo korisnika, ali ne i grupu (provjeriti i ispraviti). Sitne pogreške: komentari nisu dobro napisani, ne koristi se funkcija za traženje n-tog elementa u redu kada je to potrebno, neki if uvjeti imaju viška zagrade, u Drop.c se pojavljuje define i system_catalog (trebaju biti u Drop.h). Neke naredbe se ponavaljaju više puta jedna nakon druge, primjer je u Privileges.c result = AK_group_remove_by_name(old_name). Sve navedeno provjeriti i popraviti.

hash.c - test

  1. Hash.c
    Test pada, greske je vec spomenuo kolega Danijel Filipovic(?)
    Funkcija AK_find_delete_in_hash_index bi isto mogla biti razdvojena u 2
    funkcije(1 za trazenje i 1 za brisanje)
    Funkcija AK_find_in_hash_index poziva gore navedenu funkciju bez
    postavljene zastavice za brisanje, znaci tu bi bilo bolje tu
    implementaciju za trazenje prebacit a onda da gornja funkcija nju poziva
    ako mora nac element i dodat brisanje

Prosiriti operatore rel algebre

  1. Prosiriti operatore rel algebre kao sto su operatori selekcije i theta joina sa operatorima Like, Ilike, Similar to, regex match i Between. Postoji vec djelomična implementacija u istom paketu rel pod nazivom expression_check/.c/.h unutra bi trebalo dodati navedene implementacije operatora.

Popraviti dbman.c

Popraviti dbman.c tako da se omogući promjena veličine datoteke baze podataka putem ini-datoteke.

Popraviti uočene nedostatke u filesearch i filesort datotekama

  1. Popraviti uočene nedostatke u filesearch i filesort datotekama. Za različite vrste sortiranja provjeriti performanse prije implementacije):
  • Filesearch test ne radi ukoliko se prije njega ne pokrene filesort test
  • Popraviti dokumentaciju
  • filesort.c
    • postoje neki zakomentirani dijelovi koda za koje se nezna čemu služe
    • kod sortiranja segmenata koristiti merge sortumjesto sequential sorta čime bi se ubrzalo sortiranje
    • kod sortiranja blokova umjesto merge sorta koristiti quicksort ili heapsort

-filesearch.c
- pokušati napraviti da se pretraživanje obavlja po već sortiranim segmentima

Složiti README za buduće studente

ideja je da se budućim
studentima olakša korištenje i podešavanje razvojne okoline.

How to get started?
System requirements
Installing system requirements
Installing, Setting up, Running virtual environment Python2.7
Installing python requirements via requirements.txt
Running akdb

Isto tako dodao bih i korištenje virtualenv, pošto se na nekim
distribucijama po defaultu koristi Python v3.x.

Tesitranje
Mogu testirati rješenje putem DigitalOcean droppleta. Tako mogu provjeriti
da na čistu instalaciju(Debian 8.0) uspješno instalira sve potrebne
pakate, libove itd.

Sve te informacije postavio bih u početni README file, kao što imaju
brojni drugi repozitoriji na githubu. Npr.
https://github.com/angular/angular-seed

Refaktorirati sekvence

  1. Refaktorirati sekvence. Sekvence su napisane jako nepregledno sa implementacijiom pomocu pokazivaca. Refaktorirati kod da se korsite pomocne funkcije kako bi izbjegli implementacije slicne ovoj element->next->next->next-> itd...(Ovo sam refakturirao - Palaić - samo nisam do kraja testirao). Dokumentirati kod jer su odredene implementacije jako slabo dokumentirane.

Popraviti swig

  1. popraviti swig:
    Nekonzistentnost kod imenovanja varijabli, funkcija. Općenito korištenje
    dva jezika umjesto jednog. Loša dokumentacija oko SWIG-a, kao i sami
    komentari.

SQL executor datoteka postoje linije koda koje su zakomentirane bez opisa
zašto je zakomentirano.

Postoje deprecated datoteke koje je potrebno izbrisati
akdb/src/srv/client_test.py i akdb/src/srv/server_test.py

Nije moguće pokrenuti server zbog errora, vjerojatno uzrokovan neispravnom
swig konfiguracijom.

28) popraviti constraint_names.c i nnull.c

  1. Popraviti:
    constraint_names.c:
  • svaka petlja ima drugaciju zadacu i moze se izdvojiti u zasebnu funkciju
  • dodati provjeru za ostale constraintove

nnull.c:

  • AK_EPI macroi su postavljeni na kriva mjesta
  • AK_PRO na krivim mjestima

6) Btree.c - test

  1. Btree.c
    Test pada, greske je vec spomenuo kolega Danijel Filipovic(?)
    Funkcija void AK_btree_search_delete bi mogla biti razdvojena u 2
    funkcije(1 za trazenje elementa a 1 za brisanje)
    --> ispraviti i razdvojiti

29) popraviti reference.c

  1. Popraviti:
    reference.c
  • testovi se ruse
  • neke funkcije se ne testiraju
  • strcpy zamjeniti sa strncpy
  • memcpy u memmove
  • za pointer party (->next->next->next...) uvesti helper funkciju
  • strcmp zamjeniti sa strncmp (kod malih stringova je brzi)
  • dodati komentare u kod

12) Provjera funkcije i implementacija DROP_CONSTRAINT

  1. U Drop.c funkcija AK_drop_test_helper se ne koristi nigdje. Provjeriti zašto je to tako (je li korisna ili nije, hoće li u budućnosti biti potrebna, te ako ne obrisati). U funkciji AK_drop DROP_CONSTRAINT nije do kraja
    implementiran. Implementirati do kraja.

Popraviti swig

  1. swig - testovi ne prolaze i javljaju pogrešku:

python test.py
python -m doctest -v test.py

Ispraviti testove. Integrirati testove u MakeFile (napraviti entry make test koji će pokrenuti doctest gore)

35) Provjeriti zakomentirane dijelove

  1. Konzistentno kroz cijeli kod provjeriti zakomentirane dijelove (napraviti popis čemu služe). Ako neki od tih kodova nisu korisni (sada niti u budućnosti) izbrisati. Ako bi mogli biti korisni u budućnosti staviti komentar (na engleskom) kada i gdje i kako. Ako su sada korisni, integrirati u postojeći kod.

4) Premjestiti log.log i rec.bin u bin direktorij

Datoteke se generiraju u pogrešnom direktoriju. Ugraditi u config.ini datoteku jedan entry u kojem će pisati direktorij u koji će se pohranjivati logovi, te od tamo učitati direktorij i tamo upisivati datoteke.

(Samo log.log, rec.bin je dio drugog zadatka).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.