relational-schemas 0.1.2.2 → 0.1.3.0
raw patch · 2 files changed
+36/−9 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Database.Relational.Schema.DB2Syscat.Columns: insertQueryColumns :: Relation p_asSK Columns -> InsertQuery p_asSK
+ Database.Relational.Schema.DB2Syscat.Columns: insertQueryColumns :: Relation p_aJu2 Columns -> InsertQuery p_aJu2
- Database.Relational.Schema.MySQLInfo.Columns: insertQueryColumns :: Relation p_a8RF Columns -> InsertQuery p_a8RF
+ Database.Relational.Schema.MySQLInfo.Columns: insertQueryColumns :: Relation p_a9Er Columns -> InsertQuery p_a9Er
- Database.Relational.Schema.OracleDataDictionary.TabColumns: insertQueryDbaTabColumns :: Relation p_ad6L DbaTabColumns -> InsertQuery p_ad6L
+ Database.Relational.Schema.OracleDataDictionary.TabColumns: insertQueryDbaTabColumns :: Relation p_agiL DbaTabColumns -> InsertQuery p_agiL
- Database.Relational.Schema.PgCatalog.PgAttribute: insertQueryPgAttribute :: Relation p_aoFW PgAttribute -> InsertQuery p_aoFW
+ Database.Relational.Schema.PgCatalog.PgAttribute: insertQueryPgAttribute :: Relation p_aBX8 PgAttribute -> InsertQuery p_aBX8
- Database.Relational.Schema.PgCatalog.PgType: insertQueryPgType :: Relation p_alQd PgType -> InsertQuery p_alQd
+ Database.Relational.Schema.PgCatalog.PgType: insertQueryPgType :: Relation p_awNM PgType -> InsertQuery p_awNM
- Database.Relational.Schema.SQLServerSyscat.Columns: insertQueryColumns :: Relation p_ajYK Columns -> InsertQuery p_ajYK
+ Database.Relational.Schema.SQLServerSyscat.Columns: insertQueryColumns :: Relation p_atl4 Columns -> InsertQuery p_atl4
- Database.Relational.Schema.SQLServerSyscat.Types: insertQueryTypes :: Relation p_aiLe Types -> InsertQuery p_aiLe
+ Database.Relational.Schema.SQLServerSyscat.Types: insertQueryTypes :: Relation p_ar7F Types -> InsertQuery p_ar7F
- Database.Relational.Schema.SQLite3Syscat.IndexInfo: insertQueryIndexInfo :: Relation p_ahTU IndexInfo -> InsertQuery p_ahTU
+ Database.Relational.Schema.SQLite3Syscat.IndexInfo: insertQueryIndexInfo :: Relation p_aoU6 IndexInfo -> InsertQuery p_aoU6
- Database.Relational.Schema.SQLite3Syscat.IndexList: insertQueryIndexList :: Relation p_agXJ IndexList -> InsertQuery p_agXJ
+ Database.Relational.Schema.SQLite3Syscat.IndexList: insertQueryIndexList :: Relation p_anbM IndexList -> InsertQuery p_anbM
- Database.Relational.Schema.SQLite3Syscat.TableInfo: insertQueryTableInfo :: Relation p_ahk7 TableInfo -> InsertQuery p_ahk7
+ Database.Relational.Schema.SQLite3Syscat.TableInfo: insertQueryTableInfo :: Relation p_anQd TableInfo -> InsertQuery p_anQd
Files
relational-schemas.cabal view
@@ -1,5 +1,5 @@ name: relational-schemas-version: 0.1.2.2+version: 0.1.3.0 synopsis: RDBMSs' schema templates for relational-query description: This package contains some RDBMSs' schema structure definitions. Supported RDBMS schemas are below:
src/Database/Relational/Schema/SQLite3.hs view
@@ -8,11 +8,13 @@ import qualified Data.Map as Map import qualified Database.Relational.Schema.SQLite3Syscat.TableInfo as TableInfo +import Control.Arrow (first) import Control.Applicative ((<|>)) import Data.ByteString (ByteString)-import Data.Char (toLower)-import Data.Int (Int64)+import Data.Char (toLower, toUpper)+import Data.Int (Int8, Int16, Int32, Int64) import Data.Map (Map)+import Data.Time (Day, LocalTime) import Database.Record.Instances () import Database.Relational.Query (Query) import Database.Relational.Query.Type (unsafeTypedQuery)@@ -23,19 +25,40 @@ --{-# ANN module "HLint: ignore Redundant $" #-} +-- <https://www.sqlite.org/datatype3.html>+-- SQLite3 is dynamic typing,+-- so assign narrower constraints in this default mapping.+-- Using upper case typenames along with SQLite3 document. mapFromSqlDefault :: Map String TypeQ mapFromSqlDefault =- Map.fromList [ ("integer", [t|Int64|])- , ("real", [t|Double|])- , ("text", [t|String|])- , ("blob", [t|ByteString|])+ Map.fromList [ ("INT", [t|Int32|])+ , ("INTEGER", [t|Int32|])+ , ("TINYINT", [t|Int8|])+ , ("SMALLINT", [t|Int16|])+ , ("MEDIUMINT", [t|Int32|])+ , ("BIGINT", [t|Int64|])+ , ("INT2", [t|Int16|])+ , ("INT8", [t|Int64|])++ , ("CHARACTER", [t|String|])+ , ("VARCHAR", [t|String|])+ , ("TEXT", [t|String|])++ , ("BLOB", [t|ByteString|])++ , ("REAL", [t|Double|])+ , ("DOUBLE", [t|Double|])+ , ("FLOAT", [t|Float|])++ , ("DATE", [t|Day|])+ , ("DATETIME", [t|LocalTime|]) ] normalizeColumn :: String -> String normalizeColumn = map toLower normalizeType :: String -> String-normalizeType = normalizeColumn . takeWhile (not . flip elem " (")+normalizeType = map toUpper . takeWhile (not . flip elem " (") notNull :: TableInfo -> Bool notNull info = isTrue . TableInfo.notnull $ info@@ -43,9 +66,13 @@ isTrue 0 = False isTrue _ = True +-- for backward compatibility+normalizeMap :: Map String TypeQ -> Map String TypeQ+normalizeMap = Map.fromList . map (first $ map toUpper) . Map.toList+ getType :: Map String TypeQ -> TableInfo -> Maybe (String, TypeQ) getType mapFromSql info = do- typ <- Map.lookup key mapFromSql+ typ <- Map.lookup key (normalizeMap {- for backward compatibility -} mapFromSql) <|> Map.lookup key mapFromSqlDefault return (normalizeColumn (TableInfo.name info), mayNull typ)