contrib/benitlux: add `Beer::id`
authorAlexis Laferrière <alexis.laf@xymus.net>
Sun, 25 Oct 2015 17:30:47 +0000 (13:30 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 9 Mar 2016 20:10:06 +0000 (15:10 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

contrib/benitlux/src/benitlux_daily.nit
contrib/benitlux/src/benitlux_db.nit
contrib/benitlux/src/benitlux_model.nit
contrib/benitlux/src/correct.nit

index f9e8400..27b8169 100644 (file)
@@ -175,7 +175,8 @@ class Benitlux
                for line in lines do
                        var parts = line.split("- ")
                        if parts.length >= 2 then
-                               beers.add new Beer(parts[0].trim, parts[1].trim)
+                               # Let the DB set the id, use 0 temporary
+                               beers.add new Beer(0, parts[0].trim, parts[1].trim)
                        end
                end
                return beers
index 0f0e8c7..14cf229 100644 (file)
@@ -95,23 +95,23 @@ class DB
                var events = new BeerEvents
 
                # New
-               var stmt = select("name, desc FROM beers WHERE " +
+               var stmt = select("ROWID, name, desc FROM beers WHERE " +
                                  "ROWID IN (SELECT beer FROM daily WHERE day=(SELECT MAX(day) FROM daily)) AND " +
                                  "NOT ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
                if stmt == null then return null
                for row in stmt do events.new_beers.add row.to_beer
 
                # Gone
-               stmt = select("name, desc FROM beers WHERE " +
-                                 "NOT ROWID IN (SELECT beer FROM daily WHERE day=(SELECT MAX(day) FROM daily)) AND " +
-                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+               stmt = select("ROWID, name, desc FROM beers WHERE " +
+                             "NOT ROWID IN (SELECT beer FROM daily WHERE day=(SELECT MAX(day) FROM daily)) AND " +
+                             "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
                if stmt == null then return null
                for row in stmt do events.gone_beers.add row.to_beer
 
                # Fix
-               stmt = select("name, desc FROM beers WHERE " +
-                                 "ROWID IN (SELECT beer FROM daily WHERE day=(SELECT MAX(day) FROM daily)) AND " +
-                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+               stmt = select("ROWID, name, desc FROM beers WHERE " +
+                             "ROWID IN (SELECT beer FROM daily WHERE day=(SELECT MAX(day) FROM daily)) AND " +
+                             "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
                if stmt == null then return null
                for row in stmt do events.fix_beers.add row.to_beer
 
@@ -123,11 +123,20 @@ class DB
        # Return `null` on error.
        fun beers: nullable Array[Beer]
        do
-               var stmt = select("name, desc FROM beers")
+               var stmt = select("rowid, name, desc FROM beers")
                if stmt == null then return null
                return [for row in stmt do row.to_beer]
        end
 
+       # Load beer information from its database id
+       fun beer_from_id(id: Int): nullable Beer
+       do
+               var stmt = select("ROWID, name, desc FROM beers WHERE ROWID = {id}")
+               if stmt == null then return null
+               for row in stmt do return row.to_beer
+               return null
+       end
+
        # Days where `beer` was available, all known days if `beer == null`
        #
        # Return `null` on error.
@@ -172,5 +181,5 @@ end
 
 redef class StatementRow
        # Convert this BD row to a `Beer`
-       fun to_beer: Beer do return new Beer(self[0].to_s, self[1].to_s)
+       fun to_beer: Beer do return new Beer(self[0].to_i, self[1].to_s, self[2].to_s)
 end
index 4649a5c..a186212 100644 (file)
@@ -23,6 +23,9 @@ import serialization
 class Beer
        auto_serializable
 
+       # Database id
+       var id: Int
+
        # Name of the beer
        var name: String
 
index 3c2384c..b840e3d 100644 (file)
@@ -68,7 +68,7 @@ redef class DB
                # Merge days of `corrections` to `beer`
                for from, to in corrections do
                        if to == beer.name then
-                               var missing_days = super(new Beer(from, ""))
+                               var missing_days = super(new Beer(0, from, ""))
                                if missing_days != null then days.add_all missing_days
                        end
                end