X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FXML%2FAutoRacingResults.hs;h=503cfff7cd80867282a2d034e371aea7a711737b;hb=75be340947abf838b6325eb450809e242b96df56;hp=817bf15cd0c10212697b8067ee4711e3951de15a;hpb=6ff7eea94fdd25ee6ee60136c749a57ac3b665f8;p=dead%2Fhtsn-import.git diff --git a/src/TSN/XML/AutoRacingResults.hs b/src/TSN/XML/AutoRacingResults.hs index 817bf15..503cfff 100644 --- a/src/TSN/XML/AutoRacingResults.hs +++ b/src/TSN/XML/AutoRacingResults.hs @@ -57,12 +57,12 @@ import Text.XML.HXT.Core ( xpWrap ) -- Local imports. -import TSN.Codegen ( - tsn_codegen_config ) +import TSN.Codegen ( tsn_codegen_config ) import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate ) import TSN.Picklers ( xp_earnings, xp_datetime, xp_time_stamp ) import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) ) import Xml ( + Child(..), FromXml(..), FromXmlFk(..), ToDb(..), @@ -210,12 +210,14 @@ instance ToDb AutoRacingResultsListingXml where type Db AutoRacingResultsListingXml = AutoRacingResultsListing -instance FromXmlFk AutoRacingResultsListingXml where +instance Child AutoRacingResultsListingXml where -- | Each 'AutoRacingResultsListingXml' is contained in (i.e. has a -- foreign key to) a 'AutoRacingResults'. -- type Parent AutoRacingResultsListingXml = AutoRacingResults + +instance FromXmlFk AutoRacingResultsListingXml where -- | To convert an 'AutoRacingResultsListingXml' to an -- 'AutoRacingResultsListing', we add the foreign key and copy -- everything else verbatim. @@ -269,7 +271,8 @@ data AutoRacingResultsRaceInformation = -- Note the apostrophe to disambiguate it from the -- AutoRacingResultsListing field. db_auto_racing_results_id' :: DefaultKey AutoRacingResults, - db_track_length :: Double, + db_track_length :: String, -- ^ Usually a Double, but sometimes a String, + -- like \"1.25 miles\". db_track_length_kph :: Double, db_laps :: Int, db_average_speed_mph :: Maybe Double, @@ -288,7 +291,7 @@ data AutoRacingResultsRaceInformation = -- data AutoRacingResultsRaceInformationXml = AutoRacingResultsRaceInformationXml { - xml_track_length :: Double, + xml_track_length :: String, xml_track_length_kph :: Double, xml_laps :: Int, xml_average_speed_mph :: Maybe Double, @@ -311,12 +314,15 @@ instance ToDb AutoRacingResultsRaceInformationXml where type Db AutoRacingResultsRaceInformationXml = AutoRacingResultsRaceInformation -instance FromXmlFk AutoRacingResultsRaceInformationXml where + +instance Child AutoRacingResultsRaceInformationXml where -- | Each 'AutoRacingResultsRaceInformationXml' is contained in -- (i.e. has a foreign key to) a 'AutoRacingResults'. -- type Parent AutoRacingResultsRaceInformationXml = AutoRacingResults + +instance FromXmlFk AutoRacingResultsRaceInformationXml where -- | To convert an 'AutoRacingResultsRaceInformationXml' to an -- 'AutoRacingResultsRaceInformartion', we add the foreign key and -- copy everything else verbatim. @@ -345,9 +351,9 @@ instance XmlImportFk AutoRacingResultsRaceInformationXml ---- ---- Database stuff. ---- +-- +-- * Database stuff. +-- instance DbImport Message where dbmigrate _ = @@ -363,8 +369,7 @@ instance DbImport Message where insert_xml_fk_ msg_id (xml_race_information m) - forM_ (xml_listings m) $ \listing -> do - insert_xml_fk_ msg_id listing + forM_ (xml_listings m) $ insert_xml_fk_ msg_id return ImportSucceeded @@ -376,7 +381,7 @@ mkPersist tsn_codegen_config [groundhog| constructors: - name: AutoRacingResults uniques: - - name: unique_auto_racing_schedule + - name: unique_auto_racing_results type: constraint # Prevent multiple imports of the same message. fields: [db_xml_file_id] @@ -391,9 +396,9 @@ mkPersist tsn_codegen_config [groundhog| reference: onDelete: cascade -# Note the apostrophe in the foreign key. This is to disambiguate -# it from the AutoRacingResultsListing foreign key of the same name. -# We strip it out of the dbName. + # Note the apostrophe in the foreign key. This is to disambiguate + # it from the AutoRacingResultsListing foreign key of the same name. + # We strip it out of the dbName. - entity: AutoRacingResultsRaceInformation dbName: auto_racing_results_race_information constructors: @@ -523,7 +528,7 @@ pickle_race_information = xp11Tuple (-- I can't think of another way to get both the -- TrackLength and its KPH attribute. So we shove them -- both in a 2-tuple. This should probably be an embedded type! - xpElem "TrackLength" $ xpPair xpPrim (xpAttr "KPH" xpPrim) ) + xpElem "TrackLength" $ xpPair xpText (xpAttr "KPH" xpPrim) ) (xpElem "Laps" xpInt) (xpOption $ xpElem "AverageSpeedMPH" xpPrim) (xpOption $ xpElem "AverageSpeedKPH" xpPrim)