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