hamsql 0.8.0.0 → 0.9.0.0
raw patch · 18 files changed
+379/−140 lines, 18 filesdep +containersPVP ok
version bump matches the API change (PVP)
Dependencies added: containers
API changes (from Hackage documentation)
- Database.HamSql.Internal.PostgresCon: removeSqlIdBySqlStmts :: ToSqlId a => SqlStmtType -> [SqlStmt] -> [a] -> [a]
- Database.HamSql.Internal.PostgresCon: removeStmtsMatchingIds :: [SqlStmtId] -> [SqlStmt] -> [SqlStmt]
- Database.HamSql.Internal.Stmt: SqlRoleMembership :: SqlStmtType
- Database.HamSql.Internal.Stmt.Commons: prefixedRole :: Setup -> SqlName -> Text
- Database.HamSql.Internal.Stmt.Commons: stmtCommentOn :: (ToSqlId a) => a -> Text -> Maybe SqlStmt
- Database.HamSql.Internal.Stmt.Create: SQL_DATABASE :: SQL_DATABASE
- Database.HamSql.Internal.Stmt.Create: SQL_OTHER :: SQL_OTHER
- Database.HamSql.Internal.Stmt.Create: data SQL_DATABASE
- Database.HamSql.Internal.Stmt.Create: data SQL_OTHER
- Database.HamSql.Internal.Stmt.Create: emptyName :: SqlId
- Database.HamSql.Internal.Stmt.Create: fa :: Show b => Maybe b -> Schema -> [SetupElement]
- Database.HamSql.Internal.Stmt.Create: fb :: SetupContext -> [SetupElement] -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Create: getSchemaStatements :: OptCommon -> Setup -> Schema -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Create: getSetupStatements :: OptCommon -> Setup -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Create: instance Database.YamSql.Internal.SqlId.SqlObjType Database.HamSql.Internal.Stmt.Create.SQL_DATABASE
- Database.HamSql.Internal.Stmt.Create: instance Database.YamSql.Internal.SqlId.SqlObjType Database.HamSql.Internal.Stmt.Create.SQL_OTHER
- Database.HamSql.Internal.Stmt.Create: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.HamSql.Internal.Stmt.Create.SQL_DATABASE
- Database.HamSql.Internal.Stmt.Create: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.HamSql.Internal.Stmt.Create.SQL_OTHER
- Database.HamSql.Internal.Stmt.Create: instance GHC.Show.Show Database.HamSql.Internal.Stmt.Create.SQL_DATABASE
- Database.HamSql.Internal.Stmt.Create: instance GHC.Show.Show Database.HamSql.Internal.Stmt.Create.SQL_OTHER
- Database.HamSql.Internal.Stmt.Create: sqlAddTransact :: [SqlStmt] -> [SqlStmt]
- Database.HamSql.Internal.Stmt.Create: sqlCreateDatabase :: Bool -> SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Domain: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Domain.Domain))
- Database.HamSql.Internal.Stmt.Domain: stmtsDropDomain :: SqlObj SQL_DOMAIN SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Domain: stmtsDropDomainConstr :: SqlObj SQL_DOMAIN_CONSTRAINT (SqlName, SqlName) -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Drop: stmtsDropTable :: SqlObj SQL_TABLE SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Drop: stmtsDropType :: SqlObj SQL_TYPE SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Function: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Function.Function))
- Database.HamSql.Internal.Stmt.Function: stmtsDropFunction :: SqlObj SQL_FUNCTION (SqlName, [SqlType]) -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Function: stmtsDropFunction' :: SqlId -> [SqlStmt]
- Database.HamSql.Internal.Stmt.Role: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext Database.YamSql.Internal.Obj.Role.Role)
- Database.HamSql.Internal.Stmt.Role: stmtsDropAllPrivileges :: Setup -> SqlObj SQL_ROLE SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Role: stmtsDropRole :: Setup -> SqlObj SQL_ROLE SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Schema: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext Database.YamSql.Internal.Obj.Schema.Schema)
- Database.HamSql.Internal.Stmt.Sequence: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Sequence.Sequence))
- Database.HamSql.Internal.Stmt.Sequence: stmtsDropSequence :: SqlObj SQL_SEQUENCE SqlName -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Table: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Table.Table))
- Database.HamSql.Internal.Stmt.Table: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Table.Table, Database.YamSql.Internal.Obj.Table.Column))
- Database.HamSql.Internal.Stmt.Table: stmtsDropTableColumn :: SqlObj SQL_COLUMN (SqlName, SqlName) -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Table: stmtsDropTableConstr :: SqlObj SQL_TABLE_CONSTRAINT (SqlName, SqlName, SqlName) -> [Maybe SqlStmt]
- Database.HamSql.Internal.Stmt.Type: instance Database.HamSql.Setup.ToSqlStmts (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Type.Type))
- Database.YamSql.Internal.Obj.Check: Check :: SqlName -> Text -> Text -> Check
- Database.YamSql.Internal.Obj.Check: [checkCheck] :: Check -> Text
- Database.YamSql.Internal.Obj.Check: [checkDescription] :: Check -> Text
- Database.YamSql.Internal.Obj.Check: [checkName] :: Check -> SqlName
- Database.YamSql.Internal.Obj.Check: data Check
- Database.YamSql.Internal.Obj.Check: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Check.Check
- Database.YamSql.Internal.Obj.Check: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Check.Check
- Database.YamSql.Internal.Obj.Check: instance Data.Data.Data Database.YamSql.Internal.Obj.Check.Check
- Database.YamSql.Internal.Obj.Check: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Check.Check
- Database.YamSql.Internal.Obj.Check: instance GHC.Show.Show Database.YamSql.Internal.Obj.Check.Check
- Database.YamSql.Internal.Obj.Domain: Domain :: SqlName -> Text -> SqlType -> Maybe Text -> Maybe [Check] -> Domain
- Database.YamSql.Internal.Obj.Domain: SQL_DOMAIN :: SQL_DOMAIN
- Database.YamSql.Internal.Obj.Domain: SQL_DOMAIN_CONSTRAINT :: SQL_DOMAIN_CONSTRAINT
- Database.YamSql.Internal.Obj.Domain: [domainChecks] :: Domain -> Maybe [Check]
- Database.YamSql.Internal.Obj.Domain: [domainDefault] :: Domain -> Maybe Text
- Database.YamSql.Internal.Obj.Domain: [domainDescription] :: Domain -> Text
- Database.YamSql.Internal.Obj.Domain: [domainName] :: Domain -> SqlName
- Database.YamSql.Internal.Obj.Domain: [domainType] :: Domain -> SqlType
- Database.YamSql.Internal.Obj.Domain: data Domain
- Database.YamSql.Internal.Obj.Domain: data SQL_DOMAIN
- Database.YamSql.Internal.Obj.Domain: data SQL_DOMAIN_CONSTRAINT
- Database.YamSql.Internal.Obj.Domain: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Domain.Domain
- Database.YamSql.Internal.Obj.Domain: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Domain.Domain
- Database.YamSql.Internal.Obj.Domain: instance Data.Data.Data Database.YamSql.Internal.Obj.Domain.Domain
- Database.YamSql.Internal.Obj.Domain: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN
- Database.YamSql.Internal.Obj.Domain: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN_CONSTRAINT
- Database.YamSql.Internal.Obj.Domain: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN
- Database.YamSql.Internal.Obj.Domain: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN_CONSTRAINT
- Database.YamSql.Internal.Obj.Domain: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Domain.Domain
- Database.YamSql.Internal.Obj.Domain: instance GHC.Show.Show Database.YamSql.Internal.Obj.Domain.Domain
- Database.YamSql.Internal.Obj.Domain: instance GHC.Show.Show Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN
- Database.YamSql.Internal.Obj.Domain: instance GHC.Show.Show Database.YamSql.Internal.Obj.Domain.SQL_DOMAIN_CONSTRAINT
- Database.YamSql.Internal.Obj.Function: Function :: SqlName -> Text -> SqlType -> Maybe [Variable] -> Maybe [SqlName] -> Maybe [FunctionTpl] -> Maybe [Parameter] -> Maybe [Variable] -> Maybe [SqlName] -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> Function
- Database.YamSql.Internal.Obj.Function: FunctionTpl :: SqlName -> Text -> Maybe Text -> Maybe [Variable] -> Maybe [Variable] -> Maybe [SqlName] -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> FunctionTpl
- Database.YamSql.Internal.Obj.Function: SQL_FUNCTION :: SQL_FUNCTION
- Database.YamSql.Internal.Obj.Function: [functionBody] :: Function -> Maybe Text
- Database.YamSql.Internal.Obj.Function: [functionDescription] :: Function -> Text
- Database.YamSql.Internal.Obj.Function: [functionLanguage] :: Function -> Maybe Text
- Database.YamSql.Internal.Obj.Function: [functionName] :: Function -> SqlName
- Database.YamSql.Internal.Obj.Function: [functionOwner] :: Function -> Maybe SqlName
- Database.YamSql.Internal.Obj.Function: [functionParameters] :: Function -> Maybe [Variable]
- Database.YamSql.Internal.Obj.Function: [functionPrivExecute] :: Function -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Function: [functionReturnsColumns] :: Function -> Maybe [Parameter]
- Database.YamSql.Internal.Obj.Function: [functionReturns] :: Function -> SqlType
- Database.YamSql.Internal.Obj.Function: [functionSecurityDefiner] :: Function -> Maybe Bool
- Database.YamSql.Internal.Obj.Function: [functionTemplateData] :: Function -> Maybe [FunctionTpl]
- Database.YamSql.Internal.Obj.Function: [functionTemplates] :: Function -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Function: [functionVariables] :: Function -> Maybe [Variable]
- Database.YamSql.Internal.Obj.Function: [functiontplBodyPostlude] :: FunctionTpl -> Maybe Text
- Database.YamSql.Internal.Obj.Function: [functiontplBodyPrelude] :: FunctionTpl -> Maybe Text
- Database.YamSql.Internal.Obj.Function: [functiontplDescription] :: FunctionTpl -> Text
- Database.YamSql.Internal.Obj.Function: [functiontplLanguage] :: FunctionTpl -> Maybe Text
- Database.YamSql.Internal.Obj.Function: [functiontplOwner] :: FunctionTpl -> Maybe SqlName
- Database.YamSql.Internal.Obj.Function: [functiontplParameters] :: FunctionTpl -> Maybe [Variable]
- Database.YamSql.Internal.Obj.Function: [functiontplPrivExecute] :: FunctionTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Function: [functiontplSecurityDefiner] :: FunctionTpl -> Maybe Bool
- Database.YamSql.Internal.Obj.Function: [functiontplTemplate] :: FunctionTpl -> SqlName
- Database.YamSql.Internal.Obj.Function: [functiontplVariables] :: FunctionTpl -> Maybe [Variable]
- Database.YamSql.Internal.Obj.Function: applyFunctionTpl :: FunctionTpl -> Function -> Function
- Database.YamSql.Internal.Obj.Function: data Function
- Database.YamSql.Internal.Obj.Function: data FunctionTpl
- Database.YamSql.Internal.Obj.Function: data SQL_FUNCTION
- Database.YamSql.Internal.Obj.Function: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Function.Function
- Database.YamSql.Internal.Obj.Function: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Function.FunctionTpl
- Database.YamSql.Internal.Obj.Function: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Function.Function
- Database.YamSql.Internal.Obj.Function: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Function.FunctionTpl
- Database.YamSql.Internal.Obj.Function: instance Data.Data.Data Database.YamSql.Internal.Obj.Function.Function
- Database.YamSql.Internal.Obj.Function: instance Data.Data.Data Database.YamSql.Internal.Obj.Function.FunctionTpl
- Database.YamSql.Internal.Obj.Function: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Function.SQL_FUNCTION
- Database.YamSql.Internal.Obj.Function: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Function.SQL_FUNCTION
- Database.YamSql.Internal.Obj.Function: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Function.Function
- Database.YamSql.Internal.Obj.Function: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Function.FunctionTpl
- Database.YamSql.Internal.Obj.Function: instance GHC.Show.Show Database.YamSql.Internal.Obj.Function.Function
- Database.YamSql.Internal.Obj.Function: instance GHC.Show.Show Database.YamSql.Internal.Obj.Function.FunctionTpl
- Database.YamSql.Internal.Obj.Function: instance GHC.Show.Show Database.YamSql.Internal.Obj.Function.SQL_FUNCTION
- Database.YamSql.Internal.Obj.Role: Role :: SqlName -> Text -> Maybe Bool -> Maybe Text -> Maybe [SqlName] -> Role
- Database.YamSql.Internal.Obj.Role: SQL_ROLE :: SQL_ROLE
- Database.YamSql.Internal.Obj.Role: [roleDescription] :: Role -> Text
- Database.YamSql.Internal.Obj.Role: [roleLogin] :: Role -> Maybe Bool
- Database.YamSql.Internal.Obj.Role: [roleMemberIn] :: Role -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Role: [roleName] :: Role -> SqlName
- Database.YamSql.Internal.Obj.Role: [rolePassword] :: Role -> Maybe Text
- Database.YamSql.Internal.Obj.Role: data Role
- Database.YamSql.Internal.Obj.Role: data SQL_ROLE
- Database.YamSql.Internal.Obj.Role: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Role.Role
- Database.YamSql.Internal.Obj.Role: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Role.Role
- Database.YamSql.Internal.Obj.Role: instance Data.Data.Data Database.YamSql.Internal.Obj.Role.Role
- Database.YamSql.Internal.Obj.Role: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Role.SQL_ROLE
- Database.YamSql.Internal.Obj.Role: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Role.SQL_ROLE
- Database.YamSql.Internal.Obj.Role: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext Database.YamSql.Internal.Obj.Role.Role)
- Database.YamSql.Internal.Obj.Role: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Role.Role
- Database.YamSql.Internal.Obj.Role: instance GHC.Show.Show Database.YamSql.Internal.Obj.Role.Role
- Database.YamSql.Internal.Obj.Role: instance GHC.Show.Show Database.YamSql.Internal.Obj.Role.SQL_ROLE
- Database.YamSql.Internal.Obj.Schema: Schema :: SqlName -> Text -> Maybe [SqlName] -> Maybe [Function] -> Maybe [FunctionTpl] -> Maybe [Table] -> Maybe [TableTpl] -> Maybe [Role] -> Maybe [Sequence] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [Domain] -> Maybe [Type] -> Maybe Text -> Maybe Text -> Schema
- Database.YamSql.Internal.Obj.Schema: [schemaDependencies] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaDescription] :: Schema -> Text
- Database.YamSql.Internal.Obj.Schema: [schemaDomains] :: Schema -> Maybe [Domain]
- Database.YamSql.Internal.Obj.Schema: [schemaExecPostInstallAndUpgrade] :: Schema -> Maybe Text
- Database.YamSql.Internal.Obj.Schema: [schemaExecPostInstall] :: Schema -> Maybe Text
- Database.YamSql.Internal.Obj.Schema: [schemaFunctionTemplates] :: Schema -> Maybe [FunctionTpl]
- Database.YamSql.Internal.Obj.Schema: [schemaFunctions] :: Schema -> Maybe [Function]
- Database.YamSql.Internal.Obj.Schema: [schemaName] :: Schema -> SqlName
- Database.YamSql.Internal.Obj.Schema: [schemaPrivAllAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivDeleteAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivExecuteAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivInsertAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivSelectAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivSequenceAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivUpdateAll] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaPrivUsage] :: Schema -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Schema: [schemaRoles] :: Schema -> Maybe [Role]
- Database.YamSql.Internal.Obj.Schema: [schemaSequences] :: Schema -> Maybe [Sequence]
- Database.YamSql.Internal.Obj.Schema: [schemaTableTemplates] :: Schema -> Maybe [TableTpl]
- Database.YamSql.Internal.Obj.Schema: [schemaTables] :: Schema -> Maybe [Table]
- Database.YamSql.Internal.Obj.Schema: [schemaTypes] :: Schema -> Maybe [Type]
- Database.YamSql.Internal.Obj.Schema: data Schema
- Database.YamSql.Internal.Obj.Schema: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Schema.Schema
- Database.YamSql.Internal.Obj.Schema: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Schema.Schema
- Database.YamSql.Internal.Obj.Schema: instance Data.Data.Data Database.YamSql.Internal.Obj.Schema.Schema
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Schema.SQL_SCHEMA
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Schema.SQL_SCHEMA
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Domain.Domain))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Function.Function))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Sequence.Sequence))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Table.Table))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Table.Table, Database.YamSql.Internal.Obj.Table.Column))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext (Database.YamSql.Internal.Obj.Schema.Schema, Database.YamSql.Internal.Obj.Type.Type))
- Database.YamSql.Internal.Obj.Schema: instance Database.YamSql.Internal.SqlId.ToSqlId (Database.YamSql.Internal.SqlId.SqlContext Database.YamSql.Internal.Obj.Schema.Schema)
- Database.YamSql.Internal.Obj.Schema: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Schema.Schema
- Database.YamSql.Internal.Obj.Schema: instance GHC.Show.Show Database.YamSql.Internal.Obj.Schema.SQL_SCHEMA
- Database.YamSql.Internal.Obj.Schema: instance GHC.Show.Show Database.YamSql.Internal.Obj.Schema.Schema
- Database.YamSql.Internal.Obj.Sequence: SQL_SEQUENCE :: SQL_SEQUENCE
- Database.YamSql.Internal.Obj.Sequence: Sequence :: SqlName -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Bool -> Maybe SqlName -> Sequence
- Database.YamSql.Internal.Obj.Sequence: [sequenceCache] :: Sequence -> Maybe Int
- Database.YamSql.Internal.Obj.Sequence: [sequenceCycle] :: Sequence -> Maybe Bool
- Database.YamSql.Internal.Obj.Sequence: [sequenceIncrement] :: Sequence -> Maybe Int
- Database.YamSql.Internal.Obj.Sequence: [sequenceMaxValue] :: Sequence -> Maybe Int
- Database.YamSql.Internal.Obj.Sequence: [sequenceMinValue] :: Sequence -> Maybe Int
- Database.YamSql.Internal.Obj.Sequence: [sequenceName] :: Sequence -> SqlName
- Database.YamSql.Internal.Obj.Sequence: [sequenceOwnedByColumn] :: Sequence -> Maybe SqlName
- Database.YamSql.Internal.Obj.Sequence: [sequenceStartValue] :: Sequence -> Maybe Int
- Database.YamSql.Internal.Obj.Sequence: data SQL_SEQUENCE
- Database.YamSql.Internal.Obj.Sequence: data Sequence
- Database.YamSql.Internal.Obj.Sequence: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Sequence.Sequence
- Database.YamSql.Internal.Obj.Sequence: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Sequence.Sequence
- Database.YamSql.Internal.Obj.Sequence: instance Data.Data.Data Database.YamSql.Internal.Obj.Sequence.Sequence
- Database.YamSql.Internal.Obj.Sequence: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Sequence.SQL_SEQUENCE
- Database.YamSql.Internal.Obj.Sequence: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Sequence.SQL_SEQUENCE
- Database.YamSql.Internal.Obj.Sequence: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Sequence.Sequence
- Database.YamSql.Internal.Obj.Sequence: instance GHC.Show.Show Database.YamSql.Internal.Obj.Sequence.SQL_SEQUENCE
- Database.YamSql.Internal.Obj.Sequence: instance GHC.Show.Show Database.YamSql.Internal.Obj.Sequence.Sequence
- Database.YamSql.Internal.Obj.Table: Column :: SqlName -> SqlType -> Text -> Maybe Text -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> Maybe Bool -> Maybe [Check] -> Column
- Database.YamSql.Internal.Obj.Table: ForeignKey :: SqlName -> [SqlName] -> SqlName -> [SqlName] -> Maybe Text -> Maybe Text -> ForeignKey
- Database.YamSql.Internal.Obj.Table: SQL_COLUMN :: SQL_COLUMN
- Database.YamSql.Internal.Obj.Table: SQL_TABLE :: SQL_TABLE
- Database.YamSql.Internal.Obj.Table: SQL_TABLE_CONSTRAINT :: SQL_TABLE_CONSTRAINT
- Database.YamSql.Internal.Obj.Table: Table :: SqlName -> Text -> [Column] -> [SqlName] -> Maybe [UniqueKey] -> Maybe [ForeignKey] -> Maybe [Check] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [TableTpl] -> Table
- Database.YamSql.Internal.Obj.Table: TableTpl :: SqlName -> Text -> Maybe [ForeignKey] -> Maybe [SqlName] -> Maybe [Column] -> Maybe [Check] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> TableTpl
- Database.YamSql.Internal.Obj.Table: UniqueKey :: SqlName -> [SqlName] -> UniqueKey
- Database.YamSql.Internal.Obj.Table: [columnChecks] :: Column -> Maybe [Check]
- Database.YamSql.Internal.Obj.Table: [columnDefault] :: Column -> Maybe Text
- Database.YamSql.Internal.Obj.Table: [columnDescription] :: Column -> Text
- Database.YamSql.Internal.Obj.Table: [columnName] :: Column -> SqlName
- Database.YamSql.Internal.Obj.Table: [columnNull] :: Column -> Maybe Bool
- Database.YamSql.Internal.Obj.Table: [columnOnRefDelete] :: Column -> Maybe Text
- Database.YamSql.Internal.Obj.Table: [columnOnRefUpdate] :: Column -> Maybe Text
- Database.YamSql.Internal.Obj.Table: [columnReferences] :: Column -> Maybe SqlName
- Database.YamSql.Internal.Obj.Table: [columnType] :: Column -> SqlType
- Database.YamSql.Internal.Obj.Table: [columnUnique] :: Column -> Maybe Bool
- Database.YamSql.Internal.Obj.Table: [foreignkeyColumns] :: ForeignKey -> [SqlName]
- Database.YamSql.Internal.Obj.Table: [foreignkeyName] :: ForeignKey -> SqlName
- Database.YamSql.Internal.Obj.Table: [foreignkeyOnDelete] :: ForeignKey -> Maybe Text
- Database.YamSql.Internal.Obj.Table: [foreignkeyOnUpdate] :: ForeignKey -> Maybe Text
- Database.YamSql.Internal.Obj.Table: [foreignkeyRefColumns] :: ForeignKey -> [SqlName]
- Database.YamSql.Internal.Obj.Table: [foreignkeyRefTable] :: ForeignKey -> SqlName
- Database.YamSql.Internal.Obj.Table: [tableChecks] :: Table -> Maybe [Check]
- Database.YamSql.Internal.Obj.Table: [tableColumns] :: Table -> [Column]
- Database.YamSql.Internal.Obj.Table: [tableDescription] :: Table -> Text
- Database.YamSql.Internal.Obj.Table: [tableForeignKeys] :: Table -> Maybe [ForeignKey]
- Database.YamSql.Internal.Obj.Table: [tableInherits] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tableName] :: Table -> SqlName
- Database.YamSql.Internal.Obj.Table: [tablePrimaryKey] :: Table -> [SqlName]
- Database.YamSql.Internal.Obj.Table: [tablePrivDelete] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tablePrivInsert] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tablePrivSelect] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tablePrivUpdate] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tableTemplateData] :: Table -> Maybe [TableTpl]
- Database.YamSql.Internal.Obj.Table: [tableTemplates] :: Table -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tableUnique] :: Table -> Maybe [UniqueKey]
- Database.YamSql.Internal.Obj.Table: [tabletplChecks] :: TableTpl -> Maybe [Check]
- Database.YamSql.Internal.Obj.Table: [tabletplColumns] :: TableTpl -> Maybe [Column]
- Database.YamSql.Internal.Obj.Table: [tabletplDescription] :: TableTpl -> Text
- Database.YamSql.Internal.Obj.Table: [tabletplForeignKeys] :: TableTpl -> Maybe [ForeignKey]
- Database.YamSql.Internal.Obj.Table: [tabletplInherits] :: TableTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tabletplPrivDelete] :: TableTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tabletplPrivInsert] :: TableTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tabletplPrivSelect] :: TableTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tabletplPrivUpdate] :: TableTpl -> Maybe [SqlName]
- Database.YamSql.Internal.Obj.Table: [tabletplTemplate] :: TableTpl -> SqlName
- Database.YamSql.Internal.Obj.Table: [uniquekeyColumns] :: UniqueKey -> [SqlName]
- Database.YamSql.Internal.Obj.Table: [uniquekeyName] :: UniqueKey -> SqlName
- Database.YamSql.Internal.Obj.Table: applyTableTpl :: TableTpl -> Table -> Table
- Database.YamSql.Internal.Obj.Table: data Column
- Database.YamSql.Internal.Obj.Table: data ForeignKey
- Database.YamSql.Internal.Obj.Table: data SQL_COLUMN
- Database.YamSql.Internal.Obj.Table: data SQL_TABLE
- Database.YamSql.Internal.Obj.Table: data SQL_TABLE_CONSTRAINT
- Database.YamSql.Internal.Obj.Table: data Table
- Database.YamSql.Internal.Obj.Table: data TableTpl
- Database.YamSql.Internal.Obj.Table: data UniqueKey
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Table.Column
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Table.ForeignKey
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Table.Table
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Table.TableTpl
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Table.UniqueKey
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Table.Column
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Table.ForeignKey
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Table.Table
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Table.TableTpl
- Database.YamSql.Internal.Obj.Table: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Table.UniqueKey
- Database.YamSql.Internal.Obj.Table: instance Data.Data.Data Database.YamSql.Internal.Obj.Table.Column
- Database.YamSql.Internal.Obj.Table: instance Data.Data.Data Database.YamSql.Internal.Obj.Table.ForeignKey
- Database.YamSql.Internal.Obj.Table: instance Data.Data.Data Database.YamSql.Internal.Obj.Table.Table
- Database.YamSql.Internal.Obj.Table: instance Data.Data.Data Database.YamSql.Internal.Obj.Table.TableTpl
- Database.YamSql.Internal.Obj.Table: instance Data.Data.Data Database.YamSql.Internal.Obj.Table.UniqueKey
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Table.SQL_COLUMN
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Table.SQL_TABLE
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Table.SQL_TABLE_CONSTRAINT
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Table.SQL_COLUMN
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Table.SQL_TABLE
- Database.YamSql.Internal.Obj.Table: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Table.SQL_TABLE_CONSTRAINT
- Database.YamSql.Internal.Obj.Table: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Table.Column
- Database.YamSql.Internal.Obj.Table: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Table.ForeignKey
- Database.YamSql.Internal.Obj.Table: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Table.Table
- Database.YamSql.Internal.Obj.Table: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Table.TableTpl
- Database.YamSql.Internal.Obj.Table: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Table.UniqueKey
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.Column
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.ForeignKey
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.SQL_COLUMN
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.SQL_TABLE
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.SQL_TABLE_CONSTRAINT
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.Table
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.TableTpl
- Database.YamSql.Internal.Obj.Table: instance GHC.Show.Show Database.YamSql.Internal.Obj.Table.UniqueKey
- Database.YamSql.Internal.Obj.Type: SQL_TYPE :: SQL_TYPE
- Database.YamSql.Internal.Obj.Type: Type :: SqlName -> Text -> [TypeElement] -> Type
- Database.YamSql.Internal.Obj.Type: TypeElement :: SqlName -> SqlType -> TypeElement
- Database.YamSql.Internal.Obj.Type: [typeDescription] :: Type -> Text
- Database.YamSql.Internal.Obj.Type: [typeElements] :: Type -> [TypeElement]
- Database.YamSql.Internal.Obj.Type: [typeName] :: Type -> SqlName
- Database.YamSql.Internal.Obj.Type: [typeelementName] :: TypeElement -> SqlName
- Database.YamSql.Internal.Obj.Type: [typeelementType] :: TypeElement -> SqlType
- Database.YamSql.Internal.Obj.Type: data SQL_TYPE
- Database.YamSql.Internal.Obj.Type: data Type
- Database.YamSql.Internal.Obj.Type: data TypeElement
- Database.YamSql.Internal.Obj.Type: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Type.Type
- Database.YamSql.Internal.Obj.Type: instance Data.Aeson.Types.FromJSON.FromJSON Database.YamSql.Internal.Obj.Type.TypeElement
- Database.YamSql.Internal.Obj.Type: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Type.Type
- Database.YamSql.Internal.Obj.Type: instance Data.Aeson.Types.ToJSON.ToJSON Database.YamSql.Internal.Obj.Type.TypeElement
- Database.YamSql.Internal.Obj.Type: instance Data.Data.Data Database.YamSql.Internal.Obj.Type.Type
- Database.YamSql.Internal.Obj.Type: instance Data.Data.Data Database.YamSql.Internal.Obj.Type.TypeElement
- Database.YamSql.Internal.Obj.Type: instance Database.YamSql.Internal.SqlId.SqlObjType Database.YamSql.Internal.Obj.Type.SQL_TYPE
- Database.YamSql.Internal.Obj.Type: instance Database.YamSql.Internal.SqlId.ToSqlCode Database.YamSql.Internal.Obj.Type.SQL_TYPE
- Database.YamSql.Internal.Obj.Type: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Type.Type
- Database.YamSql.Internal.Obj.Type: instance GHC.Generics.Generic Database.YamSql.Internal.Obj.Type.TypeElement
- Database.YamSql.Internal.Obj.Type: instance GHC.Show.Show Database.YamSql.Internal.Obj.Type.SQL_TYPE
- Database.YamSql.Internal.Obj.Type: instance GHC.Show.Show Database.YamSql.Internal.Obj.Type.Type
- Database.YamSql.Internal.Obj.Type: instance GHC.Show.Show Database.YamSql.Internal.Obj.Type.TypeElement
+ Database.HamSql: SQL_OTHER :: SQL_OTHER
+ Database.HamSql: allSchemaElements :: Schema -> [SetupElement]
+ Database.HamSql: data SQL_OTHER
+ Database.HamSql: elementsToStmts :: SetupContext -> [SetupElement] -> [Maybe SqlStmt]
+ Database.HamSql: emptyName :: SqlId
+ Database.HamSql: getSchemaStatements :: OptCommon -> Setup -> Schema -> [Maybe SqlStmt]
+ Database.HamSql: getSetupStatements :: OptCommon -> Setup -> [Maybe SqlStmt]
+ Database.HamSql: sqlAddTransact :: [SqlStmt] -> [SqlStmt]
+ Database.HamSql.Internal.DbUtils: sqlErrObjectInUse :: ByteString
+ Database.HamSql.Internal.InquireDeployed: deployedRoleMemberIds :: Setup -> Connection -> IO [SqlObj SQL_ROLE_MEMBERSHIP (SqlName, SqlName)]
+ Database.HamSql.Internal.InquireDeployed: deployedSchemaIds :: Connection -> IO [SqlObj SQL_SCHEMA SqlName]
+ Database.HamSql.Internal.PostgresCon: filterSqlIdBySqlStmts :: ToSqlId a => SqlStmtType -> [SqlStmt] -> [a] -> [a]
+ Database.HamSql.Internal.PostgresCon: filterStmtsMatchingIds :: [SqlStmtId] -> [SqlStmt] -> [SqlStmt]
+ Database.HamSql.Internal.Stmt: SqlGrantMembership :: SqlStmtType
+ Database.HamSql.Internal.Stmt: SqlRevokeMembership :: SqlStmtType
+ Database.HamSql.Internal.Utils: maybeHead :: [a] -> Maybe a
+ Database.YamSql: Check :: SqlName -> Text -> Text -> Check
+ Database.YamSql: Column :: SqlName -> SqlType -> Text -> Maybe Text -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> Maybe Bool -> Maybe [Check] -> Column
+ Database.YamSql: Domain :: SqlName -> Text -> SqlType -> Maybe Text -> Maybe [Check] -> Domain
+ Database.YamSql: ForeignKey :: SqlName -> [SqlName] -> SqlName -> [SqlName] -> Maybe Text -> Maybe Text -> ForeignKey
+ Database.YamSql: Function :: SqlName -> Text -> SqlType -> Maybe [Variable] -> Maybe [SqlName] -> Maybe [FunctionTpl] -> Maybe [Parameter] -> Maybe [Variable] -> Maybe [SqlName] -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> Function
+ Database.YamSql: FunctionTpl :: SqlName -> Text -> Maybe Text -> Maybe [Variable] -> Maybe [Variable] -> Maybe [SqlName] -> Maybe Bool -> Maybe SqlName -> Maybe Text -> Maybe Text -> FunctionTpl
+ Database.YamSql: Role :: SqlName -> Text -> Maybe Bool -> Maybe Text -> Maybe [SqlName] -> Role
+ Database.YamSql: SQL_COLUMN :: SQL_COLUMN
+ Database.YamSql: SQL_DOMAIN :: SQL_DOMAIN
+ Database.YamSql: SQL_DOMAIN_CONSTRAINT :: SQL_DOMAIN_CONSTRAINT
+ Database.YamSql: SQL_FUNCTION :: SQL_FUNCTION
+ Database.YamSql: SQL_ROLE :: SQL_ROLE
+ Database.YamSql: SQL_ROLE_MEMBERSHIP :: SQL_ROLE_MEMBERSHIP
+ Database.YamSql: SQL_SCHEMA :: SQL_SCHEMA
+ Database.YamSql: SQL_SEQUENCE :: SQL_SEQUENCE
+ Database.YamSql: SQL_TABLE :: SQL_TABLE
+ Database.YamSql: SQL_TABLE_CONSTRAINT :: SQL_TABLE_CONSTRAINT
+ Database.YamSql: SQL_TYPE :: SQL_TYPE
+ Database.YamSql: Schema :: SqlName -> Text -> Maybe [SqlName] -> Maybe [Function] -> Maybe [FunctionTpl] -> Maybe [Table] -> Maybe [TableTpl] -> Maybe [Role] -> Maybe [Sequence] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [Domain] -> Maybe [Type] -> Maybe Text -> Maybe Text -> Schema
+ Database.YamSql: Sequence :: SqlName -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Bool -> Maybe SqlName -> Sequence
+ Database.YamSql: Table :: SqlName -> Text -> [Column] -> [SqlName] -> Maybe [UniqueKey] -> Maybe [ForeignKey] -> Maybe [Check] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [TableTpl] -> Table
+ Database.YamSql: TableTpl :: SqlName -> Text -> Maybe [ForeignKey] -> Maybe [SqlName] -> Maybe [Column] -> Maybe [Check] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> Maybe [SqlName] -> TableTpl
+ Database.YamSql: Type :: SqlName -> Text -> [TypeElement] -> Type
+ Database.YamSql: TypeElement :: SqlName -> SqlType -> TypeElement
+ Database.YamSql: UniqueKey :: SqlName -> [SqlName] -> UniqueKey
+ Database.YamSql: [checkCheck] :: Check -> Text
+ Database.YamSql: [checkDescription] :: Check -> Text
+ Database.YamSql: [checkName] :: Check -> SqlName
+ Database.YamSql: [columnChecks] :: Column -> Maybe [Check]
+ Database.YamSql: [columnDefault] :: Column -> Maybe Text
+ Database.YamSql: [columnDescription] :: Column -> Text
+ Database.YamSql: [columnName] :: Column -> SqlName
+ Database.YamSql: [columnNull] :: Column -> Maybe Bool
+ Database.YamSql: [columnOnRefDelete] :: Column -> Maybe Text
+ Database.YamSql: [columnOnRefUpdate] :: Column -> Maybe Text
+ Database.YamSql: [columnReferences] :: Column -> Maybe SqlName
+ Database.YamSql: [columnType] :: Column -> SqlType
+ Database.YamSql: [columnUnique] :: Column -> Maybe Bool
+ Database.YamSql: [domainChecks] :: Domain -> Maybe [Check]
+ Database.YamSql: [domainDefault] :: Domain -> Maybe Text
+ Database.YamSql: [domainDescription] :: Domain -> Text
+ Database.YamSql: [domainName] :: Domain -> SqlName
+ Database.YamSql: [domainType] :: Domain -> SqlType
+ Database.YamSql: [foreignkeyColumns] :: ForeignKey -> [SqlName]
+ Database.YamSql: [foreignkeyName] :: ForeignKey -> SqlName
+ Database.YamSql: [foreignkeyOnDelete] :: ForeignKey -> Maybe Text
+ Database.YamSql: [foreignkeyOnUpdate] :: ForeignKey -> Maybe Text
+ Database.YamSql: [foreignkeyRefColumns] :: ForeignKey -> [SqlName]
+ Database.YamSql: [foreignkeyRefTable] :: ForeignKey -> SqlName
+ Database.YamSql: [functionBody] :: Function -> Maybe Text
+ Database.YamSql: [functionDescription] :: Function -> Text
+ Database.YamSql: [functionLanguage] :: Function -> Maybe Text
+ Database.YamSql: [functionName] :: Function -> SqlName
+ Database.YamSql: [functionOwner] :: Function -> Maybe SqlName
+ Database.YamSql: [functionParameters] :: Function -> Maybe [Variable]
+ Database.YamSql: [functionPrivExecute] :: Function -> Maybe [SqlName]
+ Database.YamSql: [functionReturnsColumns] :: Function -> Maybe [Parameter]
+ Database.YamSql: [functionReturns] :: Function -> SqlType
+ Database.YamSql: [functionSecurityDefiner] :: Function -> Maybe Bool
+ Database.YamSql: [functionTemplateData] :: Function -> Maybe [FunctionTpl]
+ Database.YamSql: [functionTemplates] :: Function -> Maybe [SqlName]
+ Database.YamSql: [functionVariables] :: Function -> Maybe [Variable]
+ Database.YamSql: [functiontplBodyPostlude] :: FunctionTpl -> Maybe Text
+ Database.YamSql: [functiontplBodyPrelude] :: FunctionTpl -> Maybe Text
+ Database.YamSql: [functiontplDescription] :: FunctionTpl -> Text
+ Database.YamSql: [functiontplLanguage] :: FunctionTpl -> Maybe Text
+ Database.YamSql: [functiontplOwner] :: FunctionTpl -> Maybe SqlName
+ Database.YamSql: [functiontplParameters] :: FunctionTpl -> Maybe [Variable]
+ Database.YamSql: [functiontplPrivExecute] :: FunctionTpl -> Maybe [SqlName]
+ Database.YamSql: [functiontplSecurityDefiner] :: FunctionTpl -> Maybe Bool
+ Database.YamSql: [functiontplTemplate] :: FunctionTpl -> SqlName
+ Database.YamSql: [functiontplVariables] :: FunctionTpl -> Maybe [Variable]
+ Database.YamSql: [roleDescription] :: Role -> Text
+ Database.YamSql: [roleLogin] :: Role -> Maybe Bool
+ Database.YamSql: [roleMemberIn] :: Role -> Maybe [SqlName]
+ Database.YamSql: [roleName] :: Role -> SqlName
+ Database.YamSql: [rolePassword] :: Role -> Maybe Text
+ Database.YamSql: [schemaDependencies] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaDescription] :: Schema -> Text
+ Database.YamSql: [schemaDomains] :: Schema -> Maybe [Domain]
+ Database.YamSql: [schemaExecPostInstallAndUpgrade] :: Schema -> Maybe Text
+ Database.YamSql: [schemaExecPostInstall] :: Schema -> Maybe Text
+ Database.YamSql: [schemaFunctionTemplates] :: Schema -> Maybe [FunctionTpl]
+ Database.YamSql: [schemaFunctions] :: Schema -> Maybe [Function]
+ Database.YamSql: [schemaName] :: Schema -> SqlName
+ Database.YamSql: [schemaPrivAllAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivDeleteAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivExecuteAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivInsertAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivSelectAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivSequenceAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivUpdateAll] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaPrivUsage] :: Schema -> Maybe [SqlName]
+ Database.YamSql: [schemaRoles] :: Schema -> Maybe [Role]
+ Database.YamSql: [schemaSequences] :: Schema -> Maybe [Sequence]
+ Database.YamSql: [schemaTableTemplates] :: Schema -> Maybe [TableTpl]
+ Database.YamSql: [schemaTables] :: Schema -> Maybe [Table]
+ Database.YamSql: [schemaTypes] :: Schema -> Maybe [Type]
+ Database.YamSql: [sequenceCache] :: Sequence -> Maybe Int
+ Database.YamSql: [sequenceCycle] :: Sequence -> Maybe Bool
+ Database.YamSql: [sequenceIncrement] :: Sequence -> Maybe Int
+ Database.YamSql: [sequenceMaxValue] :: Sequence -> Maybe Int
+ Database.YamSql: [sequenceMinValue] :: Sequence -> Maybe Int
+ Database.YamSql: [sequenceName] :: Sequence -> SqlName
+ Database.YamSql: [sequenceOwnedByColumn] :: Sequence -> Maybe SqlName
+ Database.YamSql: [sequenceStartValue] :: Sequence -> Maybe Int
+ Database.YamSql: [tableChecks] :: Table -> Maybe [Check]
+ Database.YamSql: [tableColumns] :: Table -> [Column]
+ Database.YamSql: [tableDescription] :: Table -> Text
+ Database.YamSql: [tableForeignKeys] :: Table -> Maybe [ForeignKey]
+ Database.YamSql: [tableInherits] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tableName] :: Table -> SqlName
+ Database.YamSql: [tablePrimaryKey] :: Table -> [SqlName]
+ Database.YamSql: [tablePrivDelete] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tablePrivInsert] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tablePrivSelect] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tablePrivUpdate] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tableTemplateData] :: Table -> Maybe [TableTpl]
+ Database.YamSql: [tableTemplates] :: Table -> Maybe [SqlName]
+ Database.YamSql: [tableUnique] :: Table -> Maybe [UniqueKey]
+ Database.YamSql: [tabletplChecks] :: TableTpl -> Maybe [Check]
+ Database.YamSql: [tabletplColumns] :: TableTpl -> Maybe [Column]
+ Database.YamSql: [tabletplDescription] :: TableTpl -> Text
+ Database.YamSql: [tabletplForeignKeys] :: TableTpl -> Maybe [ForeignKey]
+ Database.YamSql: [tabletplInherits] :: TableTpl -> Maybe [SqlName]
+ Database.YamSql: [tabletplPrivDelete] :: TableTpl -> Maybe [SqlName]
+ Database.YamSql: [tabletplPrivInsert] :: TableTpl -> Maybe [SqlName]
+ Database.YamSql: [tabletplPrivSelect] :: TableTpl -> Maybe [SqlName]
+ Database.YamSql: [tabletplPrivUpdate] :: TableTpl -> Maybe [SqlName]
+ Database.YamSql: [tabletplTemplate] :: TableTpl -> SqlName
+ Database.YamSql: [typeDescription] :: Type -> Text
+ Database.YamSql: [typeElements] :: Type -> [TypeElement]
+ Database.YamSql: [typeName] :: Type -> SqlName
+ Database.YamSql: [typeelementName] :: TypeElement -> SqlName
+ Database.YamSql: [typeelementType] :: TypeElement -> SqlType
+ Database.YamSql: [uniquekeyColumns] :: UniqueKey -> [SqlName]
+ Database.YamSql: [uniquekeyName] :: UniqueKey -> SqlName
+ Database.YamSql: applyFunctionTpl :: FunctionTpl -> Function -> Function
+ Database.YamSql: applyTableTpl :: TableTpl -> Table -> Table
+ Database.YamSql: data Check
+ Database.YamSql: data Column
+ Database.YamSql: data Domain
+ Database.YamSql: data ForeignKey
+ Database.YamSql: data Function
+ Database.YamSql: data FunctionTpl
+ Database.YamSql: data Role
+ Database.YamSql: data SQL_COLUMN
+ Database.YamSql: data SQL_DOMAIN
+ Database.YamSql: data SQL_DOMAIN_CONSTRAINT
+ Database.YamSql: data SQL_FUNCTION
+ Database.YamSql: data SQL_ROLE
+ Database.YamSql: data SQL_ROLE_MEMBERSHIP
+ Database.YamSql: data SQL_SCHEMA
+ Database.YamSql: data SQL_SEQUENCE
+ Database.YamSql: data SQL_TABLE
+ Database.YamSql: data SQL_TABLE_CONSTRAINT
+ Database.YamSql: data SQL_TYPE
+ Database.YamSql: data Schema
+ Database.YamSql: data Sequence
+ Database.YamSql: data Table
+ Database.YamSql: data TableTpl
+ Database.YamSql: data Type
+ Database.YamSql: data TypeElement
+ Database.YamSql: data UniqueKey
- Database.HamSql.Internal.DbUtils: pgsqlHandleErr :: SqlStmt -> SqlError -> IO ()
+ Database.HamSql.Internal.DbUtils: pgsqlHandleErr :: SqlStmt -> Connection -> SqlError -> IO ()
- Database.HamSql.Internal.PostgresCon: pgsqlGetFullStatements :: OptCommon -> OptCommonDb -> Setup -> IO [SqlStmt]
+ Database.HamSql.Internal.PostgresCon: pgsqlGetFullStatements :: OptCommon -> Setup -> IO [SqlStmt]
- Database.HamSql.Internal.PostgresCon: revokeAllPrivileges :: Setup -> IO [SqlObj SQL_ROLE SqlName] -> [SqlStmt] -> IO [SqlStmt]
+ Database.HamSql.Internal.PostgresCon: revokeAllPrivileges :: Connection -> Setup -> IO [SqlObj SQL_ROLE SqlName] -> [SqlStmt] -> IO [SqlStmt]
- Database.HamSql.Setup: [SetupElement] :: (ToSqlStmts a, Show b) => {setupElement :: a, setupElementSource :: Maybe b} -> SetupElement
+ Database.HamSql.Setup: [SetupElement] :: (ToSqlStmts a) => {setupElement :: a} -> SetupElement
- Database.YamSql.Parser: dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c a)
+ Database.YamSql.Parser: dataCast1 :: (Data a, Typeable (* -> *) t) => (forall d. Data d => c (t d)) -> Maybe (c a)
- Database.YamSql.Parser: dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)
+ Database.YamSql.Parser: dataCast2 :: (Data a, Typeable (* -> * -> *) t) => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)
- Database.YamSql.Parser: dataTypeOf :: a -> DataType
+ Database.YamSql.Parser: dataTypeOf :: Data a => a -> DataType
- Database.YamSql.Parser: from :: a -> Rep a x
+ Database.YamSql.Parser: from :: Generic a => a -> Rep a x
- Database.YamSql.Parser: gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a
+ Database.YamSql.Parser: gfoldl :: Data a => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a
- Database.YamSql.Parser: gmapM :: Monad m => (forall d. Data d => d -> m d) -> a -> m a
+ Database.YamSql.Parser: gmapM :: (Data a, Monad m) => (forall d. Data d => d -> m d) -> a -> m a
- Database.YamSql.Parser: gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a
+ Database.YamSql.Parser: gmapMo :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
- Database.YamSql.Parser: gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a
+ Database.YamSql.Parser: gmapMp :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
- Database.YamSql.Parser: gmapQ :: (forall d. Data d => d -> u) -> a -> [u]
+ Database.YamSql.Parser: gmapQ :: Data a => (forall d. Data d => d -> u) -> a -> [u]
- Database.YamSql.Parser: gmapQi :: Int -> (forall d. Data d => d -> u) -> a -> u
+ Database.YamSql.Parser: gmapQi :: Data a => Int -> (forall d. Data d => d -> u) -> a -> u
- Database.YamSql.Parser: gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Database.YamSql.Parser: gmapQl :: Data a => (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
- Database.YamSql.Parser: gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
+ Database.YamSql.Parser: gmapQr :: Data a => (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
- Database.YamSql.Parser: gmapT :: (forall b. Data b => b -> b) -> a -> a
+ Database.YamSql.Parser: gmapT :: Data a => (forall b. Data b => b -> b) -> a -> a
- Database.YamSql.Parser: gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a
+ Database.YamSql.Parser: gunfold :: Data a => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a
- Database.YamSql.Parser: parseJSON :: Value -> Parser a
+ Database.YamSql.Parser: parseJSON :: FromJSON a => Value -> Parser a
- Database.YamSql.Parser: parseJSONList :: Value -> Parser [a]
+ Database.YamSql.Parser: parseJSONList :: FromJSON a => Value -> Parser [a]
- Database.YamSql.Parser: to :: Rep a x -> a
+ Database.YamSql.Parser: to :: Generic a => Rep a x -> a
- Database.YamSql.Parser: toConstr :: a -> Constr
+ Database.YamSql.Parser: toConstr :: Data a => a -> Constr
- Database.YamSql.Parser: toEncoding :: a -> Encoding
+ Database.YamSql.Parser: toEncoding :: ToJSON a => a -> Encoding
- Database.YamSql.Parser: toEncodingList :: [a] -> Encoding
+ Database.YamSql.Parser: toEncodingList :: ToJSON a => [a] -> Encoding
- Database.YamSql.Parser: toJSON :: a -> Value
+ Database.YamSql.Parser: toJSON :: ToJSON a => a -> Value
- Database.YamSql.Parser: toJSONList :: [a] -> Value
+ Database.YamSql.Parser: toJSONList :: ToJSON a => [a] -> Value
Files
- CHANGELOG +10/−0
- README.md +142/−13
- hamsql.cabal +17/−15
- src/Database/HamSql/Cli.hs +5/−5
- src/Database/HamSql/Internal/DbUtils.hs +55/−11
- src/Database/HamSql/Internal/InquireDeployed.hs +34/−5
- src/Database/HamSql/Internal/PostgresCon.hs +28/−22
- src/Database/HamSql/Internal/Stmt.hs +2/−1
- src/Database/HamSql/Internal/Stmt/Create.hs +10/−37
- src/Database/HamSql/Internal/Stmt/Database.hs +31/−0
- src/Database/HamSql/Internal/Stmt/Drop.hs +0/−15
- src/Database/HamSql/Internal/Stmt/Role.hs +15/−6
- src/Database/HamSql/Internal/Stmt/Table.hs +11/−7
- src/Database/HamSql/Internal/Stmt/Type.hs +3/−0
- src/Database/HamSql/Internal/Utils.hs +4/−0
- src/Database/HamSql/Setup.hs +4/−3
- src/Database/YamSql/Internal/Obj/Role.hs +7/−0
- src/Database/YamSql/Internal/Obj/Schema.hs +1/−0
CHANGELOG view
@@ -1,3 +1,13 @@+v0.9.0.0+ - Fixes DELETE BASE before schema definitions are read (#64)+ - Fixes incorrect naming of sequences for SERIAL emulation+ - Fixes bugs in table constraint statements (#59)+ - Adds listing of blocking connections if database can't be deleted+ - Adds project status description to README+ - Adds link to example project to README+ - Adds bash completion install (closes #63)+ - Adds revocation of role memberships (fixes #37)+ - Better internal code structure v0.8.0.0 - Replaces pandoc with doctemplates to halve dependency compile time Big thanks to @jgm for implementing doctemplates right away!
README.md view
@@ -1,16 +1,155 @@ HamSql ====== -Interpreter for SQL-structure definitions in Yaml ([YamSql](http://yamsql.readthedocs.io/))+An interpreter for SQL structure definitions in YAML ([YamSql](http://yamsql.readthedocs.io/)) [](https://git.hemio.de/hemio/hamsql/commits/master) [](https://hackage.haskell.org/package/hamsql) [](https://hackage.haskell.org/package/hamsql) -## Building HamSql on Debian+## About HamSql -Install haskell compiler and required libraries:+HamSql is a software that parses SQL structures defined in a YAML based language and deploys them on PostgreSQL servers. It allows to maintain PostgreSQL projects in a form more similar to other programming languages. +In contrast to the `CREATE OR REPLACE FUNCTION` approaches, residual structures are deleted, column properties are deleted without explicit definition of the migration and the ordering imposed by dependencies is resolved automatically.++HamSql is on hackage, which means you can build it with `cabal install hamsql`. Please note the build requirements and details at the bottom. HamSql binaries for Linux amd64 are available as [build artifacts](https://git.hemio.de/hemio/hamsql/tags) from our build server.++**HamSql can be used for**++- Neat SQL development with clearer versioning via "one object one file" principle+- More flexible development with features like function and table templates+- On site deployments of SQL structures+- Off-line computation of upgrade strategies for known status quo+- Documentation generation of SQL structures and APIs+++### What is there++- `hamsql install` command that deploys the defined structure+- `hamsql upgrade` command that updates existing structures+ - Per default no data are at risk during upgrade (no column/table deletion)+ - Overwrite via `--permit-data-deletion` possible+ - SQL command ordering that avoids dependency conflicts+ - Complicated dependencies are resolved via trial and error+- `hamsql doc` creates a documentation of the complete sql structure+ - Custom templates can be provided using [doctemplates](https://hackage.haskell.org/package/doctemplates) known from pandoc+ - The build-in template creates [Sphinx and Read the Docs](https://docs.readthedocs.io) ready *.rst* files+- Code basis tailored for the support of many SQL features+- [Basic documentation of the YamSql Language](http://yamsql.readthedocs.io)++### Coming soon++- Support for views and triggers+- Warn about name conflicts for SQL objects before deployment+- Output defining YamSql file for each type of error++### What is missing++Those are all things on the radar but the exact requirements are unclear or the workforce is missing.++- [Support for several other PostgreSQL features](https://git.hemio.de/hemio/hamsql/issues?milestone_title=Support+all+SQL+Features)+- Stable definition of YamSql+- Support for renaming tables and columns+- Covering other strategies required for upgrade+- Unit and integration test as part of YamSql+ - Define scenarios that are loaded into the database+ - Define test and expected result for a function for a scenario+ - Define operations with expected outcome (to tests triggers etc.)++## Example Project++The example project below could be deployed via++ hamsql install -c postgresql:///dbname++Later changes can be pushed via++ hamsql upgrade -c postgresql:///dbname++The default documentation can be written to *docs/* via++ hamsql doc++You can have a look at the [output rendered via Sphinx.](http://yamsql-example-project.readthedocs.io)++Those are the YamSql files for the project:++```yaml+# setup.yml+schemas:+ - math+schema_dirs:+ - schemas+```++```yaml+# schema/math/schema.yml+name: math+description: |+ Some basic math in SQL+```++```yaml+---+# schema/math/function.d/factorial.plsql+name: factorial+description: |+ Factorial function using the+ ``WITH RECURSIVE`` SQL feature.++ Logical definition::++ f(0) = 1+ f(n) = n * f (n - 1)++parameters:+ - name: p_n+ type: int+returns: int+---+RETURN (+ WITH RECURSIVE t AS (+ SELECT 1 AS f, 0 AS n+ UNION ALL+ SELECT f * (n + 1), n + 1 FROM t+ )+ SELECT f FROM t WHERE n=p_n LIMIT 1+);+```++```yaml+---+# schema/math/function.d/erf.py+name: erf +description: |+ Gauss error function++ This function is a wrapper for the+ Python 3 implementation.++parameters:+ - name: x+ type: float+returns: float++language: plpython3u+---+import math+return math.erf(x)++```++## Building HamSql on Debian Stretch++To completely build HamSql from source++ apt install make ghc cabal-install libpq-dev happy+ make+ make install+ +To avoid compiling all the dependencies you can use the following set of debian packages instead of the above ones+ ```sh apt install \ make \@@ -26,14 +165,4 @@ libghc-unordered-containers-dev \ libghc-yaml-dev ```--Now you can-- make- make install--Completly building from sources-- apt install make ghc cabal-install libpq-dev happy- make
hamsql.cabal view
@@ -1,8 +1,8 @@ name: hamsql-version: 0.8.0.0-synopsis: HamSql+version: 0.9.0.0+synopsis: Interpreter for SQL-structure definitions in YAML (YamSql) category: Database-description: Interpreter for SQL-structure definitions in Yaml (YamSql)+description: Interpreter for SQL-structure definitions in YAML (YamSql) homepage: https://git.hemio.de/hemio/hamsql bug-reports: https://git.hemio.de/hemio/hamsql/issues license: GPL-3@@ -10,8 +10,9 @@ author: Michael Herold <quabla@hemio.de> maintainer: Michael Herold <quabla@hemio.de> copyright: (c) 2014-2016 Michael Herold et al.+stability: experimental build-type: Simple-cabal-version: >=1.10+cabal-version: >=1.20 extra-source-files: AUTHORS,@@ -48,22 +49,26 @@ Database.HamSql.Internal.Option Database.HamSql.Internal.PostgresCon Database.HamSql.Internal.Stmt+ Database.HamSql.Internal.Utils+ Database.HamSql.Setup+ Database.YamSql+ Database.YamSql.Internal.Basic+ Database.YamSql.Internal.Commons+ Database.YamSql.Internal.SqlId+ Database.YamSql.Parser++ other-modules: Database.HamSql.Internal.Stmt.Basic Database.HamSql.Internal.Stmt.Commons Database.HamSql.Internal.Stmt.Create+ Database.HamSql.Internal.Stmt.Database Database.HamSql.Internal.Stmt.Domain- Database.HamSql.Internal.Stmt.Drop Database.HamSql.Internal.Stmt.Function Database.HamSql.Internal.Stmt.Role Database.HamSql.Internal.Stmt.Schema Database.HamSql.Internal.Stmt.Sequence Database.HamSql.Internal.Stmt.Table Database.HamSql.Internal.Stmt.Type- Database.HamSql.Internal.Utils- Database.HamSql.Setup- Database.YamSql- Database.YamSql.Internal.Basic- Database.YamSql.Internal.Commons Database.YamSql.Internal.Obj.Check Database.YamSql.Internal.Obj.Domain Database.YamSql.Internal.Obj.Function@@ -72,18 +77,15 @@ Database.YamSql.Internal.Obj.Sequence Database.YamSql.Internal.Obj.Table Database.YamSql.Internal.Obj.Type- Database.YamSql.Internal.SqlId- Database.YamSql.Parser-- other-modules: Paths_hamsql build-depends: aeson >=1.0 && <1.1, base >=4.8 && <5.0, bytestring >=0.10 && <0.11,+ containers >=0.5 && <0.6, directory >=1.2 && <1.3,- doctemplates ==0.1.*,+ doctemplates >=0.1 && <0.2, file-embed >=0.0 && <0.1, filepath >=1.4 && <1.5, frontmatter >=0.1 && <0.2,
src/Database/HamSql/Cli.hs view
@@ -21,6 +21,7 @@ import Paths_hamsql (version) import Database.HamSql+import Database.HamSql.Internal.Stmt.Database import Database.YamSql parserPrefs :: ParserPrefs@@ -44,6 +45,8 @@ "For installs either both --permit-data-deletion and --delete-existing-database" <-> "must be supplied or non of them." | otherwise = do+ setup <- loadSetup optCommon (optSetup optCommon)+ stmts <- pgsqlGetFullStatements optCommon setup let dbname = SqlName $ T.pack $ tail $ uriPath $ getConUrl optDb if not (optEmulate optDb || optPrint optDb) then void $@@ -53,15 +56,12 @@ { uriPath = "/postgres" }) (catMaybes $- sqlCreateDatabase (optDeleteExistingDatabase optInstall) dbname)+ stmtsCreateDatabase (optDeleteExistingDatabase optInstall) dbname) else when (optDeleteExistingDatabase optInstall) $ warn' $ "In --emulate and --print mode the DROP/CREATE DATABASE" <-> "statements are skipped. You have to ensure that an empty" <-> "database exists for those commands to make sense."- setup <- loadSetup optCommon (optSetup optCommon)- stmts <- pgsqlGetFullStatements optCommon optDb setup- -- TODO: Own option for this dropRoleStmts <- if optDeleteResidualRoles optInstall then pgsqlDropAllRoleStmts optDb setup@@ -72,7 +72,7 @@ setup <- loadSetup optCommon (optSetup optCommon) conn <- pgsqlConnectUrl (getConUrl optDb) deleteStmts <- pgsqlDeleteAllStmt conn- createStmts <- pgsqlGetFullStatements optCommon optDb setup+ createStmts <- pgsqlGetFullStatements optCommon setup fragile <- pgsqlUpdateFragile setup conn createStmts let stmts = sort deleteStmts ++ Data.List.filter allowInUpgrade (sort fragile) useSqlStmts optCommon optDb stmts
src/Database/HamSql/Internal/DbUtils.hs view
@@ -8,19 +8,23 @@ module Database.HamSql.Internal.DbUtils where import Control.Exception+import Control.Monad import qualified Data.ByteString.Char8 as B import Data.String import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8) import qualified Data.Text.IO as TIO import Database.PostgreSQL.Simple-import Network.URI (URI, parseAbsoluteURI, uriToString)+import Network.URI (URI (..), parseAbsoluteURI, uriToString) import Database.HamSql.Internal.Option import Database.HamSql.Internal.Stmt import Database.HamSql.Internal.Utils import Database.YamSql +sqlErrObjectInUse :: B.ByteString+sqlErrObjectInUse = "55006"+ toQry :: Text -> Query toQry = fromString . T.unpack @@ -31,8 +35,19 @@ Just filename -> TIO.appendFile filename (x <> "\n") getConUrl :: OptCommonDb -> URI-getConUrl xs =- fromJustReason "Not a valid URI" (parseAbsoluteURI $ optConnection xs)+getConUrl optDb = appendQuery "application_name=hamsql" uri+ where+ uri =+ fromJustReason "Not a valid URI" (parseAbsoluteURI $ optConnection optDb)+ appendQuery v u =+ u+ { uriQuery =+ (case maybeHead $ uriQuery u of+ Just '?' -> "&"+ Just _ -> err $ "invalid URI" <-> tshow u+ Nothing -> "?") <>+ v+ } pgsqlExecStmt :: Connection -> SqlStmt -> IO () pgsqlExecStmt conn stmt = do@@ -42,7 +57,7 @@ pgsqlExecStmtHandled :: Connection -> SqlStmt -> IO () pgsqlExecStmtHandled conn stmt =- pgsqlExecStmt conn stmt `catch` pgsqlHandleErr stmt+ pgsqlExecStmt conn stmt `catch` pgsqlHandleErr stmt conn data PgSqlMode = PgSqlWithoutTransaction@@ -69,16 +84,45 @@ showCode (decodeUtf8 (sqlErrorMsg e)) Right conn -> conn -pgsqlHandleErr :: SqlStmt -> SqlError -> IO ()-pgsqlHandleErr stmt e = do+pgsqlHandleErr :: SqlStmt -> Connection -> SqlError -> IO ()+pgsqlHandleErr stmt conn e = do+ extraMsg <-+ if sqlState e == sqlErrObjectInUse && stmtIdType stmt == SqlDropDatabase+ then do+ xs :: [(SqlName, SqlName, Text)] <-+ query_+ conn+ "SELECT datname, usename, application_name FROM pg_stat_activity WHERE pid <> pg_backend_pid()"+ return $+ "The following existing connection(s) might have caused the error:" <\>+ T.intercalate+ "\n"+ (map showConnected $+ filter (\(db, _, _) -> toSqlCode db == sqlIdCode stmt) xs)+ else return "" _ <- err $ "An SQL error occured while executing the following statement" <> showCode (toSqlCode stmt) <\>- "The SQL-Server reported" <>- showCode (decodeUtf8 (sqlErrorMsg e)) <->- "(Error Code: " <>- decodeUtf8 (sqlState e) <>- ")" <\>+ "The SQL-Server reported" <\>+ "Message:" <>+ showCode (decodeUtf8 (sqlErrorMsg e)) <\>+ "Code: " <>+ showCode (decodeUtf8 (sqlState e)) <\>+ errDetail <\>+ errHint <\>+ extraMsg <\> "\nAll statements have been rolled back if possible." return ()+ where+ showConnected (_, role, app) = " - role" <-> toSqlCode role <> appOut app+ appOut "" = ""+ appOut x = " via application '" <> x <> "'"+ errDetail =+ case sqlErrorDetail e of+ "" -> ""+ x -> "Detail:" <> showCode (decodeUtf8 x)+ errHint =+ case sqlErrorHint e of+ "" -> ""+ x -> "Hint:" <> showCode (decodeUtf8 x)
src/Database/HamSql/Internal/InquireDeployed.hs view
@@ -45,6 +45,15 @@ " ON c.contypid = d.oid" <-> sqlManageSchemaJoin "c.connamespace" +-- | List SCHEMA+deployedSchemaIds :: Connection -> IO [SqlObj SQL_SCHEMA SqlName]+deployedSchemaIds conn = map toSqlCodeId <$> query_ conn qry+ where+ toSqlCodeId (Only s) = SqlObj SQL_SCHEMA s+ qry =+ toQry $+ "SELECT s.nspname FROM pg_namespace AS s" <\> sqlManageSchemaJoin "s.oid"+ -- | List SEQUENCE deployedSequenceIds :: Connection -> IO [SqlObj SQL_SEQUENCE SqlName] deployedSequenceIds conn = map toSqlCodeId <$> query_ conn qry@@ -94,18 +103,38 @@ -- | List ROLE deployedRoleIds :: Setup -> Connection -> IO [SqlObj SQL_ROLE SqlName]-deployedRoleIds setup conn = do- roles <-- query conn "SELECT rolname FROM pg_roles WHERE rolname LIKE ?" $- Only $ prefix <> "%"- return $ map toSqlCodeId roles+deployedRoleIds setup conn =+ map toSqlCodeId <$> query conn qry (Only $ prefix <> "%") where+ qry = "SELECT rolname FROM pg_roles WHERE rolname LIKE ?" prefix = setupRolePrefix' setup unprefixed = fromJustReason "Retrived role without prefix from database" . stripPrefix prefix toSqlCodeId (Only role) = SqlObj SQL_ROLE (SqlName $ unprefixed role) +deployedRoleMemberIds :: Setup+ -> Connection+ -> IO [SqlObj SQL_ROLE_MEMBERSHIP (SqlName, SqlName)]+deployedRoleMemberIds setup conn =+ map toSqlCodeId <$> query conn qry (prefix <> "%", prefix <> "%")+ where+ prefix = setupRolePrefix' setup+ unprefixed =+ fromJustReason "Retrived role without prefix from database" .+ stripPrefix prefix+ toSqlCodeId (role, member) =+ SqlObj+ SQL_ROLE_MEMBERSHIP+ (SqlName $ unprefixed role, SqlName $ unprefixed member)+ qry =+ toQry $+ "SELECT a.rolname, b.rolname FROM pg_catalog.pg_auth_members AS m" <\>+ " INNER JOIN pg_catalog.pg_roles AS a ON a.oid=m.roleid" <\>+ " INNER JOIN pg_catalog.pg_roles AS b ON b.oid=m.member" <\>+ "WHERE a.rolname LIKE ? AND b.rolname LIKE ?"++-- | List DOMAIN deployedDomainIds :: Connection -> IO [SqlObj SQL_DOMAIN SqlName] deployedDomainIds conn = map toSqlCodeId <$> query_ conn qry where
src/Database/HamSql/Internal/PostgresCon.hs view
@@ -77,10 +77,11 @@ import Control.Monad import qualified Data.ByteString.Char8 as B import Data.Maybe+import Data.Set (fromList, notMember) import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.Transaction -import Network.URI (URI)+import Network.URI (URI, uriPath) import Database.HamSql.Internal.DbUtils import Database.HamSql.Internal.InquireDeployed@@ -88,7 +89,6 @@ import Database.HamSql.Internal.Stmt import Database.HamSql.Internal.Stmt.Create import Database.HamSql.Internal.Stmt.Domain-import Database.HamSql.Internal.Stmt.Drop import Database.HamSql.Internal.Stmt.Function import Database.HamSql.Internal.Stmt.Role import Database.HamSql.Internal.Stmt.Sequence@@ -100,8 +100,8 @@ sqlErrInvalidFunctionDefinition :: B.ByteString sqlErrInvalidFunctionDefinition = "42P13" -pgsqlGetFullStatements :: OptCommon -> OptCommonDb -> Setup -> IO [SqlStmt]-pgsqlGetFullStatements optCom _ setup =+pgsqlGetFullStatements :: OptCommon -> Setup -> IO [SqlStmt]+pgsqlGetFullStatements optCom setup = return $ catMaybes $ getSetupStatements optCom setup pgsqlDeleteAllStmt :: Connection -> IO [SqlStmt]@@ -120,8 +120,12 @@ correctStmts SqlAddColumn deployedTableColumnIds stmtsDropTableColumn >>= correctStmts SqlCreateSequence deployedSequenceIds stmtsDropSequence >>= correctStmts SqlCreateRole (deployedRoleIds setup) (stmtsDropRole setup) >>=+ correctStmts+ SqlGrantMembership+ (deployedRoleMemberIds setup)+ (stmtRevokeMembership setup) >>= dropResidual SqlCreateFunction deployedFunctionIds stmtsDropFunction >>=- revokeAllPrivileges setup (deployedRoleIds setup conn)+ revokeAllPrivileges conn setup (deployedRoleIds setup conn) where correctStmts :: ToSqlId a@@ -141,12 +145,15 @@ -> IO [SqlStmt] dropResidual t isf f xs = addDropResidual t (isf conn) f xs -revokeAllPrivileges :: Setup+revokeAllPrivileges :: Connection+ -> Setup -> IO [SqlObj SQL_ROLE SqlName] -> [SqlStmt] -> IO [SqlStmt]-revokeAllPrivileges setup roles stmts =- (++ stmts) <$> catMaybes <$> concatMap (stmtsDropAllPrivileges setup) <$> roles+revokeAllPrivileges conn setup roles stmts = do+ schemas <- map (\(SqlObj SQL_SCHEMA x) -> x) <$> deployedSchemaIds conn+ ((++ stmts) <$> catMaybes) . concatMap (stmtsDropAllPrivileges setup schemas) <$>+ roles pgsqlDropAllRoleStmts :: OptCommonDb -> Setup -> IO [SqlStmt] pgsqlDropAllRoleStmts optDb setup = do@@ -240,24 +247,23 @@ | x <- xs , stmtIdType x == t ] -removeStmtsMatchingIds+filterStmtsMatchingIds :: [SqlStmtId] -- ^ Statement ids to remove -> [SqlStmt] -> [SqlStmt]-removeStmtsMatchingIds ids stmts =- [ stmt- | stmt <- stmts- , stmtId stmt `notElem` ids ]+filterStmtsMatchingIds ids = filter (\x -> stmtId x `notMember` ids')+ where+ ids' = fromList ids -removeSqlIdBySqlStmts+filterSqlIdBySqlStmts :: ToSqlId a- => SqlStmtType -> [SqlStmt] -> [a] -> [a]-removeSqlIdBySqlStmts t xs is =- [ x- | x <- is- , sqlId x `notElem` ids ]+ => SqlStmtType -- ^ stmts to be considered by stmt type+ -> [SqlStmt] -- ^ stmts that have the forbidden ids+ -> [a] -- elements that get filtered+ -> [a]+filterSqlIdBySqlStmts t xs = filter (\x -> sqlId x `notMember` ids) where- ids = map sqlId $ filterSqlStmtType t xs+ ids = fromList . map sqlId $ filterSqlStmtType t xs -- target set of sql ids correctStatements@@ -270,7 +276,7 @@ correctStatements t iois f xs = do is <- iois xs' <- addDropResidual t iois f xs- return $ removeStmtsMatchingIds (addSqlStmtType t is) xs'+ return $ filterStmtsMatchingIds (addSqlStmtType t is) xs' addDropResidual :: ToSqlId a@@ -281,4 +287,4 @@ -> IO [SqlStmt] addDropResidual t iois f xs = do is <- iois- return $ xs ++ catMaybes (concatMap f (removeSqlIdBySqlStmts t xs is))+ return $ xs ++ catMaybes (concatMap f (filterSqlIdBySqlStmts t xs is))
src/Database/HamSql/Internal/Stmt.hs view
@@ -87,10 +87,11 @@ | SqlPre | SqlPreInstall | SqlRevokePrivilege+ | SqlRevokeMembership | SqlDropRole | SqlCreateRole | SqlAlterRole- | SqlRoleMembership+ | SqlGrantMembership | SqlCreateSchema | SqlCreateDomain | SqlCreateType
src/Database/HamSql/Internal/Stmt/Create.hs view
@@ -10,6 +10,7 @@ import Database.HamSql.Internal.Stmt import Database.HamSql.Internal.Stmt.Basic import Database.HamSql.Internal.Stmt.Commons ()+import Database.HamSql.Internal.Stmt.Database import Database.HamSql.Internal.Stmt.Domain () import Database.HamSql.Internal.Stmt.Function () import Database.HamSql.Internal.Stmt.Role ()@@ -18,11 +19,9 @@ import Database.HamSql.Internal.Stmt.Table () import Database.HamSql.Internal.Stmt.Type () -fa- :: Show b- => Maybe b -> Schema -> [SetupElement]-fa source schema =- [toSetupElement $ SqlContext schema] +++allSchemaElements :: Schema -> [SetupElement]+allSchemaElements schema =+ [SetupElement $ SqlContext schema] ++ toElemList' schemaRoles schema ++ toElemList schemaDomains schema ++ toElemList schemaFunctions schema ++@@ -30,17 +29,15 @@ toElemList schemaTables schema ++ toElemList schemaTypes schema ++ concat- [ map (toSetupElement . (\x -> SqlContext (schema, table, x))) $+ [ map (SetupElement . (\x -> SqlContext (schema, table, x))) $ tableColumns table | table <- fromMaybe [] $ schemaTables schema ] where- toSetupElement x = SetupElement x source- toElemList y =- maybeMap (toSetupElement . (\x -> SqlContext (schema, x))) . y- toElemList' y = maybeMap (toSetupElement . SqlContext) . y+ toElemList y = maybeMap (SetupElement . (\x -> SqlContext (schema, x))) . y+ toElemList' y = maybeMap (SetupElement . SqlContext) . y -fb :: SetupContext -> [SetupElement] -> [Maybe SqlStmt]-fb x = concatMap (toSqlStmts x)+elementsToStmts :: SetupContext -> [SetupElement] -> [Maybe SqlStmt]+elementsToStmts setupContext = concatMap (toSqlStmts setupContext) data SQL_OTHER = SQL_OTHER@@ -49,13 +46,6 @@ instance ToSqlCode SQL_OTHER where toSqlCode = const "SQL_OTHER" -data SQL_DATABASE =- SQL_DATABASE- deriving (SqlObjType, Show)--instance ToSqlCode SQL_DATABASE where- toSqlCode = const "DATABASE"- emptyName :: SqlId emptyName = SqlId $ SqlObj SQL_OTHER $ SqlName "" @@ -64,23 +54,6 @@ catMaybes [newSqlStmt SqlUnclassified emptyName "BEGIN TRANSACTION"] ++ xs ++ catMaybes [newSqlStmt SqlUnclassified emptyName "COMMIT"] --- | create database-sqlCreateDatabase :: Bool -> SqlName -> [Maybe SqlStmt]-sqlCreateDatabase deleteDatabase dbName =- [ sqlDelete deleteDatabase- , newSqlStmt SqlCreateDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $- "CREATE DATABASE " <> toSqlCode dbName- , newSqlStmt- SqlCreateDatabase- (SqlId $ SqlObj SQL_DATABASE dbName)- "ALTER DEFAULT PRIVILEGES REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC"- ]- where- sqlDelete True =- newSqlStmt SqlDropDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $- "DROP DATABASE IF EXISTS" <-> toSqlCode dbName- sqlDelete False = Nothing- -- | Setup getSetupStatements :: OptCommon -> Setup -> [Maybe SqlStmt] getSetupStatements opts s =@@ -94,4 +67,4 @@ getSchemaStatements :: OptCommon -> Setup -> Schema -> [Maybe SqlStmt] getSchemaStatements _ setup s =- fb (SetupContext setup) $ fa (Just ("src" :: String)) s+ elementsToStmts (SetupContext setup) $ allSchemaElements s
+ src/Database/HamSql/Internal/Stmt/Database.hs view
@@ -0,0 +1,31 @@+-- This file is part of HamSql+--+-- Copyright 2016 by it's authors.+-- Some rights reserved. See COPYING, AUTHORS.+module Database.HamSql.Internal.Stmt.Database where++import Database.HamSql.Internal.Stmt.Basic++data SQL_DATABASE =+ SQL_DATABASE+ deriving (SqlObjType, Show)++instance ToSqlCode SQL_DATABASE where+ toSqlCode = const "DATABASE"++-- | create database+stmtsCreateDatabase :: Bool -> SqlName -> [Maybe SqlStmt]+stmtsCreateDatabase deleteDatabase dbName =+ [ sqlDelete deleteDatabase+ , newSqlStmt SqlCreateDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $+ "CREATE DATABASE " <> toSqlCode dbName+ , newSqlStmt+ SqlCreateDatabase+ (SqlId $ SqlObj SQL_DATABASE dbName)+ "ALTER DEFAULT PRIVILEGES REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC"+ ]+ where+ sqlDelete True =+ newSqlStmt SqlDropDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $+ "DROP DATABASE IF EXISTS" <-> toSqlCode dbName+ sqlDelete False = Nothing
− src/Database/HamSql/Internal/Stmt/Drop.hs
@@ -1,15 +0,0 @@--- This file is part of HamSql------ Copyright 2014-2016 by it's authors.--- Some rights reserved. See COPYING, AUTHORS.-module Database.HamSql.Internal.Stmt.Drop where--import Database.HamSql.Internal.Stmt.Basic---- TABLE-stmtsDropTable :: SqlObj SQL_TABLE SqlName -> [Maybe SqlStmt]-stmtsDropTable t = [newSqlStmt SqlDropTable t $ "DROP TABLE " <> toSqlCode t]---- TYPE-stmtsDropType :: SqlObj SQL_TYPE SqlName -> [Maybe SqlStmt]-stmtsDropType t = [newSqlStmt SqlDropType t $ "DROP TYPE " <> toSqlCode t]
src/Database/HamSql/Internal/Stmt/Role.hs view
@@ -14,9 +14,12 @@ stmtsDropRole setup role@(SqlObj _ roleSqlName) = [newSqlStmt SqlDropRole role $ "DROP ROLE " <> prefixedRole setup roleSqlName] -stmtsDropAllPrivileges :: Setup -> SqlObj SQL_ROLE SqlName -> [Maybe SqlStmt]-stmtsDropAllPrivileges setup x@(SqlObj _ n)- | schemas == [] = [Nothing]+stmtsDropAllPrivileges :: Setup+ -> [SqlName]+ -> SqlObj SQL_ROLE SqlName+ -> [Maybe SqlStmt]+stmtsDropAllPrivileges setup schemas x@(SqlObj _ n)+ | null schemas = [Nothing] | otherwise = [ newSqlStmt SqlRevokePrivilege x $ "REVOKE ALL PRIVILEGES ON ALL" <-> objType <-> "IN SCHEMA" <->@@ -24,9 +27,15 @@ "FROM" <-> prefixedRole setup n | objType <- ["TABLES", "SEQUENCES", "FUNCTIONS"] ]- where- schemas = maybeMap schemaName (setupSchemaData setup) +stmtRevokeMembership :: Setup+ -> SqlObj SQL_ROLE_MEMBERSHIP (SqlName, SqlName)+ -> [Maybe SqlStmt]+stmtRevokeMembership setup x@(SqlObj _ (role, member)) =+ [ newSqlStmt SqlRevokeMembership x $+ "REVOKE" <-> prefixedRole setup role <-> "FROM" <-> prefixedRole setup member+ ]+ instance ToSqlStmts (SqlContext Role) where toSqlStmts SetupContext {setupContextSetup = setup} obj@(SqlContext r) = [stmtCreateRole, stmtAlterRole, stmtCommentRole] ++@@ -44,7 +53,7 @@ "COMMENT ON ROLE" <-> prefix (roleName r) <-> "IS" <-> toSqlCodeString (roleDescription r) sqlRoleMembership group =- newSqlStmt SqlRoleMembership obj $+ newSqlStmt SqlGrantMembership obj $ "GRANT" <-> prefix group <-> "TO" <-> prefix (roleName r) sqlLogin (Just True) = "LOGIN" sqlLogin _ = "NOLOGIN"
src/Database/HamSql/Internal/Stmt/Table.hs view
@@ -5,14 +5,15 @@ {-# LANGUAGE FlexibleInstances #-} module Database.HamSql.Internal.Stmt.Table- ( stmtsDropTableConstr+ ( stmtsDropTable+ , stmtsDropTableConstr , stmtsDropTableColumn ) where import qualified Data.Text as T import Database.HamSql.Internal.Stmt.Basic-import Database.HamSql.Internal.Stmt.Sequence()+import Database.HamSql.Internal.Stmt.Sequence () -- | Assuming that CASCADE will only cause other constraints to be deleted. -- | Required since foreign keys may depend on other keys.@@ -25,6 +26,9 @@ "CASCADE" ] +stmtsDropTable :: SqlObj SQL_TABLE SqlName -> [Maybe SqlStmt]+stmtsDropTable t = [newSqlStmt SqlDropTable t $ "DROP TABLE" <-> toSqlCode t]+ stmtsDropTableColumn :: SqlObj SQL_COLUMN (SqlName, SqlName) -> [Maybe SqlStmt] stmtsDropTableColumn x@(SqlObj _ (t, c)) = [ newSqlStmt SqlDropTableColumn x $@@ -95,7 +99,7 @@ where sqlDefault d = stmtAlterColumn SqlAddDefault $ "SET DEFAULT " <> d -- [CHECK]- stmtsAddColumnCheck = maybeMap (stmtCheck obj) (columnChecks c)+ stmtsAddColumnCheck = maybeMap (stmtCheck tbl) (columnChecks c) -- FOREIGN KEY stmtAddForeignKey = case columnReferences c of@@ -105,8 +109,7 @@ in newSqlStmt SqlCreateForeignKeyConstr (constrId schema table constr) $- "ALTER TABLE" <-> sqlIdCode obj <-> "ADD CONSTRAINT" <->- toSqlCode constr <->+ "ALTER TABLE" <-> tblId <-> "ADD CONSTRAINT" <-> toSqlCode constr <-> "FOREIGN KEY (" <> toSqlCode (columnName c) <> ")" <->@@ -137,13 +140,14 @@ "nextval('" <> toSqlCode (sqlId serialSequenceContext) <> "')" } | otherwise = rawColumn- tblId = toSqlCode $ schemaName schema <.> tableName table+ tblId = sqlIdCode tbl+ tbl = SqlContext (schema, table) serialSequenceContext = SqlContext ( schema , Sequence -- sequenceName follows PostgreSQL internal convention- { sequenceName = tableName table <> columnName c <> SqlName "_seq"+ { sequenceName = tableName table <> columnName c <> SqlName "seq" , sequenceIncrement = Nothing , sequenceMinValue = Nothing , sequenceMaxValue = Nothing
src/Database/HamSql/Internal/Stmt/Type.hs view
@@ -10,6 +10,9 @@ import Database.HamSql.Internal.Stmt.Basic +stmtsDropType :: SqlObj SQL_TYPE SqlName -> [Maybe SqlStmt]+stmtsDropType t = [newSqlStmt SqlDropType t $ "DROP TYPE" <-> toSqlCode t]+ instance ToSqlStmts (SqlContext (Schema, Type)) where toSqlStmts _ obj@(SqlContext (_, t)) = [ newSqlStmt SqlCreateType obj $
src/Database/HamSql/Internal/Utils.hs view
@@ -102,6 +102,10 @@ showCode :: Text -> Text showCode = T.replace "\n" "\n " . T.cons '\n' +maybeHead :: [a] -> Maybe a+maybeHead [] = Nothing+maybeHead (x:_) = Just x+ tr :: Show a => a -> a
src/Database/HamSql/Setup.hs view
@@ -22,9 +22,10 @@ { setupContextSetup :: Setup } -data SetupElement where SetupElement :: (ToSqlStmts a, Show b) => { setupElement :: a- , setupElementSource :: Maybe b- } -> SetupElement+data SetupElement where+ SetupElement :: (ToSqlStmts a)+ => { setupElement :: a }+ -> SetupElement instance ToSqlStmts SetupElement where toSqlStmts x SetupElement{setupElement=y} = toSqlStmts x y
src/Database/YamSql/Internal/Obj/Role.hs view
@@ -29,3 +29,10 @@ instance ToSqlId (SqlContext Role) where sqlId (SqlContext x) = SqlId $ SqlObj SQL_ROLE (roleName x)++data SQL_ROLE_MEMBERSHIP =+ SQL_ROLE_MEMBERSHIP+ deriving (SqlObjType, Show)++instance ToSqlCode SQL_ROLE_MEMBERSHIP where+ toSqlCode = const "ROLE_MEMBERSHIP"
src/Database/YamSql/Internal/Obj/Schema.hs view
@@ -6,6 +6,7 @@ module Database.YamSql.Internal.Obj.Schema ( Schema(..)+ , SQL_SCHEMA(..) , module Database.YamSql.Internal.Obj.Check , module Database.YamSql.Internal.Obj.Domain , module Database.YamSql.Internal.Obj.Function