Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 422: Line 423:
 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>​ 
 + 
 +==== 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.**