{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}

module Database.Relational.Schema.SQLServer.Columns where

import GHC.Generics (Generic)
import Data.Int (Int32)
import Database.Relational.TH (defineTableTypesAndRecord)

import Database.Relational.Schema.SQLServer.Config (config)


$(defineTableTypesAndRecord config
  "sys" "columns"
  [
  -- column                schema  type                length   NULL
  -- --------------------- ------- ------------------- -------- ------
  -- object_id             sys     int                        4 No
    ("object_id", [t|Int32|]),
  -- name                  sys     sysname(nvarchar)        128 Yes
    ("name", [t|Maybe String|]),
  -- column_id             sys     int                        4 No
    ("column_id", [t|Int32|]),
  -- system_type_id        sys     tinyint                    1 No
    --("system_type_id", [t|Int32|]),
  -- user_type_id          sys     int                        4 No
    ("user_type_id", [t|Int32|]),
  -- max_length            sys     smallint                   2 No
    --("max_length", [t|Int32|]),
  -- precision             sys     tinyint                    1 No
    --("precision", [t|Int32|]),
  -- scale                 sys     tinyint                    1 No
    --("scale", [t|Int32|]),
  -- collation_name        sys     sysname(nvarchar)        128 Yes
    --("collation_name", [t|Maybe String|]),
  -- is_nullable           sys     bit                        1 Yes
    ("is_nullable", [t|Maybe Bool|])--,
  -- is_ansi_padded        sys     bit                        1 No
    --("is_ansi_padded", [t|Bool|]),
  -- is_rowguidcol         sys     bit                        1 No
    --("is_rowguidcol", [t|Bool|]),
  -- is_identity           sys     bit                        1 No
    --("is_identity", [t|Bool|]),
  -- is_computed           sys     bit                        1 No
    --("is_computed", [t|Bool|]),
  -- is_filestream         sys     bit                        1 No
    --("is_filestream", [t|Bool|]),
  -- is_replicated         sys     bit                        1 Yes
    --("is_replicated", [t|Maybe Bool|]),
  -- is_non_sql_subscribed sys     bit                        1 Yes
    --("is_non_sql_subscribed", [t|Maybe Bool|]),
  -- is_merge_published    sys     bit                        1 Yes
    --("is_merge_published", [t|Maybe Bool|]),
  -- is_dts_repllicated    sys     bit                        1 Yes
    --("is_dts_replicated", [t|Maybe Bool|]),
  -- is_xml_document       sys     bit                        1 No
    --("is_xml_document", [t|Bool|]),
  -- xml_collection_id     sys     int                        4 No
    --("xml_collection_id", [t|Int32|]),
  -- default_object_id     sys     int                        4 No
    --("default_object_id", [t|Int32|]),
  -- rule_object_id        sys     int                        4 No
    --("rule_object_id", [t|Int32|]),
  -- is_sparse             sys     bit                        1 Yes
    --("is_sparse", [t|Maybe Bool|]),
  -- is_column_set         sys     bit                        1 Yes
    --("is_column_set", [t|Maybe Bool|])
  ]
  [''Show, ''Generic])
