Advertisement
ZivkicaI

SLICK1

Jan 8th, 2020
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 5.72 KB | None | 0 0
  1. import scala.concurrent.{Await, Future}
  2. import scala.concurrent.ExecutionContext.Implicits.global
  3. import scala.concurrent.duration.Duration
  4. import slick.basic.DatabasePublisher
  5. import slick.dbio.Effect
  6. import slick.jdbc.H2Profile.api._
  7. import slick.lifted.QueryBase
  8. import slick.sql.FixedSqlAction
  9.  
  10. object HelloSlick1 extends App{
  11.   val zaFilter = RandomCaseClass(None,None)
  12.  
  13.   val db = Database.forConfig("h2mem1")
  14.   try {
  15.  
  16.     // The query interface for the Suppliers table
  17.     val suppliers: TableQuery[Suppliers] = TableQuery[Suppliers]
  18.  
  19.     // the query interface for the Coffees table
  20.     val coffees: TableQuery[Coffees] = TableQuery[Coffees]
  21.  
  22.     val setupAction: DBIO[Unit] = DBIO.seq(
  23.       // Create the schema by combining the DDLs for the Suppliers and Coffees
  24.       // tables using the query interfaces
  25.       (suppliers.schema ++ coffees.schema).create,
  26.  
  27.       // Insert some suppliers
  28.       suppliers += (101, "Acme, Inc.", "99 Market Street", "Groundsville", "CA", "95199"),
  29.       suppliers += ( 49, "Superior Coffee", "1 Party Place", "Mendocino", "CA", "95460"),
  30.       suppliers += (150, "The High Ground", "100 Coffee Lane", "Meadows", "CA", "93966"),
  31.       suppliers += (200, "Kafe Uvoz izvoz", "Pero nakov bb", "Przino", "MK", "1050")
  32.     )
  33.  
  34.     val setupFuture: Future[Unit] = db.run(setupAction)
  35.     val f = setupFuture.flatMap { _ =>
  36.  
  37.       // Insert some coffees (using JDBC's batch insert feature)
  38.       val insertAction:DBIO[Option[Int]]= coffees ++= Seq (
  39.         ("Colombian",         101, 7.99, 0, 0),
  40.         ("French_Roast",       150, 8.99, 0, 0),
  41.         ("Espresso",          150, 15.99, 0, 0),
  42.         ("Colombian_Decaf",   101, 8.99, 0, 0),
  43.         ("French_Roast_Decaf", 49, 9.99, 0, 0),
  44.         ("Grand", 200, 20.99, 0, 0),
  45.         ("Kafe_C", 200, 30.99, 0, 0)
  46.       )
  47.  
  48.       db.run(insertAction)
  49.  
  50.     }.flatMap{ _ =>
  51.         println(suppliers.result.statements.mkString)
  52.       db.run(suppliers.result)
  53.     }.flatMap{ _ =>
  54.       val kveri: Query[Rep[String], String, Seq] = coffees
  55.         .filter(cof=> cof.supID === 101)
  56.         .map(x=>x.name)
  57.       println(kveri.result.statements.mkString)
  58.       db.run(kveri.result)
  59.     }.flatMap { _ =>      //site kafinja da gi updatenam shto go sodrzat imeto Colombian so toa shto cenata kje im ja smenam UPDATE!!!
  60.  
  61.       val updateQuery = coffees.filter(_.name.like("Colombian%")).map(_.price)
  62.  
  63.       val updateAction: DBIO[Int] = updateQuery.update(9999)
  64.  
  65.       db.run(updateAction)
  66.  
  67.     }.flatMap{ _ =>
  68.  
  69.       val i = coffees
  70.  
  71.       db.run(i.result)
  72.  
  73.  
  74.     }.flatMap{ _ =>        //da gi izbrisham site kafinja na koi shto cenata im e 9999 DELETE!!!
  75.       val zaBrishenje = coffees.filter(_.price === 9999.0)
  76.  
  77.       val deleteAction: FixedSqlAction[Int, NoStream, Effect.Write] =zaBrishenje.delete
  78.       db.run(deleteAction)
  79.     }.flatMap{_ =>
  80.       val c= coffees
  81.       db.run(c.result)
  82.  
  83.     }.flatMap{ _ =>     // da dodadam ushte edno kafe vo kafinjata     INSERT!!!
  84.       val insertActions = DBIO.seq(
  85.         coffees += ("Bravo", 101, 99.99, 0, 0))
  86.  
  87.       db.run(insertActions)
  88.  
  89.     }.flatMap { _ =>
  90.  
  91.       db.run(coffees.result)
  92.  
  93.     }.flatMap { _ =>              //SO FOR JOIN DA NAPRAAM NA COFFEE I NA SUPPLIERS
  94.       val joinQuery = for {
  95.         (c,s) <- coffees join suppliers
  96.       } yield (c.name, s.name)
  97.  
  98.       db.run(joinQuery.result)
  99.     }.flatMap{ _ =>                //BEZ FOR JOIN NA COFFEE I NA SUPPLIERS I SAMO IMETO NA KAFETO DA GI ZEMAM I IMETO NA SUPPLIEROT
  100.       val q= coffees join suppliers on (_.supID === _.id)
  101.       val p=q.map{ case (kafe, suplier) =>
  102.         (kafe.name, suplier.name)
  103.       }
  104.  
  105.       db.run(p.result)
  106.     }.flatMap{_ =>          // FilterIf i FilterOpt upotreba(za da nemam eden kup if-ovi od site moznosti na some-none, none-none....)
  107.       val ime:Option[String] =Some("Espresso")
  108.       val supId:Option[Int] = None//Some(150)
  109.       val temp = 300
  110.       val temp2 = 150
  111.  
  112.       //val p = coffees.filter(_.name === ime.get)  //get iako e nebezbedno tuka e taman zashto proveruvam dali e NONE
  113.       val xx = coffees
  114.         .filterOpt(ime){case (cof,i) => cof.name === i }
  115.         .filterOpt(supId){ case (cof,sId) => cof.supID === sId}
  116.         .filterIf(temp-temp2 == 150) { c=>c.supID === 49}
  117.       println(xx.result.statements.mkString)
  118.       db.run(xx.result)
  119.     }.flatMap { _ =>
  120.  
  121.       db.run((coffees.groupBy(_.supID).map{ case (sId, cof) => sId -> cof.map{x => x.price}.avg }).result)
  122.  
  123.     }.flatMap { _ =>  //da gi grupiram site supp po ime i da vratam kolku kafinja ima sekoj od niv(INT)
  124.       val q = coffees.join(suppliers).on(_.supID === _.id) //ova vrakja dve tabeli
  125.         .groupBy{ case (coffees, sups) => sups.name }.map{ case (supName, group) =>
  126.           supName -> group.map{
  127.             case(cof, sup) => cof.name
  128.           }.length
  129.         }
  130.       db.run(q.result)
  131.     }.flatMap{_ =>
  132.       val q = coffees.join(suppliers).on(_.supID === _.id)//zaradi toa shto ova vrakja tuple od dvete tabeli
  133.           .map{ case (coffee, supp) => coffee.name}//vaka go zemam samo imeto na kafeto
  134.       db.run(q.result)
  135.  
  136.     }.flatMap{ _ => // mozam i klasichen SQL DA SI NAPISHAM na sledniov nachin !!
  137.       val state = "CA"
  138.      
  139.       val plainQuery = sql"select SUP_NAME from SUPPLIERS where STATE = $state".as[String]
  140.       db.run(plainQuery)
  141.     }
  142.  
  143.    
  144.       /*.flatMap { _ =>
  145.  
  146.         /* Streaming */
  147.  
  148.         val coffeeNamesAction: StreamingDBIO[Seq[String], String] =
  149.           coffees.map(_.name).result
  150.  
  151.         val coffeeNamesPublisher: DatabasePublisher[String] =
  152.           db.stream(coffeeNamesAction)
  153.  
  154.         coffeeNamesPublisher.foreach(println)
  155.  
  156.       }*/
  157.  
  158.     val jj = Await.result(f, Duration.Inf)
  159.     println(jj)
  160.  
  161.   } finally db.close
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement