Sign.hs revision b87efd3db0d2dc41615ea28669faf80fc1b48d56
8e5fce1f9ceba17dd7e3ff0eb287e1e999c14249Mark AndrewsModule : $Header$
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntDescription : signaturefor Relational Schemes
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntCopyright : Dominik Luecke, Uni Bremen 2008
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntLicense : GPLv2 or higher or LIZENZ.txt
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntMaintainer : luecke@informatik.uni-bremen.de
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntStability : provisional
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntPortability : portable
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntSignature for Relational Schemes
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSDatatype(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSRawSymbol
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSColumn(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSTable(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSTables(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSMorphism(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSTMap(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , emptyRSSign
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , isRSSubsig
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , concatComma
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , rsInclusion
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , comp_rst_mor
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , RSSymbol(..)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntimport qualified Data.Map as Map
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntimport qualified Data.Set as Set
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunttype RSIsKey = Bool
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntdata RSDatatype = RSboolean | RSbinary | RSdate | RSdatetime | RSdecimal | RSfloat |
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt RSinteger | RSstring | RStext | RStime | RStimestamp | RSdouble |
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt RSnonPosInteger | RSnonNegInteger | RSlong | RSPointer
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt deriving (Eq, Ord)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunttype RSRawSymbol = Id
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntdata RSSymbol = STable Id | -- id of a table
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt Id -- id of the symbol
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt Id -- id of the table
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt RSDatatype -- datatype of the symbol
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt RSIsKey -- is it a key?
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt deriving (Eq,Ord,Show)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntinstance GetRange RSSymbol
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntdata RSColumn = RSColumn
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt c_name :: Id
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , c_data :: RSDatatype
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , c_key :: RSIsKey
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt deriving (Eq, Ord)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntdata RSTable = RSTable
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt t_name :: Id
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , columns :: [RSColumn]
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , rsannos :: [Annotation]
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt , t_keys :: Set.Set (Id, RSDatatype)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt deriving (Eq)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntdata RSTables = RSTables
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt tables :: Set.Set RSTable
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt deriving (Eq, Ord)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Huntinstance GetRange RSTables
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntisRSSubsig :: RSTables -> RSTables -> Bool
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntisRSSubsig t1 t2 = t1 <= t2
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntuniteSig :: (Monad m) => RSTables -> RSTables -> m RSTables
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan HuntuniteSig s1 s2 =
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt if s1 `isRSSubsig` s2
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt return $ RSTables $ (tables s1) `Set.union` (tables s2)
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt if s2 `isRSSubsig` s1
501941f0b6cce74c2ff75b10aff3f230d5d37e4cEvan Hunt return $ RSTables $ (tables s1) `Set.union` (tables s2)
return $ RSTables $ (tables s1) `Set.union` (tables s2)
col_map :: Map.Map Id Id
, table_map :: Map.Map Id Id
, column_map :: Map.Map Id RSTMap
apply_comp_c_map :: RSTable -> Map.Map Id Id -> RSMorphism -> RSMorphism
in case Map.lookup i $ column_map imap of
let c_set = Map.fromList . map (\ c -> (c_name c, ())) $ columns rst
(Map.findWithDefault i i t_map) c2)
t1 = Set.toList $ tables d1
t_set = Map.fromList $ map (\ t -> (t_name t, ())) t1
cm_map = Map.fromList
tables = Set.empty
Set.toList $ tables t
foldl (\y x -> Map.insert (t_name x) (RSTMap $ makeRSTMap x) y)
Set.toList $ tables t1
foldl (\y x -> Map.insert (t_name x) (RSTMap $ makeRSTMap x) y)
(unlines $ map show $ Set.toList $ tables t)
sc1 = Set.fromList $ columns t1
sc2 = Set.fromList $ columns t2
t_name t1 == t_name t2 && sc1 `Set.isSubsetOf` sc2
sc1 = Set.fromList $ columns t1
sc2 = Set.fromList $ columns t2
t_name t1 == t_name t2 && sc1 `Set.isProperSubsetOf` sc2
t1 = Set.map t_name $ (tables) s1
t2 = Set.map t_name $ (tables) s2