Commit Graph

217 Commits

Author SHA1 Message Date
Matt Parsons
e18dd125c5
Support OverloadedRecordDot (#310)
* Support OverloadedRecordDot

* stylish

* Haddocks

* Add comments to README
2022-03-31 09:14:48 -06:00
Matt Parsons
5e212049d4
Support time >= 10 (#309)
* support new time

* changelog, cabal

* ok
2022-03-29 19:32:11 -06:00
Jappie Klooster
8f591832d9
Add docs for experimental delete (#303)
* Add docs for experimental delete

the implementation seem shared,
it took me a couple of minutes to figure this out,
it seems wise to add a seperate header showing how,
it ought to work for the new API.

Add changes to change log

bump version number

fixup pr link

* Update esqueleto.cabal

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>

* Update changelog.md

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2022-03-11 17:21:08 -07:00
m4dc4p
ed4e98f96b
Add missing instances to (:&) (#291)
* Add missing instances to (:&)

The (:&) operator has an instance for `SqlSelect`, but none
for `ToAlias` and `ToAliasReference`. Adding those for parity.

* Updates based on review.

* Update test/Common/Test.hs

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>

* Update test/Common/Test.hs

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>

Co-authored-by: Matt Parsons <parsonsmatt@gmail.com>
2021-09-30 11:43:04 -06:00
Nikita Razmakhnin
2a44844f75
Add support of PostgreSQL-specific VALUES(..) expression (#284)
* Add PostgreSQL-specific support of VALUES(..)
scalar expression of values-list for `from` targets.

* Bump version and update changelog

* Align identation for Postgres `values` func

* Use direct `From` data-type instead
of `ToFrom` typeclass for postgres `values` expression.
2021-09-30 10:11:28 -06:00
Nikita Razmakhnin
18951b280b
Fix distinctOnOrderBy with nested expression (#278)
* Fix stripped part of nested expression during
assembling of `distinctOnOrderBy` subexpression

* Bump version number and update changelog
2021-09-02 12:39:29 -06:00
Chris Parks
e8271a00d6
Avoid generating an empty list as the left operand to NOT IN (#273)
* Avoid generating an empty list as the left operand to NOT IN

Postgres treats 'x in ()' and 'x not in ()' as syntax errors. Instead
translate:

  x in ()      ⇒  FALSE
  x not in ()  ⇒  TRUE

Older versions of esqueleto did this, but apparently the latter got
lost.

* Bump version and update changelog
2021-07-08 19:27:32 -05:00
Isaac van Bakel
3a12a15d00
Add SqlSelect instance for :& (#268)
* Add SqlSelect instance for (:&)

Motivation is given in bitemyapp/esqueleto#267 - this instance allows
for polymorphic use of the new Experimental API, where it otherwise
wouldn't be possible to split `a :& b` into `(a, b)`.

* Bump version to 3.5.2.0
2021-06-23 11:03:38 -06:00
Esteban Ibarra
33128042c4
Add selectOne (#265)
* Add `selectSingle`

* Clean up and add to test execution :/

* Import library's `selectFirst` rather than re-export it from `persistent`

* Add haddock and update test name

* Add missing comments for haddock :)

* Rename to `selectOne` and add @since

* Bump version number

* Add missing refs for `table` function

* Update to experimental syntax
2021-06-17 13:17:44 -06:00
Matt Parsons
34047e1f5f
Pass ConnectionPool to tests (#262)
* rewriting tests

* tests now run in 1.45 seconds

* tests pass

* fix json

* fix tests

* add helper for setting the database state

* clean things up a bit
2021-05-28 15:34:56 -06:00
Matt Parsons
e145be999a
Consolidate Tests (#261)
* Consolidate Tests

* stylish-haskell

* woops

* lol
2021-05-27 14:38:02 -06:00
Matt Parsons
b295bc6a5f
Esqueleto.Legacy (#259)
* Esqueleto.Legacy

* Add changelog entry

* Delete deprecated modules

* a bit more

* ghc 9 support, clean warns

* yes

* okkk
2021-05-26 14:27:04 -06:00
Ben Levy
ea4ff33b93
Destroy all GADTs; Removes the From GADT and SqlExpr GADT (#228)
* Explode the From GADT. Move runFrom into the ToFrom typeclass removing the need for the intermediate structure. Extract the parts of the Experimental module into submodules.

* Reorganize Experimental folder. Move Subquery into core Experimental.From module.

* Cleanup hackage documentation. Make sure stylish ran correctly. Update changelog and bump version

* Update ERaw to change the direction of NeedParens (parent now tells child context). Removed need for composite key constructor

* Get rid of AliasedValue and ValueReference; added sqlExprMetaAlias to SqlExprMeta

* Remove EList and EEmptyList; ERaw is now technically possible in each case since it is generalized to all

* Remove entity specific constructors from SqlExpr

* Remove EOrderBy, EDistinctOn; Change PreprocessedFrom a to just be an independent datatype

* Remove EOrderByRandom, calling distinctOnOrderBy with rand will choke the db but you shouldnt be using rand anyway. distinctOnOrderBy seems dangerous though

* Remove ESet

* Remove EInsert and EInsertFinal

* Make postgres tests pass

* Change aliased val to be legal value by waiting until expr materialization in select clause before adding AS <alias>

* Cleanup ToAliasRefernce; Add isReference meta to value reference even though that info isnt currently used anywhere

* Expose Experimental submodules

* Update changelog

* Create a FromRaw to replace FromSubquery and FromIdent in from clause. Modify Experimental to only use FromRaw.

* Convert all of experimental to use new From type instead of From type class. Make the data constructors second class, functions should be used. Introduce *Lateral functions, using the same type for lateral and non lateral queries was probably a mistake.

* Expose the new functions and fix the mysql test compilation error (type inference was wonky with `Union` replaced with `union_`

* Bump version and add more comments

* ValidOnClause was too restrictive, ToFrom is actually the correct amount of leniency. ValidOnClause would not catch use of on for a cross join but would prevent nested joins

* Unbreak lateral joins by introducing a completely different ValidOnClause constraint

* Fixe error introduced in merge with master

* Dont realias alias references

* Never realias an already aliased Entity or Value

* reindex value references to the latest 'source'
2021-05-26 12:12:11 -06:00
Matt Parsons
e39c62990e
Fix group by composite (#255)
* remove failing test with bad behavior

* test case

* changelog, vbump
2021-05-20 16:33:01 -06:00
parsonsmatt
129b1734c3 relax attoparsec upper bound 2021-05-20 10:10:22 -06:00
Matt Parsons
cd16b2b22f
Support upcoming persistent-2.13 (#245)
* stack-8.8.yaml now does GHC 8.8

* support ghc 8.10.4, upgrade to cabal 3.4

* do it

* use stack 8.10 by default, support pers2.13

* sqlite tests are failing???

* build with cabal

* gitignore

* tidy up

* work with persistent-2.13

* giddyup

* keep cabal file in repo

* fixx

* changelog, vbump

* update cache keys
2021-05-05 16:23:53 -06:00
Matt Parsons
96331257e4
get persistent 2.12 going (#243)
* run mysql tests

* uhhh why are you like this

* stuff

* tests pass locally

* make the example work

* minor bump

* fix gha

* k

* no persistent-template dependency please

* it passed?

* ci nonsense

* uh

* i think that should do it

* ok no really

* i miss file-watch

* sigh

* come on pls

* stylish haskell

* i hate this
2021-03-29 14:47:20 -06:00
Maximilian Tagher
c4ec95874f
Improve recommended hlints for catching x = NULL SQL (#240)
* Improve recommended hlints for catching `x = NULL` SQL

The current hints work fine for unqualified imports, but I realized they don't work with qualified ones, such as `import qualified Database.Esqueleto as E`.

I tested on our codebase that these with the `Database.Esqueleto.` addition to `hlint.yaml`, this now works in unqualified and qualified code

* Update changelog.md
2021-03-26 17:24:14 -06:00
Felix Paulusma
8fb9a1fe24
Also export ValidOnClauseValue (#232)
* Also export ValidOnClauseValue

This is a constraint on `on`, but not exported, so you have to go into the source to see what it does. Exporting makes this easier.

* add to ChangeLog and bumped version
2021-02-05 14:41:40 -07:00
Matt Parsons
521ac01488
Support persistent-2.11 (#226)
* Support persistent-2.11

* sigh

* woop woop

* use hackage

* cpp so we don't have to tighten bounds

* add changelog entry

* lmao timing attacks

* no
2020-11-04 14:01:23 -07:00
Matt Parsons
b35713c09f
Autoformatting + Stylish Haskell Config (#218)
* Add stylish-haskell.yaml, update spacing to 4 in configs

* update travis

* lol

* major formatting stuff

* fix parse error

* fix

* warnings, more tidying up

* Add style guide [ci skip]

* faster build perhaps

* cabbal

* sigh
2020-10-29 16:20:52 -06:00
Arthur Xavier
4f6b02298c
Deprecate ToAliasT and ToAliasReferenceT (#221)
* Make ToAliasT and ToAliasReferenceT associated types of the corresponding classes

* Update changelog

* Remove ToAliasT and ToAliasReferenceT

* Update changelog and deprecate type families instead of deleting them

* Apply suggestions from code review

Co-authored-by: Ben Levy <benjaminlevy007@gmail.com>

Co-authored-by: Ben Levy <benjaminlevy007@gmail.com>
2020-10-29 15:35:18 -06:00
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
583167adb0
Make the Experimental module more prominent (#205)
* update README

* add comments

* update cabal

* update changelog
2020-09-17 14:52:38 -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
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
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
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
Felix Yan
99c1bbc8fe
Remove duplicated dependency 2019-11-24 17:21:54 +08: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
parsonsmatt
f84945fb04 add cabal 2019-10-29 14:26:48 -06:00
parsonsmatt
55fec71ed4 Add instance of UnsafeSqlFunctionArgument () 2019-10-29 08:50:51 -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
brady.ouren
7b3cb37131 move function and bump version
- moves associateJoin to Database.Esqueleto
- relaxes bounds on containers dep
-
2019-10-25 11:58:54 -07:00
brady.ouren
e94808856f add associateJoin function
this helps avoid N+1 queries
2019-10-23 15:31:15 -07:00
parsonsmatt
45f5a2ba6f 3.1.1 2019-10-17 15:06:07 -06:00
Ollie Charles
624d44eefd
Support time-1.9 2019-09-18 14:02:11 +01:00
Felix Paulusma
a452946f58 PostgreSQL JSON Operators (#128)
* added PostgreSQL.JSON module

* finished adding all JSON operators

* cleanup

* half way through writing tests

* final tweaks to comments

* finished with JSON tests

* upped persistent dependency to 2.10.0 because of PersistArray data constructor addition needed for JSON operators

* noticed the minus operator with text[] as right operand was only added in PSQL v10, added function and adjusted types/tests

* adjusted yaml configs for updated dependencies and PSQL v10 in Travis

* try to get PostgreSQL 10 running

* use @since notation

* removed postgresql from 'services' field

* and one more time, with FEELING! (and postgresql-10)

* foo

* PSQL 10 runs on 5433, it seems? reverting .travis.yml changes and setting test conn to port 5433

* of course I forget to add the PORT env > .<

* doop-dee-doo

* herp-a-derp

* last commit (hopefully)

* also have more recent dependencies in the 'compiler should error' tests

* why does it feel like this'll go on for a while still?

* copied some extra-deps from the persistent ymls

* aaaaand we're done... right?

* added persistent-postgresql to the dependencies and used its instances for Aeson.Value

* small comment fix

* moved the instances to their own module, this way they're optional to use if you don't use persistent-postgresql

* use port 5432, like a normal PostgreSQL!

* added JSONB newtype with instances, instead of orphaning Aeson.Value

* reworked everything to use the JSONB newtype. And adjusted most comments to reflect the change

* fixed all the tests (just making it compile again)

* that's right, Travis' PSQL v10 NEEEEDS it to be port 5433... for some reason

* update on the haddockumentation

* added JSONAccessor data type for easier usage of certain operators

* Also add to changelog.md

* JSONExpr -> JSONBExpr

* this damn PGPORT is really irritating
2019-08-04 22:10:31 -06:00
parsonsmatt
aa07462d17 Switch to cabal file for cabal.project builds 2019-05-13 09:05:39 -06:00
Matt Parsons
7b7717b05a
persistent-2.10 support (#122)
* persistent-2.10 support

* ignore cabal file

* 3.0.0

* update changelog [ci skip]
2019-04-22 21:24:40 -07:00
Matt Parsons
bfb602dcb7
Merge branch 'master' into matt/remove-class 2019-04-19 17:59:17 -06:00