Commit Graph

669 Commits

Author SHA1 Message Date
Ben Levy
a319d13bee
[Experimental] More powerful queries (#215)
* Initial attempt at Lateral joins

* Fix lateral queries for Inner and Left joins. Remove for Full and Right as this is apparently illegal(who knew). Add TypeError on Full and Right joins. Update on clause to use a custom constraint instead of relying on ToFrom.

* Fix typo leading to erroneous ToFrom instance

* Implement non-recursive CTE's

* add withRecursive; cleanup whitespace

* Fix multiple recursive CTEs. Apparently the spec just wants RECURSIVE if any of the queries are recursive.

* Add test to verify that a CTE can reference a previously defined CTE

* Update with/Recursive to return an element of a from clause to allow for joins against CTEs

* Modify set operations to use a custom data type + typeclass + typefamily to allow direct use of SqlQuery a in set operation and to allow recursive cte's to unify syntax with SqlSetOperation. Added lowercase names for set operations. If we can migrate off the constructor names we may be able to simplify the implementation.

* Fixed haddock documentation issue from v3.3.4.0 and added documentation
for new features introduced by v3.4.0.0

* fixed comments that were changed while debugging haddock build

* Cleanup formatting in From per PR. Cleanup ValidOnClause, added documentation and reduced the number of instances

* Update src/Database/Esqueleto/Experimental.hs

Co-authored-by: charukiewicz <charukiewicz@protonmail.com>
Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2020-10-28 21:37:17 -06:00
Maximilian Tagher
8adab239df
Add recommended hlint rules for proper isNothing usage (#214)
* Add recommended hlint rules for proper isNothing usage

* Update changelog.md
2020-10-28 10:42:35 -06:00
Matt Parsons
56d1e348c3
update nightly resolver (#208)
* update nightly resolver

* hmm
2020-10-28 10:40:22 -06:00
Matt Parsons
4887bc19fe
add GHC 8.8 to testing (#206) 2020-09-17 15:47:54 -06:00
Matt Parsons
583167adb0
Make the Experimental module more prominent (#205)
* update README

* add comments

* update cabal

* update changelog
2020-09-17 14:52:38 -06:00
Ben Levy
f9a8088170
Bugfix rollup: Fix issue with extra characters in generated SQL; Fix ToAliasReference for already referenced values; Fix Alias/Reference for Maybe Entity (#191)
* Fix issue with extra characters. Extra parens in valueList caused issues in mysql. Extra backticks in value reference names

* update changelog and bump version number

* Fix issue caused by toAliasReference failing to reindex an alias reference by its new alias source

* Add support for SqlExpr (Maybe (Entity a))) to aliasing in Experimental. Fix #193

* Update changelog with new PR name. Fix name shadowing in test.

* Fix binary operations(i.e. ==.) on aliased values.

* no need for version bump since 3.3.3.3 hasnt been released yet

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2020-08-30 13:16:37 -06:00
Ben Levy
2b5b561f6e
Add new SetOperation constructor for parenthesized query (#195)
* Add new SetOperation constructor for parenthesized query. Automatically detect when parentheses are needed on SelectQuery usage (only works for MySQL).

* Add Parens to SelectQueryP and create a pattern synonym for SelectQuery. SelectQueryP is hidden as end users should only be using SelectQuery.
2020-08-30 13:15:11 -06:00
Maximilian Tagher
dd16400d64
Document isNothing (#203)
* Document isNothing

I have two goals with this documentation:

1. Surface how to do `IS NOT NULL`. This PR makes a search for that string turn up a result, and directs you to combine `isNothing` with `not_`.
2. Documents a major gotcha where behavior between Persistent and Esqueleto is different. I haven't tested this in awhile, but we run into this gotcha occassionally, so I'm pretty confident it's still an issue.

* ..

* ..

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2020-08-26 12:36:41 -06:00
tim
1de1ee9e6e Removes irrelevant copy pasta from some haddocks 2020-08-26 11:35:19 -06:00
Sebastián Estrella
29eb443fac Remove whitespaces from Database.Esqueleto.Internal.Internal 2020-08-26 11:34:48 -06:00
Sebastián Estrella
91ab01d76f [#197] Allow PostgreSQL aggregate functions to take a filter clause 2020-08-26 11:34:25 -06:00
Maximilian Tagher
4dbd5339ad
Test and further document ToBaseId (#190)
* Test and further document ToBaseId

My coworker Lev was adding this typeclass to our codebase and we hadn't used it before. I added a little more documentation that I think would help clarify things, particularly what the point of the witness function was. More importantly I added a test for this typeclass.

* 3.3.3.2
2020-06-22 09:43:17 -06:00
Ben Levy
7f769cc673
Add test for calling sql functions on aliased values; Fixed unsafeSql… (#189)
* Add test for calling sql functions on aliased values; Fixed unsafeSqlFunction to handle aliaed values properly

* version bump and changelog
2020-06-21 10:00:12 -06:00
Mitchell Vitez
9a4813d422
Remove old note about ON clause ordering (#186)
#156 fixed the issue
2020-05-26 14:28:19 -06:00
parsonsmatt
2cd6460260 travis pls 2020-03-30 13:37:22 -06:00
Matt Parsons
9e643acb3d
27 date trunc postgres (#181)
* write test case

* weird

* better error message

* rename, fix
2020-03-30 12:55:19 -06:00
Matt Parsons
b6279ca9f2
Postgresql Date Truncation (#180)
* write test case

* weird

* better error message
2020-03-30 12:11:27 -06:00
parsonsmatt
0484dfb8d4 v3.3.3.0 2020-03-29 10:42:23 -06:00
Ben Levy
56e4b83e5c
New syntax for Joins (Subquery + Union/Intersect/...) (#172)
* It works?

* Add multiple return values back in

* Allow order by alias

* Support groupBy and count, Returning value from a fromQuery now will make it into an alias

* Eliminate Alias type, TODO: finish implementing all the functions on Value for the alias constructors

* Add entity support to subqueries

* Cleanup duplication; Cleanup warnings and finish implementing all the cases for aliased values and entities.

* Cleanup fromQuery and add comments

* Modify EValueReference to support aliased entity fields instead of having to use opaque ERaw in field access

* Implement SQL Set Operations

* Add test to show novel use of fromQuery

* Cleanup unsafe case statements

* Add type annotations to helper queries to satisfy the typechecker on older GHC

* New syntax for joins, using placeholder names with ' in them to avoid name conflict with existing join types.
New api properly enforces Maybe on outer joins and requires an on clause for all joins in their construction.

* Add some more test queries using the new syntax

* Add test to verify that delete works with the new syntax

* Add cross join and implicit cross join using comma examples to test code for new from syntax

* Comment out use of CrossJoin in common tests since postgres cant handle it with the current implementation of the CrossJoin kind

* Add typeclass machinery to support the use of the old Join data types used in the existing from clause

* Fix bug with CrossJoin and add on_ syntax sugar

* move new from syntax into Database.Esqueleto.Experimental

* Merge subqueries and unions with the new join syntax, they all seem to play nicely together

* Cleanup somehow copies of ToAlias ended up staying in Internal and a swp file made it in to the branch.

* Fix compilation errors

* Swith tuple to using a TypeOperator

* Make operator only 2 characters

* added up to 8-tuple instances for ToMaybe, ToAlias, and ToAliasReference

* Add compiler error tests for new syntax to support making better errors

* Use closed data families to allow for catching missing on statements in joins.

* Convert ToAliasReferenceT to be a closed type family matching the other classes in the Experimental module

* added Esqueleto.Experimental documentation: added introduction and several examples of old vs. new syntax

* added more usage examples to module introduction; added documentation to SqlSetOperation, From, on, from, and (:&)

* Update (^.) to only treat natural keys with more than one component as ECompositeKey. Fixes #176.

* Update article metadata test to ensure the correct response was being returned instead of just check if an exception was thrown

* Add article metadata to cleanDB before deleting all articles to fix foreign key constraint errors

* Bump version number and add changelog entry

* Fix issue with ToMaybeT for Values, Maybe was going in the wrong place compared to the rest of the library. Add test to prove that Left joining into a subquery that returns a maybe flattens the maybe properly to avoid needing to call joinV.

* Fix common test for postgres, needed to add dogCounts to the group by since postgres is strict on only agregates for non grouped columns; I really need to set up a local postgresql

* Revert ToFromT changes. Only accept functions that return a SqlExpr (Value Bool) in ToFromT

* escaped use of '@' in TypeApplications in documentation

* Add more specific type signature to `on`

per parsonsmatt review suggestion. Improves type inference significantly.

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

Co-authored-by: charukiewicz <c.charukiewicz@gmail.com>
Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2020-03-29 10:40:49 -06:00
Ben Levy
9a762e9f20
Update (^.) to fix natural key handling (#177)
* Update (^.) to only treat natural keys with more than one component as ECompositeKey. Fixes #176.

* Update article metadata test to ensure the correct response was being returned instead of just check if an exception was thrown

* Add article metadata to cleanDB before deleting all articles to fix foreign key constraint errors

* Bump version number and add changelog entry
2020-03-22 09:30:45 -06:00
Matt Parsons
951bb21c1b
remove upper bounds (#171)
* remove upper bounds

* work with stackage nightly

* Add nightly build
2020-01-24 13:23:26 -07:00
Matt Parsons
3fcc965de7
Group by documentation (#170)
* Group by documentation
2020-01-16 10:03:53 -07:00
Matt Parsons
aded2932e9
Merge pull request #167 from charukiewicz/master
Exposed new SQL string functions added in v3.3.0 and bumped to v3.3.1
2019-12-31 09:39:27 -07:00
charukiewicz
a7435bac06 Exposed new SQL string functions added in v3.3.0 and bumped to v3.3.1 2019-12-12 22:42:26 -06:00
Matt Parsons
c0dd6c70ef
Merge pull request #166 from charukiewicz/master
Add several common SQL string functions
2019-12-12 15:35:15 -08:00
charukiewicz
ca385665dd added several common SQL string functions: UPPER, TRIM, LTRIM, RTRIM, LENGTH, LEFT, RIGHT
Co-authored-by: charukiewicz <c.charukiewicz@gmail.com>
Co-authored-by: belevy <benjaminlevy007@gmail.com>
Co-authored-by: joemalin95 <joemalin95@gmail.com>
2019-12-12 14:15:16 -06:00
Matt Parsons
a94fb6d9a8
Merge pull request #163 from hdgarrood/more-unsafe-sql-function-args
Allow unsafeSqlFunction to take up to 10 args
2019-11-25 08:48:48 -07:00
Matt Parsons
3eb2b181ac
Merge pull request #164 from felixonmars/patch-1
Remove duplicated dependency
2019-11-25 08:48:09 -07:00
Felix Yan
99c1bbc8fe
Remove duplicated dependency 2019-11-24 17:21:54 +08:00
Harry Garrood
0c96ee6af4 update changelog.md for #163 2019-11-21 23:33:55 +00:00
Harry Garrood
d889476bdf Allow unsafeSqlFunction to take up to 10 args
... without needing to nest tuples. Fixes #162
2019-11-21 23:29:09 +00:00
Matt Parsons
04a73ed92d
Merge pull request #161 from bitemyapp/matt/test-on-clause
Fix on clause nesting
2019-10-31 14:38:16 -06:00
Jose Duran
f9f953c89e Add unsafe documentation (#158)
* Add unsafe documentation

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* updated Readme.md

* Update README.md

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* add safety
2019-10-31 14:34:31 -06:00
parsonsmatt
1627feafa3 aha! 2019-10-29 16:54:58 -06:00
parsonsmatt
ae3b96e0f6 cleaner diff 2019-10-29 14:29:27 -06:00
parsonsmatt
f84945fb04 add cabal 2019-10-29 14:26:48 -06:00
parsonsmatt
edc7db8f3f remove debug 2019-10-29 14:26:09 -06:00
parsonsmatt
1ea6e709d2 Merge branch 'master' into matt/test-on-clause 2019-10-29 14:13:27 -06:00
parsonsmatt
0c9b41a87d lord 2019-10-29 14:07:53 -06:00
parsonsmatt
6a8239ac93 Add test cases 2019-10-29 11:50:10 -06:00
Matt Parsons
096a251c39
Add instance of UnsafeSqlFunctionArgument () (#159)
* Add instance of UnsafeSqlFunctionArgument ()

* Use now, clean a warn
2019-10-29 10:03:42 -06:00
parsonsmatt
214f1906da Use now, clean a warn 2019-10-29 08:53:13 -06:00
parsonsmatt
55fec71ed4 Add instance of UnsafeSqlFunctionArgument () 2019-10-29 08:50:51 -06:00
parsonsmatt
c2ecf9c1a4 v3.2.0 2019-10-28 17:26:40 -06:00
Matt Parsons
e0489988c8
sub_select fix #2 (#153)
* Deprecation notice

* Better message, changelog

* thanks @philonous for the typo find!

* Add subSelectCount

* Add subSelectList

* Add subSelectForeign

* Flip the warning back on

* Add subSelect test

* Write tests demonstrating usage

* fix

* sigh
2019-10-28 17:26:09 -06:00
Matt Parsons
91fa258193
Fix the On Clause Ordering issue (#156)
* Add failing test

* Refactor newIdentFor to not have an error case

* annotation for warning

* refactoring

* Expression parser

* holy shit it works

* Add a shitload of tests

* cross join

* Find a failing case

* Account for that one case

* works

* Composability test

* okay now it tests something

* Documentation updates

* Add since, changelog

* fix
2019-10-28 14:06:01 -06:00
parsonsmatt
5c1f0f65fa v3.1.3 2019-10-28 11:58:31 -06:00
Jose Duran
40f7a0ca97 Insert Select With Conflict for postgres (#155)
* add insertSelectWithConflict to allow insert with conflict resolution

* insertSelectWithConflictCount does nothing when no updates given and add tests

* no longer require undefined for insertSelectWithConflict

* Update src/Database/Esqueleto/PostgreSQL.hs

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update src/Database/Esqueleto/PostgreSQL.hs

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update src/Database/Esqueleto/PostgreSQL.hs

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Update src/Database/Esqueleto/PostgreSQL.hs

Co-Authored-By: Matt Parsons <parsonsmatt@gmail.com>

* Move non postgres related functions out of postgres module to internal.

* add entry to changelog
2019-10-28 11:56:34 -06:00
parsonsmatt
7608d716a1 Add pull request template 2019-10-28 10:21:24 -06:00
Matt Parsons
56420e1c34
Merge pull request #157 from tippenein/bmo/associated-join
add associateJoin function
2019-10-25 16:01:40 -06:00