bitemyapp / bitemyapp/esqueleto

WHERE expressions sometimes need parens and don't get them

Open
#235 9 comments 0 reactions 0 assignees View on GitHub
Dominant language
Haskell
Stars
399
Forks
107
Avg merge
1d 17h
Merged PRs (30d)
1

Description

For example:
```
q :: SqlQuery (Value Int)
q = do
where_ (subSelectUnsafe (pure (val True)))
pure (val 0)
```
renders as
```
SELECT ?
WHERE SELECT ?
```

which is a syntax error, at least under Postgres. I commented on #79 already thinking it was related, but after a second look I'm not sure.

If we generated this instead, I think we'd be okay.
```
SELECT ?
WHERE (SELECT ?)
```

I think this might be due to the parens field of `ERaw` being ignored in `makeWhere`:

```haskell
makeWhere :: IdentInfo -> WhereClause -> (TLB.Builder, [PersistValue])
makeWhere _ NoWhere = mempty
makeWhere info (Where v) = first ("\nWHERE " <>) $ x info
where
x =
case v of
ERaw _ f -> f
EAliasedValue i _ -> aliasedValueIdentToRawSql i
EValueReference i i' -> valueReferenceToRawSql i i'
ECompositeKey _ -> throw (CompositeKeyError -> EsqueletoError
CompositeKeyErr MakeWhereError)
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.