Safe Haskell | None |
---|---|
Language | GHC2024 |
Synopsis
- data RefStore = RefStore {}
- class HasRefStore s where
- letters :: [Char]
- newRefStore :: RefStore
- newRef :: forall {k} s m (a :: k). (HasRefStore s, MonadState s m) => m (Ref a)
- newQState :: QState
- data QState = QState {}
- newtype Q a = Q {}
- runQ :: Q a -> (a, Query)
- mkQ :: Q a -> Query
- evalQ :: Q c -> c
- modQ :: Query -> Q a -> Query
- asQuery :: Iso' (Q ()) Query
- with_ :: Query -> Q (Ref Relation)
- withQ_ :: Q a -> Q (Ref Relation)
- withQ'_ :: Q a -> Q (Ref Relation, Query)
- withQ :: Q a -> Q (Ref Relation, Query, a)
- withQAs_ :: Ref Query -> Q a -> Q (Ref Table)
- withAs_ :: Selected Query -> Q (Ref Table)
- withAs_' :: Selected Query -> NonEmpty (Ref SExp) -> Q (Ref Table)
- withOptionAs_ :: Bool -> Maybe (NonEmpty (Ref SExp)) -> Selected Query -> Q (Ref Table)
- withRecursiveAs_ :: Selected Query -> Q (Ref Table)
- withAsUnique :: Selected Query -> Q (Ref Table)
- select_ :: SExp -> Q (Ref SExp)
- selectAs_ :: Selected SExp -> Q (Ref SExp)
- selectsAs_ :: [Selected SExp] -> Q [Ref SExp]
- selectAs_' :: Alias SExp -> Q (Maybe (Ref SExp))
- selectsAs_' :: [Alias SExp] -> Q [Maybe (Ref SExp)]
- addComment :: Text -> Ref SExp -> Q (Ref SExp)
- annotateJson :: ToJSON a => a -> Ref SExp -> Q (Ref SExp)
- selectsGroupsAs_ :: [Selected SExp] -> Q ()
- selectsGroupsAsRef_ :: [Selected SExp] -> Q ()
- selectNonEmptyGroups :: [Selected SExp] -> Q ()
- from_ :: Relation -> Q (Ref Relation)
- fromIfNecessary :: Relation -> Q (Ref Relation)
- fromSelected_ :: Selected Relation -> Q (Ref Relation)
- fromAlias_ :: Alias Relation -> Q (Ref Relation)
- fromRef_ :: Ref Relation -> Q (Ref Relation)
- fromRel :: AsRelation r => r -> Q (Ref Relation)
- fromSpecified :: Q Bool
- fromOrJoin :: Alias Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation)
- join_ :: JoinType -> Relation -> (Ref Relation -> Maybe SExp) -> Q (Ref Relation)
- joinUsing_ :: JoinType -> Relation -> [Ref SExp] -> Q (Ref Relation)
- joinRef_ :: JoinType -> Ref Relation -> (Ref Relation -> Maybe SExp) -> Q (Ref Relation)
- joinSelected_ :: JoinType -> Selected Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation)
- joinAlias_ :: JoinType -> Alias Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation)
- joinOn_ :: JoinType -> Relation -> (Ref Relation -> SExp) -> Q (Ref Relation)
- innerJoin :: Relation -> (Ref Relation -> SExp) -> Q (Ref Relation)
- crossJoin :: Relation -> Q (Ref Relation)
- leftJoin :: Relation -> (Ref Relation -> SExp) -> Q (Ref Relation)
- rightJoin :: Relation -> (Ref Relation -> SExp) -> Q (Ref Relation)
- outerJoin :: Relation -> (Ref Relation -> SExp) -> Q (Ref Relation)
- having :: MonadState QState m => SExp -> m ()
- havingL :: Applicative f => (Maybe SExp -> f (Maybe SExp)) -> QState -> f QState
- where_ :: SExp -> Q ()
- whereL :: (Maybe SExp -> Identity (Maybe SExp)) -> QState -> Identity QState
- tableOperator_ :: ParensOperator -> Q ()
- tableOperatorL :: (Maybe ParensOperator -> Identity (Maybe ParensOperator)) -> QState -> Identity QState
- whereAdd :: MonadState QState m => SExp -> m ()
- whereAddIn :: MonadState QState m => SExp -> [SExp] -> m ()
- whereAddNotIn :: MonadState QState m => SExp -> [SExp] -> m ()
- groupBy_ :: [SExp] -> Q ()
- orderBy_ :: Order -> Q ()
- limit_ :: MonadState QState m => Int -> m ()
- offset_ :: MonadState QState m => Int -> m ()
- mdef :: a -> Iso' (Maybe a) a
- fromQuery :: Q a -> Relation
- scopeRelation :: SExp -> Relation -> Relation
- selectEverything :: [(Ref Relation, DefinedQuery)] -> Q ()
- explicitSelectStarWith :: s -> Ref Relation -> Getting (Endo [Ref SExp]) s (Ref SExp) -> (Selected SExp -> Selected SExp) -> Q ()
- explicitSelectStar :: HasDefinition s => s -> Ref Relation -> Q ()
- explicitMapSelectStar :: HasDefinition s => s -> Ref Relation -> (Selected SExp -> Selected SExp) -> Q ()
- selectStar :: Ref Relation -> Q (Ref Relation)
- selectNonDuplicates :: Foldable t => t (Ref SExp) -> Q ()
- mapSelectNonDuplicates :: Foldable t => t (Ref SExp) -> (Selected SExp -> Selected SExp) -> Q ()
- union_ :: UnionType -> Query -> Query -> WithClauses -> Q ()
- data UState = UState {
- vars :: RefStore
- query :: UpdateQuery
- newtype U a = U {}
- mkU :: Alias (Ref Table) -> (Ref Relation -> U a) -> UpdateQuery
- updateWhereAdd :: MonadState UState m => SExp -> m ()
- updateJoin_ :: JoinType -> Relation -> (Ref Relation -> Maybe SExp) -> U (Ref Relation)
- updateJoinOn_ :: JoinType -> Relation -> (Ref Relation -> SExp) -> U (Ref Relation)
- updateInnerJoin_ :: Relation -> (Ref Relation -> SExp) -> U (Ref Relation)
- updateSet_ :: Name -> SExp -> U ()
- qsQuery :: Lens' QState Query
- qsVars :: Lens' UState RefStore
Documentation
Supply of fresh reference names to be used in monadic contexts where you need an infinite-ish supply.
Instances
Data RefStore # | |||||
Defined in Napkin.Untyped.Monad gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RefStore -> c RefStore # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c RefStore # toConstr :: RefStore -> Constr # dataTypeOf :: RefStore -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c RefStore) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RefStore) # gmapT :: (forall b. Data b => b -> b) -> RefStore -> RefStore # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RefStore -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RefStore -> r # gmapQ :: (forall d. Data d => d -> u) -> RefStore -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> RefStore -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> RefStore -> m RefStore # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RefStore -> m RefStore # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RefStore -> m RefStore # | |||||
Generic RefStore # | |||||
Defined in Napkin.Untyped.Monad
| |||||
Show RefStore # | |||||
Eq RefStore # | |||||
Ord RefStore # | |||||
Defined in Napkin.Untyped.Monad | |||||
HasRefStore RefStore # | |||||
type Rep RefStore # | |||||
Defined in Napkin.Untyped.Monad type Rep RefStore = D1 ('MetaData "RefStore" "Napkin.Untyped.Monad" "napkin-spec-2.0.0-7NH5JHRFo7V8BQP5NCfMo1" 'False) (C1 ('MetaCons "RefStore" 'PrefixI 'True) (S1 ('MetaSel ('Just "feed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Text)) :*: S1 ('MetaSel ('Just "blacklist") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set Text)))) |
class HasRefStore s where #
Instances
newRefStore :: RefStore #
newRef :: forall {k} s m (a :: k). (HasRefStore s, MonadState s m) => m (Ref a) #
Instances
Data QState # | |||||
Defined in Napkin.Untyped.Monad gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> QState -> c QState # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c QState # toConstr :: QState -> Constr # dataTypeOf :: QState -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c QState) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QState) # gmapT :: (forall b. Data b => b -> b) -> QState -> QState # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QState -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QState -> r # gmapQ :: (forall d. Data d => d -> u) -> QState -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> QState -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> QState -> m QState # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> QState -> m QState # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> QState -> m QState # | |||||
Generic QState # | |||||
Defined in Napkin.Untyped.Monad
| |||||
Show QState # | |||||
Eq QState # | |||||
HasRefStore QState # | |||||
MonadState QState Q # | |||||
type Rep QState # | |||||
Defined in Napkin.Untyped.Monad type Rep QState = D1 ('MetaData "QState" "Napkin.Untyped.Monad" "napkin-spec-2.0.0-7NH5JHRFo7V8BQP5NCfMo1" 'False) (C1 ('MetaCons "QState" 'PrefixI 'True) (S1 ('MetaSel ('Just "vars") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RefStore) :*: S1 ('MetaSel ('Just "query") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Query))) |
Instances
Applicative Q # | |
Functor Q # | |
Monad Q # | |
MonadState QState Q # | |
RenderSql Query backend => RenderSql (Q a) (backend :: k) # | Monadic query interface |
AsRelation (Q a) # | |
Defined in Napkin.Untyped.Monad asRelation :: Q a -> Relation # | |
HasDefinition (Q ()) # | |
MaybeQuery (Q ()) # | |
withQ'_ :: Q a -> Q (Ref Relation, Query) #
Define a WITH subquery, returning the reference and the query.
withQ :: Q a -> Q (Ref Relation, Query, a) #
Define a WITH subquery, returning the reference, the query, and the result of running the Q
block.
withAs_ :: Selected Query -> Q (Ref Table) #
Define a WITH subquery while retaining and re-using its given name. Useful in some scenarios where you want to keep the original name in further referring to the newly introduced subquery table.
withAsUnique :: Selected Query -> Q (Ref Table) #
Use unique naming scheme along with Ref Relation to construct the WITH macro's name. This is useful when ensuring unique naming while not throwing out some human-readable information.
select_ :: SExp -> Q (Ref SExp) #
Smart selector that will use the variable's name if expression is a variable and assign a fresh variable name if it's something else without a name.
selectsGroupsAs_ :: [Selected SExp] -> Q () #
Select a field and also include it in GROUP BY. Do this intelligently, referring to it by its given name in most cases but by its direct expression definition in case of external functions to prevent overlap with fields that may already exist.
selectsGroupsAsRef_ :: [Selected SExp] -> Q () #
Like selectsGroupsAs_
but will use the name you gave to each
field in the group by statement. Some backends like BigQuery
require this while others like Redshift don't like it.
selectNonEmptyGroups :: [Selected SExp] -> Q () #
Special convenience case: Select and group while demanding that none of the group values is null.
fromIfNecessary :: Relation -> Q (Ref Relation) #
Add a from clause unless the relation is already in place.
fromRef_ :: Ref Relation -> Q (Ref Relation) #
Use a name directly and don't alias it one more time. | This can fail to create a proper alias if the Ref includes multiple names.
fromSpecified :: Q Bool #
Returns True iff the current Query already has an initial From table available.
fromOrJoin :: Alias Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation) #
joinSelected_ :: JoinType -> Selected Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation) #
joinAlias_ :: JoinType -> Alias Relation -> Either (Ref Relation -> Maybe SExp) [Ref SExp] -> Q (Ref Relation) #
having :: MonadState QState m => SExp -> m () #
tableOperator_ :: ParensOperator -> Q () #
tableOperatorL :: (Maybe ParensOperator -> Identity (Maybe ParensOperator)) -> QState -> Identity QState #
whereAdd :: MonadState QState m => SExp -> m () #
whereAddIn :: MonadState QState m => SExp -> [SExp] -> m () #
where x in y
whereAddNotIn :: MonadState QState m => SExp -> [SExp] -> m () #
where x not in y
limit_ :: MonadState QState m => Int -> m () #
offset_ :: MonadState QState m => Int -> m () #
scopeRelation :: SExp -> Relation -> Relation #
Make a query relation that applies predicate on the given relation in a subquery.
selectEverything :: [(Ref Relation, DefinedQuery)] -> Q () #
Introspects the given list of Query
ies, along with their
references in the current context, and selects every named field in
them within the current context, while deduplicating repeat fields
(by name). Good for the common case of joining tables and selecting
everything possible in them.
explicitSelectStar :: HasDefinition s => s -> Ref Relation -> Q () #
Instead of doing a select * that's impossible to introspect, explicitly select all fields from something that contains a definition - e.g. a Query.
explicitMapSelectStar :: HasDefinition s => s -> Ref Relation -> (Selected SExp -> Selected SExp) -> Q () #
Instead of doing a select * that's impossible to introspect, explicitly select all fields from something that contains a definition - e.g. a Query.
selectNonDuplicates :: Foldable t => t (Ref SExp) -> Q () #
Given a list of references, select those that have not yet been selected in current monadic block.
mapSelectNonDuplicates :: Foldable t => t (Ref SExp) -> (Selected SExp -> Selected SExp) -> Q () #
Given a list of references, select those that have not yet been selected in current monadic block with option to modify the finalized selection.
UState | |
|
Instances
Data UState # | |||||
Defined in Napkin.Untyped.Monad gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UState -> c UState # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UState # toConstr :: UState -> Constr # dataTypeOf :: UState -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UState) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UState) # gmapT :: (forall b. Data b => b -> b) -> UState -> UState # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UState -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UState -> r # gmapQ :: (forall d. Data d => d -> u) -> UState -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> UState -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> UState -> m UState # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> UState -> m UState # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> UState -> m UState # | |||||
Generic UState # | |||||
Defined in Napkin.Untyped.Monad
| |||||
Show UState # | |||||
Eq UState # | |||||
HasRefStore UState # | |||||
MonadState UState U # | |||||
type Rep UState # | |||||
Defined in Napkin.Untyped.Monad type Rep UState = D1 ('MetaData "UState" "Napkin.Untyped.Monad" "napkin-spec-2.0.0-7NH5JHRFo7V8BQP5NCfMo1" 'False) (C1 ('MetaCons "UState" 'PrefixI 'True) (S1 ('MetaSel ('Just "vars") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RefStore) :*: S1 ('MetaSel ('Just "query") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UpdateQuery))) |
updateWhereAdd :: MonadState UState m => SExp -> m () #
updateSet_ :: Name -> SExp -> U () #