packages feed

ta-0.1: Database/TA/Core/Nucleo.hs

{-#  language  RankNTypes  #-}

-- | Definiciones básicas utilizadas por otros módulos de TA.
--   Leonel Fonseca. 2010.


module Database.TA.Core.Nucleo  
                 ( ColInfo (..)
                 , emptyColInfo
                 , QueryColInfo (..)
                 , GeneradorColInfo
                 , GeneradorQueryColInfo
                 , ErrorMsg, Nombre, NomTabla, NomColumna, TipoBD
                 , Declaraciones, Condicion
                 , InstanciaCR (..)
                 , CR     (..)
                 )

where


import  Language.Haskell.TH


{- | 
     Descripción de una tabla de la base de datos
     en términos de las columnas que la componen
    
   Se asume que:

   1) Cada elemento ColInfo describe una columna de la tabla.

   2) La información de una tabla se recibe denormalizada, 
      como una lista de ColInfo. 

   3) La lista viene ordenada por número de columna.
      Si esta presunción debe removerse, entonces agregue
      un campo column_id para controlar el orden de las columas.
-}


data  ColInfo  =  ColInfo 
      {  table_name     :: String
      ,  column_name    :: String
      ,  data_type      :: Maybe String 
      ,  data_length    :: Int
      ,  data_precision :: Maybe Int
      ,  data_scale     :: Maybe Int 
      ,  nullable       :: Maybe String
      }  deriving  (Read, Show, Eq, Ord) 



emptyColInfo  ::  ColInfo
emptyColInfo  =   ColInfo "" "" Nothing 0 Nothing Nothing Nothing



-- | Usado en TABDInfraestructura.
--   Para los meta-datos de una consulta.


data  QueryColInfo = QueryColInfo 
      {  col_type         ::  Int
      ,  col_max_len      ::  Int 
      ,  col_name         ::  String 
      ,  col_schema_name  ::  Maybe String 
      ,  col_precision    ::  Int 
      ,  col_scale        ::  Int 
      ,  col_null_ok      ::  Bool
      }
      deriving (Eq, Ord, Read, Show)



-- | La funciones que usan la información de columnas
--   para generar un nuevo valor o nuevo código. 


type  GeneradorColInfo a      = [ColInfo] -> a 

type  GeneradorQueryColInfo a = [QueryColInfo] -> a


type  ErrorMsg      =  String
type  Nombre        =  String
type  NomTabla      =  String
type  NomColumna    =  String
type  TipoBD        =  String
type  Declaraciones =  String
type  Condicion     =  String


-- | Operaciones Relacionales

data  InstanciaCR 
   =  Select  { with_    :: [Declaraciones]
              , select_  :: [NomColumna]
              , from_    :: [NomTabla]
              , where_   :: [Condicion]
              , order_   :: [NomColumna]
              , group_   :: [NomColumna]
              , having_  :: [Condicion]
              }
   |  Insert String 
   |  Delete String 
   |  Update String 
   |  Block String 
      deriving (Read, Show, Eq, Ord)

-- | Comando relacional tiene un nombre
--   prefijo o sufijo en el nombre de cada
--   columna y una operación relacional.

data  CR         =   CR
      { nombre   ::  Nombre
      , prefijo  ::  String
      , sufijo   ::  String
      , op       ::  InstanciaCR 
      }
      deriving (Read, Show, Eq, Ord)
     


-- eof