Commit Graph
51 Commits
Author SHA1 Message Date
Felix YanandSteve Chávez 9ea7529f30 Use protolude 0.2.2, replace undefined with witness
protolude provides headMay since 0.2.2, it can be used instead of safe.
2018-05-28 13:08:27 -05:00
steve-chavez 108f3cd651 Add Preference-Applied header for POST upsert
- Ensure creating nothing on ignore-duplicates succeeds
- Refactor locationF query
2018-02-21 07:33:54 -05:00
steve-chavez 6675821c64 Allow PUT method: UPSERT of a single row 2018-02-21 07:33:54 -05:00
steve-chavez 85b1dc0eb4 Add UPSERT for POST with Prefer:resoultion=merge/ignore-duplicates 2018-02-21 07:33:54 -05:00
steve-chavez 70ce1b9329 Reduce memory usage of uniform json array restriction 2018-01-27 13:55:20 -05:00
steve-chavez f7e7834a1c Handle overloaded function case
* Add test for params=single-object on GET

* Add tests for procs with DEFAULT args

* Add tests for overloaded functions

* Add test for PATCHing with an empty json array, this previously
  gave a "Something is wrong" error
2018-01-10 11:43:16 -05:00
steve-chavez 38f3bcf4a6 Reduce memory usage by avoiding Aeson encode
It was detected that Aeson encoding had high memory usage when
the json payload was large, around x60 the payload size.
With this change we get around x10 payload size memory usage.

The encodeUtf8(when doing a Text -> ByteString with `toS`) function
on a large payload also contributed to the high memory usage.

Main idea to reduce the memory usage was to let the ByteString coming
from the request body go to the database unchanged.
2018-01-10 11:43:16 -05:00
steve-chavez be630aa680 Change phrase/plain full text search syntax 2017-11-27 11:38:54 -05:00
Steve ChávezandJoe Nelson a6cce691b5 Fix RPC GET filters bugs with not/{plain,phrase}fts operators (#980) 2017-09-26 20:07:36 -07:00
Steve ChávezandJoe Nelson cf19ad0369 Allow GET on RPC (#946) 2017-09-17 11:16:46 -05:00
SteveBashandJoe Nelson b8eb2cd9c1 Add and/or params for complex boolean logic
* Add support for and/or params in GET, POST, PATCH and DELETE
* Restrict usage of IN in and/or to be inside parens e.g. in.(1,2,3)
* Allow quoting operators for values that have ',)' chars
  inside and/or e.g. eq."(entity,1)"
2017-05-13 16:49:25 -05:00
Ruslan TalpaandJoe Nelson 5fffbbe381 Make HTTP headers available as GUCs #800 (#849) 2017-04-10 19:23:48 -05:00
Marios KoulakisandJoe Nelson 9b4b45671c Accept empty string as empty json body when calling an rpc (#832) 2017-03-27 21:34:03 -07:00
Diogo BiazusandJoe Nelson 206ab163b6 Refactor error type and fix nested error message [fix #791] (#829) 2017-03-12 22:02:13 -07:00
Steve ChávezandJoe Nelson 98438c437f Proposal for binary output (#802) 2017-02-14 20:36:51 -08:00
Joe NelsonandGitHub 104a7ed4fa Use a mime type to request singular JSON responses (#763) 2017-01-16 15:11:37 -08:00
Diogo Biazus 6c275fcec2 Coalesce types UniformObjects and Payload into the new PayloadJSON 2016-11-27 23:55:26 -05:00
Diogo Biazus b158b4924e Use rightToMaybe instead of case 2016-11-27 23:55:14 -05:00
Diogo Biazus 98ada3f9ee Change nesting of if clause making code more symetrical 2016-11-27 23:55:07 -05:00
Diogo Biazus 090a62a2c8 Removes error case from Payload type. Now we don't build a payload when the parsing fails. 2016-11-27 23:55:02 -05:00
Diogo Biazus fec769c80e Move range validation to userApiRequest. 2016-11-27 23:54:52 -05:00
Diogo Biazus b8ddc30252 Remove ActionInappropriate constructor from type Action since now we validate the request before building an ApiRequest. 2016-11-27 23:54:37 -05:00
Diogo Biazus 47c4fbc8ef Introduce the type ApiRequestError and make userApiRequest return an Either ApiRequestError ApiRequest 2016-11-27 23:54:23 -05:00
dsimunicandJoe Nelson ae40641963 Introduce new 'Prefer' header, params=single-object (#739) 2016-11-20 14:14:39 -08:00
Diogo BiazusandJoe Nelson 41c1cf6e01 Reduce app function (#733)
Simplify the big app function
2016-11-10 20:42:00 -08:00
Ruslan Talpa 211e3d4141 fix relation detection bug and allow offset on lower levels 2016-10-05 11:34:07 +03:00
Joe NelsonandGitHub af75988dd4 No count by default (#700)
* WIP: disable counting total table size by default

* Remove commented tests since PUT is no longer supported

* Fix tests for invalid range which require count

* Do not report count in PATCH response if not asked

* Return count of deleted items only if asked

* Return count for bulk insert when requested

* Changelog entry
2016-09-04 10:31:24 -07:00
Joe NelsonandGitHub 7278507c42 Use comma rather than semicolon to split header values (#698) 2016-08-21 15:26:00 -07:00
Diogo BiazusandJoe Nelson 6f737056a2 Protolude completion in library and executable (#697) 2016-08-21 15:10:19 -07:00
Joe NelsonandGitHub 1d5a0e4316 Per-route content negotiation, and OpenAPI only for root (#693)
* WIP: remove non-openapi root spec

* Refactor ContentType

Different endpoints will favor one type over another

* Permit different Accept headers per endpoint

* Lint

* Add charset to Content-Type only when used as a header

Keep it out of error messages

* Accept: */* is last resort, not first

* Changelog

* makeMimeList consistently

* Remove schema description from OPTIONS response
2016-08-19 16:07:22 -07:00
Erlend HambergandJoe Nelson 35c5b190b4 Singular response for PATCH request (#634)
* Allow a singular entity to be returned from an update

Since a `PATCH` will be an update that could affect many rows, there might be
more than one object returned. By allowing asking for a singular response,
the/an object will be returned instead of a list. This is useful in cases when
the `PATCH` is against single entity (i.e. `/items?pkey=eq.99`).

* Add tests for plurality=singular for `PATCH` requests

* Disallow updating more than one row if `plurality=singular`

As discussed in #634, we don't want to allow updating several rows with
a `PATCH` request when the `Prefer` header specifies
`return=representation;plurality=singular` as this would almost
certainly be a client error.

* Add test for patching multiple objects with singular response

Patching > 1 object with `return=representation;plurality=singular`
should return `400 Bad Request`.

* Only add singleton range for read API requests

* Disallow inserting more than one row if `plurality=singular`

Disallow inserting several rows with a `POST` request when the `Prefer`
header specifies `return=representation;plurality=singular` as this
would almost certainly be a client error.

* Only import `q` from `Text.InterpolatedString.Perl6`

* Update OpenAPI response for PATCH/POST to mention `plurality=singular`

The OpenAPI response for PATCH/POST requests now includes the `Prefer` value
`return=representation;plurality=singular`.

* Add entry in changelog
2016-08-19 14:02:14 -07:00
Diogo Biazus b17fa09393 Add explicit import Prelude to remaining modules to compile and run specs 2016-06-29 09:26:47 -04:00
Diogo Biazus 3308012dcf Add protolude to dependencies, include NoImplicitPrelude in default extensions and port Error module to protolude. 2016-06-29 09:25:57 -04:00
Jacky Hu e88a0577e5 Avoid repeating mime types 2016-06-18 10:18:43 +08:00
Jacky Hu 077bb5a434 Verbose parse error for OpenAPI 2016-06-18 10:18:43 +08:00
Jacky Hu d1ed884a8d Introduce the OpenAPI header
Also bring back the original behavior of GET "/"
2016-06-18 10:18:43 +08:00
Ruslan Talpa 6ebd7fd2d7 implement select/return representation for DELETE queries (fix #518) 2016-06-02 13:37:33 +03:00
Ruslan Talpa dc727f900d suggested cleaup by @begriffs 2016-05-31 14:55:31 +03:00
Ruslan Talpa 7c83edc402 Limit embeded items 2016-05-26 09:56:28 +03:00
Ruslan Talpa 45d0f85b0d ability to order embeded items (closes #509) 2016-05-21 20:52:13 +03:00
Joe Nelson 900b9f1991 Explain use of Left value 2016-05-18 00:06:16 -07:00
Joe Nelson 7e41b620ff Accept POST requests from HTML forms 2016-05-15 20:55:07 -07:00
Joe Nelson 5aadfba84b Use read-only transaction mode for read requests (#561)
* Make middleware use ApiRequest rather than Request

* Fix outdated comments

* Use read-only transaction mode for read requests

This allows API requests against read replicas
2016-04-15 12:26:40 -07:00
Joe Nelson cd81e9346f Do not do table count when plurality=singular
Rebasing commits by @ruslantalpa
2016-03-23 20:30:51 -07:00
Joe Nelson b858626e17 For correctness include charset=utf-8 in responses 2016-03-13 14:22:17 -07:00
Joe Nelson 8b3d224b80 Ensure payload parse errors are not suppressed
Fixes #490
2016-02-11 16:24:02 -08:00
Joe Nelson a0ef4eae4d Issue http 405 for anything but POST on RPC
Fixes #481
2016-02-01 22:52:57 -08:00
Ruslan Talpa 4544ce3255 Fix #399 insert records in tables with no SELECT privileges 2015-12-16 10:16:14 +02:00
Joe Nelson cbbb1871bb Add --max-rows option (no automated tests yet)
Fixes #288
2015-12-05 19:03:18 -08:00
Ruslan Talpa f678dff735 disambiguate range selection when plurality=singular 2015-11-24 09:39:44 +02:00