Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
ProjectM36.SQL.Convert
Synopsis
- newtype TableContext = TableContext (Map TableAlias (RelationalExpr, Attributes, ColumnAliasRemapper))
- type TypeForRelExprF = RelationalExpr -> Either RelationalError Relation
- type ConvertM = StateT TableContext (ExceptT SQLError Identity)
- runConvertM :: TableContext -> ConvertM a -> Either SQLError (a, TableContext)
- runLocalConvertM :: ConvertM a -> ConvertM a
- evalConvertM :: TableContext -> ConvertM a -> Either SQLError a
- data SelectItemsConvertTask = SelectItemsConvertTask {}
- emptyTask :: SelectItemsConvertTask
- type AttributeAlias = AttributeName
- type ColumnAliasRemapper = Map AttributeName (AttributeAlias, Set ColumnName)
- insertIntoColumnAliasRemap' :: AttributeName -> AttributeAlias -> ColumnName -> ColumnAliasRemapper -> Either SQLError ColumnAliasRemapper
- insertColumnAlias :: TableAlias -> AttributeName -> ColumnAlias -> ColumnName -> ConvertM ()
- prettyTableContext :: TableContext -> String
- prettyColumnAliasRemapper :: ColumnAliasRemapper -> String
- type ColumnAliasMap = Map ColumnAlias AttributeName
- tableAliasesAsWithNameAssocs :: ConvertM WithNamesAssocs
- throwSQLE :: SQLError -> ConvertM a
- type ColumnAliasRenameMap = Map (TableAlias, AttributeName) ColumnAlias
- withSubSelect :: ConvertM a -> ConvertM (a, ColumnAliasRenameMap)
- generateColumnAlias :: TableAlias -> AttributeName -> ConvertM ColumnAlias
- insertTable :: TableAlias -> RelationalExpr -> Attributes -> ConvertM ColumnAliasMap
- noteColumnMention :: Maybe TableAlias -> ColumnName -> Maybe ColumnAlias -> ConvertM ColumnAlias
- lookupTable :: TableAlias -> ConvertM (RelationalExpr, Attributes, ColumnAliasRemapper)
- findColumn :: ColumnName -> ConvertM [TableAlias]
- findColumn' :: ColumnName -> TableContext -> [TableAlias]
- findNotedColumn' :: ColumnName -> TableContext -> Either SQLError [(TableAlias, AttributeName)]
- attributeNameForAttributeAlias :: AttributeAlias -> ColumnAliasRemapper -> Either SQLError AttributeName
- findOneColumn :: ColumnName -> ConvertM TableAlias
- findOneColumn' :: ColumnName -> TableContext -> Either SQLError TableAlias
- attributeNameForColumnName :: ColumnName -> ConvertM AttributeName
- wrapTypeF :: TypeForRelExprF -> RelationalExpr -> ConvertM Relation
- baseDFExpr :: DataFrameExpr
- falseDFExpr :: DataFrameExpr
- convertQuery :: TypeForRelExprF -> Query -> ConvertM DataFrameExpr
- convertSelect :: TypeForRelExprF -> Select -> ConvertM DataFrameExpr
- appendWithsToTypeF :: TypeForRelExprF -> WithNamesAssocs -> TypeForRelExprF
- convertSubSelect :: TypeForRelExprF -> Select -> ConvertM RelationalExpr
- convertSelectItem :: TypeForRelExprF -> SelectItemsConvertTask -> (Int, SelectItem) -> ConvertM SelectItemsConvertTask
- convertProjection :: TypeForRelExprF -> [SelectItem] -> [GroupByExpr] -> Maybe HavingExpr -> ConvertM (RelationalExpr -> RelationalExpr)
- convertUnqualifiedColumnName :: UnqualifiedColumnName -> AttributeName
- convertColumnName :: ColumnName -> ConvertM AttributeName
- convertColumnProjectionName :: ColumnProjectionName -> ConvertM AttributeName
- convertTableExpr :: TypeForRelExprF -> TableExpr -> ConvertM (DataFrameExpr, ColumnAliasMap)
- func :: FunctionName -> [AtomExpr] -> AtomExpr
- convertWhereClause :: TypeForRelExprF -> RestrictionExpr -> ConvertM RestrictionPredicateExpr
- convertScalarExpr :: TypeForRelExprF -> ScalarExpr -> ConvertM AtomExpr
- convertProjectionScalarExpr :: TypeForRelExprF -> ProjectionScalarExpr -> ConvertM AtomExpr
- convertOrderByClause :: TypeForRelExprF -> [SortExpr] -> ConvertM [AttributeOrderExpr]
- convertWithClause :: TypeForRelExprF -> WithClause -> ConvertM WithNamesAssocs
- type ColumnRemap = Map ColumnName ColumnName
- convertFromClause :: TypeForRelExprF -> [TableRef] -> ConvertM (RelationalExpr, ColumnAliasMap)
- convertTableRef :: TypeForRelExprF -> TableRef -> ConvertM (TableAlias, RelationalExpr)
- joinTableRef :: TypeForRelExprF -> RelationalExpr -> (Int, TableRef) -> ConvertM RelationalExpr
- lookupOperator :: Bool -> OperatorName -> ConvertM ([AtomExpr] -> AtomExpr)
- lookupFunc :: FuncName -> ConvertM ([AtomExpr] -> AtomExpr)
- commonAttributeNames :: TypeForRelExprF -> RelationalExpr -> RelationalExpr -> ConvertM (Set AttributeName, Set AttributeName, Set AttributeName)
- renameIdentifier :: (ColumnName -> ColumnName) -> ScalarExpr -> ScalarExpr
- columnNamesInScalarExpr :: ScalarExpr -> Set ColumnName
- columnNamesInRestrictionExpr :: RestrictionExpr -> Set ColumnName
- needsToRenameAllAttributes :: RestrictionExpr -> Bool
- pushDownAttributeRename :: Set (AttributeName, AttributeName) -> RelationalExpr -> RelationalExpr -> RelationalExpr
- mkTableContextFromDatabaseContext :: DatabaseContext -> TransactionGraph -> Either RelationalError TableContext
- convertUpdate :: TypeForRelExprF -> Update -> ConvertM DatabaseContextExpr
- convertTableName :: TableName -> ConvertM RelVarName
- convertDBUpdates :: TypeForRelExprF -> [DBUpdate] -> ConvertM DatabaseContextExpr
- convertDBUpdate :: TypeForRelExprF -> DBUpdate -> ConvertM DatabaseContextExpr
- convertInsert :: TypeForRelExprF -> Insert -> ConvertM DatabaseContextExpr
- convertDelete :: TypeForRelExprF -> Delete -> ConvertM DatabaseContextExpr
- convertCreateTable :: TypeForRelExprF -> CreateTable -> ConvertM DatabaseContextExpr
- convertDropTable :: TypeForRelExprF -> DropTable -> ConvertM DatabaseContextExpr
- convertColumnNamesAndTypes :: RelVarName -> [(UnqualifiedColumnName, ColumnType, PerColumnConstraints)] -> ConvertM ([AttributeExpr], [DatabaseContextExpr])
- convertColumnType :: ColumnType -> PerColumnConstraints -> ConvertM TypeConstructor
- convertPerColumnConstraints :: RelVarName -> UnqualifiedColumnName -> PerColumnConstraints -> ConvertM [DatabaseContextExpr]
- databaseContextExprForUniqueKeyWithNull :: RelVarName -> AttributeName -> DatabaseContextExpr
- convertGroupBy :: TypeForRelExprF -> [GroupByExpr] -> Maybe HavingExpr -> [SelectItem] -> ConvertM GroupByInfo
- data GroupByItem
- data GroupByInfo = GroupByInfo {}
- emptyGroupByInfo :: GroupByInfo
- aggregateFunctionsMap :: [(FuncName, FunctionName)]
- isAggregateFunction :: FuncName -> Bool
- containsAggregate :: ProjectionScalarExpr -> Bool
- containsProjScalarExpr :: ProjectionScalarExpr -> ProjectionScalarExpr -> Bool
- replaceProjScalarExpr :: (ProjectionScalarExpr -> ProjectionScalarExpr) -> ProjectionScalarExpr -> ProjectionScalarExpr
- processSQLAggregateFunctions :: AtomExpr -> AtomExpr
Documentation
newtype TableContext Source #
Constructors
TableContext (Map TableAlias (RelationalExpr, Attributes, ColumnAliasRemapper)) |
Instances
Monoid TableContext Source # | |
Defined in ProjectM36.SQL.Convert Methods mempty :: TableContext Source # mappend :: TableContext -> TableContext -> TableContext Source # mconcat :: [TableContext] -> TableContext Source # | |
Semigroup TableContext Source # | |
Defined in ProjectM36.SQL.Convert Methods (<>) :: TableContext -> TableContext -> TableContext Source # sconcat :: NonEmpty TableContext -> TableContext Source # stimes :: Integral b => b -> TableContext -> TableContext Source # | |
Show TableContext Source # | |
Defined in ProjectM36.SQL.Convert | |
Eq TableContext Source # | |
Defined in ProjectM36.SQL.Convert Methods (==) :: TableContext -> TableContext -> Bool Source # (/=) :: TableContext -> TableContext -> Bool Source # |
runConvertM :: TableContext -> ConvertM a -> Either SQLError (a, TableContext) Source #
runLocalConvertM :: ConvertM a -> ConvertM a Source #
evalConvertM :: TableContext -> ConvertM a -> Either SQLError a Source #
data SelectItemsConvertTask Source #
Constructors
SelectItemsConvertTask | |
Fields |
Instances
Show SelectItemsConvertTask Source # | |
Defined in ProjectM36.SQL.Convert | |
Eq SelectItemsConvertTask Source # | |
Defined in ProjectM36.SQL.Convert Methods (==) :: SelectItemsConvertTask -> SelectItemsConvertTask -> Bool Source # (/=) :: SelectItemsConvertTask -> SelectItemsConvertTask -> Bool Source # |
type AttributeAlias = AttributeName Source #
insertIntoColumnAliasRemap' :: AttributeName -> AttributeAlias -> ColumnName -> ColumnAliasRemapper -> Either SQLError ColumnAliasRemapper Source #
insertColumnAlias :: TableAlias -> AttributeName -> ColumnAlias -> ColumnName -> ConvertM () Source #
Used to note if columns are remapped to different attributes in order to mitigate attribute naming conflicts.
type ColumnAliasMap = Map ColumnAlias AttributeName Source #
type ColumnAliasRenameMap = Map (TableAlias, AttributeName) ColumnAlias Source #
withSubSelect :: ConvertM a -> ConvertM (a, ColumnAliasRenameMap) Source #
Pass state down to subselect, but discard any state changes from the subselect processing.
insertTable :: TableAlias -> RelationalExpr -> Attributes -> ConvertM ColumnAliasMap Source #
Insert another table into the TableContext. Returns an alias map of any columns which could conflict with column names already present in the TableContext so that they can be optionally renamed.
noteColumnMention :: Maybe TableAlias -> ColumnName -> Maybe ColumnAlias -> ConvertM ColumnAlias Source #
When a column is mentioned, it may need to be aliased. The table name must already be in the table context so that we can identify that the attribute exists. Without a table name, we must look for a uniquely named column amongst all tables. Thus, we pre-emptively eliminate duplicate column names.
findColumn :: ColumnName -> ConvertM [TableAlias] Source #
Find a column name or column alias in the underlying table context. Returns key into table context.
findColumn' :: ColumnName -> TableContext -> [TableAlias] Source #
non ConvertM version of findColumn
findNotedColumn' :: ColumnName -> TableContext -> Either SQLError [(TableAlias, AttributeName)] Source #
attributeNameForAttributeAlias :: AttributeAlias -> ColumnAliasRemapper -> Either SQLError AttributeName Source #
attributeNameForColumnName :: ColumnName -> ConvertM AttributeName Source #
Search the TableContext for a column alias remapping for the given column name. This function can change the state context if column names conflict.
convertQuery :: TypeForRelExprF -> Query -> ConvertM DataFrameExpr Source #
convertSubSelect :: TypeForRelExprF -> Select -> ConvertM RelationalExpr Source #
Slightly different processing for subselects.
convertSelectItem :: TypeForRelExprF -> SelectItemsConvertTask -> (Int, SelectItem) -> ConvertM SelectItemsConvertTask Source #
convertProjection :: TypeForRelExprF -> [SelectItem] -> [GroupByExpr] -> Maybe HavingExpr -> ConvertM (RelationalExpr -> RelationalExpr) Source #
convertTableExpr :: TypeForRelExprF -> TableExpr -> ConvertM (DataFrameExpr, ColumnAliasMap) Source #
convertWhereClause :: TypeForRelExprF -> RestrictionExpr -> ConvertM RestrictionPredicateExpr Source #
convertProjectionScalarExpr :: TypeForRelExprF -> ProjectionScalarExpr -> ConvertM AtomExpr Source #
convertOrderByClause :: TypeForRelExprF -> [SortExpr] -> ConvertM [AttributeOrderExpr] Source #
type ColumnRemap = Map ColumnName ColumnName Source #
convertFromClause :: TypeForRelExprF -> [TableRef] -> ConvertM (RelationalExpr, ColumnAliasMap) Source #
convertTableRef :: TypeForRelExprF -> TableRef -> ConvertM (TableAlias, RelationalExpr) Source #
Convert TableRefs after the first one (assumes all additional TableRefs are for joins). Returns the qualified name key that was added to the map, the underlying relexpr (not aliased so that it can used for extracting type information), and the new table context map
joinTableRef :: TypeForRelExprF -> RelationalExpr -> (Int, TableRef) -> ConvertM RelationalExpr Source #
lookupOperator :: Bool -> OperatorName -> ConvertM ([AtomExpr] -> AtomExpr) Source #
commonAttributeNames :: TypeForRelExprF -> RelationalExpr -> RelationalExpr -> ConvertM (Set AttributeName, Set AttributeName, Set AttributeName) Source #
Used in join condition detection necessary for renames to enable natural joins.
renameIdentifier :: (ColumnName -> ColumnName) -> ScalarExpr -> ScalarExpr Source #
Used to remap SQL qualified names to new names to prevent conflicts in join conditions.
needsToRenameAllAttributes :: RestrictionExpr -> Bool Source #
If the restriction includes a EXISTS expression, we must rename all attributes at the top-level to prevent conflicts.
pushDownAttributeRename :: Set (AttributeName, AttributeName) -> RelationalExpr -> RelationalExpr -> RelationalExpr Source #
mkTableContextFromDatabaseContext :: DatabaseContext -> TransactionGraph -> Either RelationalError TableContext Source #
convertColumnNamesAndTypes :: RelVarName -> [(UnqualifiedColumnName, ColumnType, PerColumnConstraints)] -> ConvertM ([AttributeExpr], [DatabaseContextExpr]) Source #
convertPerColumnConstraints :: RelVarName -> UnqualifiedColumnName -> PerColumnConstraints -> ConvertM [DatabaseContextExpr] Source #
databaseContextExprForUniqueKeyWithNull :: RelVarName -> AttributeName -> DatabaseContextExpr Source #
convertGroupBy :: TypeForRelExprF -> [GroupByExpr] -> Maybe HavingExpr -> [SelectItem] -> ConvertM GroupByInfo Source #
data GroupByItem Source #
Constructors
AggGroupByItem ProjectionScalarExpr GroupByExpr | |
NonAggGroupByItem ProjectionScalarExpr GroupByExpr |
Instances
Show GroupByItem Source # | |
Defined in ProjectM36.SQL.Convert | |
Eq GroupByItem Source # | |
Defined in ProjectM36.SQL.Convert Methods (==) :: GroupByItem -> GroupByItem -> Bool Source # (/=) :: GroupByItem -> GroupByItem -> Bool Source # |
data GroupByInfo Source #
Validated "group by" and "having" data
Constructors
GroupByInfo | |
Fields
|
Instances
Show GroupByInfo Source # | |
Defined in ProjectM36.SQL.Convert | |
Eq GroupByInfo Source # | |
Defined in ProjectM36.SQL.Convert Methods (==) :: GroupByInfo -> GroupByInfo -> Bool Source # (/=) :: GroupByInfo -> GroupByInfo -> Bool Source # |
aggregateFunctionsMap :: [(FuncName, FunctionName)] Source #
isAggregateFunction :: FuncName -> Bool Source #
containsProjScalarExpr :: ProjectionScalarExpr -> ProjectionScalarExpr -> Bool Source #
Returns True iff a projection scalar expr within a larger expression. Used for group by aggregation validation.