Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
pp:2024:tema2 [2024/04/08 13:56] alexandra.udrescu01 |
pp:2024:tema2 [2024/04/23 23:06] (current) alexandra.udrescu01 [Operatii cu una sau mai multe Tabele] |
||
---|---|---|---|
Line 3: | Line 3: | ||
<note important> | <note important> | ||
- | **DEADLINE TODO** | + | **DEADLINE 5 MAI 23:59** |
* Temele trebuie submise pe curs.upb.ro, in assignment-ul numit ''Tema 2 Scala''. | * Temele trebuie submise pe curs.upb.ro, in assignment-ul numit ''Tema 2 Scala''. | ||
Line 15: | Line 15: | ||
* **var** (**val** este ok!) | * **var** (**val** este ok!) | ||
</note> | </note> | ||
- | <note>Scheletul se poate găsi la: TODO</note> | + | <note>Scheletul se poate găsi la:{{:pp:2024:skel2.zip|}}</note> |
==== Scopul Temei ==== | ==== Scopul Temei ==== | ||
Line 97: | Line 97: | ||
</code> | </code> | ||
- | **1.4.** Definiti operatia de sortare a liniilor din tabel dupa o anumita coloana. TODO: keep it? | + | **1.4.** Definiti operatia de sortare a liniilor din tabel dupa o anumita coloana. |
<code scala> | <code scala> | ||
def sort(column: String): Table = ??? | def sort(column: String): Table = ??? | ||
Line 166: | Line 166: | ||
**2.2.** Pentru a simplifica definirea conditiilor de filtrare, vom defini cateva operatori care sa ne permita sa scriem cod mai concis. | **2.2.** Pentru a simplifica definirea conditiilor de filtrare, vom defini cateva operatori care sa ne permita sa scriem cod mai concis. | ||
Vom folosi urmatorii operatori ce extind clasa FilterCond: | Vom folosi urmatorii operatori ce extind clasa FilterCond: | ||
- | - == - pentru a verifica egalitatea a doua conditii de filtrare. | + | - === - pentru a verifica egalitatea a doua conditii de filtrare. |
- && - pentru a face conjunctia a doua conditii de filtrare. | - && - pentru a face conjunctia a doua conditii de filtrare. | ||
- || - pentru a face disjunctia a doua conditii de filtrare. | - || - pentru a face disjunctia a doua conditii de filtrare. | ||
Line 212: | Line 212: | ||
</code> | </code> | ||
- | **3.1.**. Implementati functia create, care primeste numele unei tabele si o lista de coloane si creeaza o noua tabela cu acele coloane doar daca numele tabelei nu exista deja in baza de date. Daca numele tabelei exista, functia va intoarce baza de date nemodificata. | + | **3.1.**. Implementati functia create, care primeste numele unei tabele si creeaza o noua tabela doar daca numele tabelei nu exista deja in baza de date. Daca numele tabelei exista, functia va intoarce baza de date nemodificata. |
<code scala> | <code scala> | ||
- | def create(tableName: String, columns: List[String]): Database = ??? | + | def create(tableName: String): Database = ??? |
</code> | </code> | ||
Line 250: | Line 250: | ||
* Numele coloanei utilizate pentru join in tabelul final va fi preluat din primul tabel. | * Numele coloanei utilizate pentru join in tabelul final va fi preluat din primul tabel. | ||
* Se va intoarce eroare cand unul din tabele nu exista. Daca un tabel este gol, se va intoarce celălalt tabel. | * Se va intoarce eroare cand unul din tabele nu exista. Daca un tabel este gol, se va intoarce celălalt tabel. | ||
+ | * Liniile din rezultat sunt in ordinea: linii ce au intrări in ambele tabele, linii doar in prima tabela, linii doar in a2a tabela. | ||
<hidden Exemplu> | <hidden Exemplu> | ||
Line 419: | Line 420: | ||
<code scala> def insertLinesThenSort(db: Database): Option[Table] = ??? </code> | <code scala> def insertLinesThenSort(db: Database): Option[Table] = ??? </code> | ||
- | **5.3** Combina tabelele People si Hobbies pe baza coloanelor name. Filtreaza rezultatul astfel incat sa ramana doar young adults cu varsta sub 25 ani, | + | **5.4.** Combina tabelele People si Hobbies pe baza coloanelor name. Filtreaza rezultatul astfel incat sa ramana doar young adults cu varsta sub 25 ani, |
al caror nume incepe cu 'J' si care au un hobby. In final se extrag doar coloanele name si hobby. | al caror nume incepe cu 'J' si care au un hobby. In final se extrag doar coloanele name si hobby. | ||
- | <code scala> def yougAdultHobbiesJ(db: Database): Option[Table] = ??? </code> | + | <code scala> def youngAdultHobbiesJ(db: Database): Option[Table] = ??? </code> |
- | **5.4** ??? | + | ==== Testare ==== |
+ | |||
+ | ''Scalatest'' este o biblioteca de testare pentru Scala care suporta mai multe stiluri de scriere a testelor, inclusiv testarea traditionala unitara. ''Scalactic'' este o biblioteca destinata sa faciliteze scrierea de cod mai clar si mai intretinabil in Scala, utilizata in combinatie cu Scalatest pentru a imbunatati claritatea si precizia testelor. | ||
+ | |||
+ | Pentru a rula testele utilizand aceasta configuratie, puteti folosi comanda de mai jos in terminal, de la radacina proiectului. Acest lucru va compila si executa toate testele definite in proiect care depind de Scalatest si Scalactic pentru a verifica corectitudinea codului. | ||
+ | |||
+ | <code> sbt test </code> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Submisie arhiva ===== | ||
+ | <note important> | ||
+ | Veti incarca pe moodle o arhiva ce contine, in radacina acesteia, folderul ''src'' al proiectului vostru, fisierul ''build.sbt'' si un fisier text, intitulat ''ID.txt'' ce contine o singura linie, si anume id-ul vostru anonim (pe care il puteti gasi pe moodle la assignment-ul ''tokenID''). </note> | ||
+ | |||
+ | Exemplu structura arhiva: | ||
+ | <code> | ||
+ | archive.zip | ||
+ | |-src/ | ||
+ | | |-main/ | ||
+ | | | |-scala/ | ||
+ | | | | | - ... <fisierele cu sursa scala> | ||
+ | |-build.sbt | ||
+ | |-ID.txt | ||
+ | </code> | ||
+ | |||
+ | ==== Puncatje ==== | ||
+ | |||
+ | Pentru ca avem cam multe exercitii de implementat, găsiți mai jos un tabel cu punctajele grupate: | ||
+ | |||
+ | ^ Parte a temei ^ Functionalitate ^ Punctaj ^ | ||
+ | | Table | toString | 0.5 | | ||
+ | | Table | insert | 1.5 | | ||
+ | | Table | delete | 1.5 | | ||
+ | | Table | sort | 1.5 | | ||
+ | | Table | select | 1.5 | | ||
+ | | Table | apply | 1.5 | | ||
+ | | Table | filter | 4.5 | | ||
+ | | Table | update | 4.5 | | ||
+ | | **TABLE** | **TOTAL** | **17** | | ||
+ | | Filter | Field | 4 | | ||
+ | | Filter | Compound | 3 | | ||
+ | | Filter | Not | 2 | | ||
+ | | Filter | And | 2 | | ||
+ | | Filter | Or | 2 | | ||
+ | | Filter | Equal | 2 | | ||
+ | | Filter | Any | 2 | | ||
+ | | Filter | All | 2 | | ||
+ | | Filter | implicit equal | 0.5 | | ||
+ | | Filter | implicit or | 0.5 | | ||
+ | | Filter | implicit and | 0.5 | | ||
+ | | Filter | implicit not | 0.5 | | ||
+ | | Filter | implicit touple2Field | 1 | | ||
+ | | **FILTER** | **TOTAL** | **22** | | ||
+ | | Database | create | 1.5 | | ||
+ | | Database | drop | 1.5 | | ||
+ | | Database | selectTables | 1.5 | | ||
+ | | Database | indexing | 1.5 | | ||
+ | | Database | join | 10 | | ||
+ | | **DATABASE** | **TOTAL** | **16** | | ||
+ | | QueryLanguage | CreateTable | 2 | | ||
+ | | QueryLanguage | DropTable | 2 | | ||
+ | | QueryLanguage | Create & Drop implicit | 1 | | ||
+ | | QueryLanguage | SelectTables | 2 | | ||
+ | | QueryLanguage | Select implicit | 1 | | ||
+ | | QueryLanguage | JoinTables | 2 | | ||
+ | | QueryLanguage | Join implicit | 1 | | ||
+ | | QueryLanguage | InsertRow | 2 | | ||
+ | | QueryLanguage | Insert implicit | 1 | | ||
+ | | QueryLanguage | UpdateRow | 2 | | ||
+ | | QueryLanguage | Update implicit | 1 | | ||
+ | | QueryLanguage | SortRow | 2 | | ||
+ | | QueryLanguage | Sort implicit | 1 | | ||
+ | | QueryLanguage | DeleteRow | 2 | | ||
+ | | QueryLanguage | Delete implicit | 1 | | ||
+ | | QueryLanguage | FilterRows | 2 | | ||
+ | | QueryLanguage | Filter implicit | 1 | | ||
+ | | QueryLanguage | SelectColumns | 2 | | ||
+ | | QueryLanguage | Extract implicit | 1 | | ||
+ | | **QUERY LANGUAGE** | **TOTAL** | **30** | | ||
+ | | Queries | queryT | 0 | | ||
+ | | Queries | queryB | 0 | | ||
+ | | Queries | killJackSparrow | 5 | | ||
+ | | Queries | insertLinesThenSort | 5 | | ||
+ | | Queries | youngAdultHobbies | 5 | | ||
+ | | **QUERIES** | **TOTAL** | **15** | | ||
+ | | ''TEMA 2'' | ''TOTAL'' | ''100'' | | ||
+ | |||
- | **5.5** ??? |