CHANGES 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. In 4.7.1
  2. * Handle `ReadyForQuery` after `Error` in replication mode #279
  3. * Fix the issue with columns in multi-squery response #283
  4. * Fix compatibility with OTP-26 #284
  5. In 4.7.0
  6. * Flow control `{socket_active, N}` option in streaming replication #271
  7. * `{socket_active, N}` option generalized to all `epgsql` modes #278
  8. * CI upgraded to support OTP-25, OTP-19 dropped, run some tests on PostgreSQL 14 #276
  9. * `format_status/1` OTP-25 `gen_server` callback implemented #277
  10. In 4.6.1
  11. * Introduce `get_backend_pid` function #270
  12. * Fix dialyzer error in `get_parameter` #274
  13. In 4.6.0
  14. * Full OTP-24 compatibility #255, #262, #263
  15. * Implement `COPY .. FROM STDIN` sub-protocol (both binary and text formats) #248
  16. * Stick to rebar3_lint 0.2.0 (newer version had troubles working from
  17. non-default profile) #249
  18. * Pipelined and mixed api tests (better coverage of the features of
  19. `epgsqla` and `epgsqli` interfaces) #244
  20. * Add `ebin/` to the list of ignored directories in .gitignore #251
  21. * Fix `-if(?OTP_RELEASE ...)` (was missing question mark) #255
  22. * Do not format certain attributes of `State` on abnormal epgsql
  23. sock termination (common reason for OOM) #257
  24. * Make dialyzer warn about use of unknown types; fix some occurrences of such #259
  25. * Migrate from travis-ci to github actions; test on PostgreSQL 12 #262, #264
  26. * Introduce transaction_opts type #261
  27. In 4.5.0
  28. * Add support for `application_name` connection parameter #226
  29. * Execute request cancellation over TLS, when main connection is TLS as well #227
  30. * Handle skipped commands in execute_batch #228
  31. * Add sasl_prep implementation for validating passwords according to sasl specification #229
  32. * OTP-23 in CI #237
  33. * switch to `crypto:mac/4` since `crypto:hmac/3` is deprecated #239
  34. * Add `tcp_opts` connect option #242
  35. * Command API improvements #243
  36. In 4.4.0
  37. * Guards are now added to avoid silent integer truncation for numeric and
  38. numeric range datatype codecs. So, an attempt to encode 100000 as `int2`
  39. will now crash the connection instead of silently truncating it. #218
  40. * `epgsql{a,i}:cancel/1` API was documented. #224
  41. * Version of `execute_batch` that uses the same SQL query for each request
  42. in a batch. Very convenient for batch-inserts. #209
  43. * It's now possible to provide `#statement{}` to `prepared_query/3`. This way
  44. of calling it eliminates extra `describe` round-trip thus making it more
  45. efficient. #207
  46. * Representation of SQL `NULL` is now fully configurable. You can choose what
  47. set of Erlang terms should be interpreted as `NULL` and which term to use to
  48. represent `NULL`s received from database. #212
  49. * It's now possible to choose between 3 representations of a `hstore` datatype:
  50. map(), jiffy-style objects (default) and proplist. It can also take `map()` as
  51. input now. NULL value representation is also configurable. #217
  52. * Edocs build was fixed. Just run `rebar3 edoc` and reference documentation for
  53. all modules will be generated. But it's considered to be more "internal"
  54. documentation for those who want to learn more about epgsql internals or
  55. to do some hacking. It complements, but not replaces README. #214
  56. * `epgsql:connect` `timeout` option is more strict now - it limits TCP and SSL
  57. setup time as a whole. #223
  58. * Test coverage report was enabled in CI. We will fail the build if coverage
  59. falls below 55%. We hope to improve this metric over time. #208
  60. * We now send `Terminate` message to the server when doing graceful connection
  61. shutdown (as recommended by protocol). #219
  62. * We found that `describe(_, portal, _)` API was broken since release v4.0.0, but
  63. was not covered by tests. So now it was fixed and tests were added. #211
  64. * Error code to error name conversion code was updated (see `#error.codename`).
  65. Some new codes were added (mostly related to JSON datatypes) and one has changed.
  66. So, if you were matching over `#error.codename` being
  67. `invalid_preceding_following_size` you have to update your code. #210
  68. * `#column{}` record is now fully documented. It was extended to
  69. include `table_oid` and `table_attr_number` fields which point to the originating
  70. database table of this column (if any). #205
  71. * Extended timerange datatype support #204
  72. * Some minor typos, datatype and CI fixes #199 #201 #206 #221
  73. In 4.3.0
  74. * Erlang 22 compatibility is tested; support for Erlang 17 was dropped. Last
  75. version that supports Erlang 17 is 4.2.1 (#195)
  76. * Fixed some corner-case bug in streaming replication (#181)
  77. * It's now possible to set-up JSON encoder/decoder callback for json/jsonb
  78. datatypes (#197)
  79. * Performance micro-optimizations on hot paths (#177)
  80. * Use PostgreSQL 10 for Travis tests (#195)
  81. * Improved connection error handling (#183)
  82. * TLS certificates used in tests had expired (epgsql project is more than
  83. 10 years old!), so, new ones were created (#187)
  84. * Some typespecs fixed
  85. In 4.2.1
  86. * Bug fix for `epgsql:connect(proplist())`
  87. In 4.2.0
  88. * Support for R16 was completely dropped. Maps are now used internally instead of proplists
  89. * Nested `record` datatype decoding bug, introduced in 4.0.0, was fixed
  90. * Added tsrange, tstzrange, daterange types
  91. * Passwords are obfuscated before they sent to connection process. This is to avoid plain
  92. DB passwords to be dumped to SASL crash log
  93. * Password can be provided as a fun: `fun ( () -> iodata() )`
  94. * `platform_define` macros were simplified. It's now possible to build epgsql even without
  95. rebar on all supported OTP versions
  96. In 4.1.0
  97. * Fix Erlang 21 `get_stacktrace/0` warnings
  98. * Fix broken backward-compatibility in `bpchar` datatype
  99. * Fix compatibility issues between the newest rebar3 and Erlang R16
  100. In 4.0.1
  101. * Minor build bug fixed
  102. In 4.0.0
  103. Changes:
  104. * Make epgsql commands pluggable (see pluggable_commands.md).
  105. Now we are not limited only by API functions provided by epgsql (equery/squery/prepared_query etc),
  106. but may create own commands as a plugins. Still, understanding of PostgreSQL network protocol needed
  107. to be able to do so.
  108. * Make epgsql datatype encoding/decdoding pluggable (see pluggable_types.md).
  109. Now we are able to add or tweak codecs for existing as well as custom PostgreSQL
  110. datatypes (like datetime, varchar, enum, arrays etc).
  111. XXX: Highly recommend to add `{codecs, []}` option to your epgsql:connect/X calls if you don't use
  112. PostGIS and hstore datatypes: this will reduce connection setup time.
  113. * epgsql internals had a huge refactoring (4,000 additions and 1,750 deletions for ~5500 LOC project).
  114. Code now is much more modular, documented and have a lot of internal typespecs. Performance
  115. improvements are also expected.
  116. * Now we try to use iolists as much as possible and avoid binary and string concatenations when ever possible.
  117. Expect noticeable performance improvements for large BYTEA / TEXT / VARCHAR / JSON / JSONB etc fields.
  118. * Extended and documented epgsql:with_transaction/3.
  119. Now it's possible to preserve original exception's stacktrace, finally!
  120. * macaddr and macaddr8 datatypes support added
  121. * Float datatype support was extended with `nan`, `minus_infinity`, `plus_infinity`
  122. * elvis code style check was added to our travis pipeline
  123. * Brand-new PostgreSQL 10 scram-sha-256 auth method added
  124. (see https://www.postgresql.org/docs/10/static/auth-methods.html#AUTH-PASSWORD and
  125. https://www.postgresql.org/docs/current/static/sasl-authentication.html)
  126. * A lot of typespecs were rewritten and lots of internal typespecs were added
  127. Incompatibilities:
  128. * Some unexpected performance issues may appear, but we expect performance improvements, especially
  129. for a large result sets (when a lot of rows are returned by a query) and for large string/json/blob
  130. query parameters
  131. * Undocumented epgsql:update_type_cache/2 API was changed
  132. * A lot of typespecs were updated. Some typespecs were deprecated or moved from epgsql.erl to other
  133. modules. So, some new dialyzer warnings might pop-up
  134. * Some new error messages might be returned, especially from epgsql:connect/X functions
  135. * Memory consumption per-connection might slightly grow because we maintain per-connection OID<->codec
  136. mapping table, which might be quite big in some cases. This also may produce bigger error_logger
  137. reports in case of epgsql connection process crashes.
  138. * Some exported .hrl files have been changed. #column{} and #statement{} record definitions were extended.
  139. * PostGIS users might be affected by cleanup of ewkb.erl and epgsql_geometry.hrl
  140. * Streaming replication users should pay extra attention. No tests were broken, but a lot of
  141. modifications were made to this code.
  142. * Passing integer / atom / float as a value of a text / varchar / bytea query parameter is now
  143. deprecated (so, `epgsql:equery(C, "SELECT $1::text", [my_atom])` will still work but is not recommended)
  144. * Redshift and CockroachDB users might experience some problems. Please, report bugs!
  145. In 3.4.0
  146. * Use rebar3 as default build and test tool
  147. * Move tests to common test; launch test postgresql server from Erlang
  148. * Compatibility with Erlang 20
  149. * `ssl_options` connection option fixed
  150. * New types: int8range and int4range
  151. In 3.3.0
  152. * Streaming replication protocol support (epgsql may act like PostgreSQL slave)
  153. https://github.com/epgsql/epgsql/blob/devel/streaming.md
  154. * Connection options now may be passed as map()
  155. * More error extra data fields returned in #error{extra}
  156. http://www.postgresql.org/docs/current/interactive/protocol-error-fields.html
  157. * Prefer non-localized severity in #error{severity} when available
  158. * Added `set_notice_receiver/2` function to dynamically change receiver for asynchronous notifications
  159. * Asynchronous notifications receiver may be set to registered process name (atom)
  160. * `get_cmd_status/1` function added
  161. * Fixed return value of `DELETE ... RETURNING ..` in case when 0 rows were deleted
  162. (now returns `{ok, 0, Columns, []}` instead of `{ok, 0}`)
  163. * TCP socket implicitly closed when epgsql connection process terminates
  164. * Some typespecs fixed
  165. In 3.2.0:
  166. * #error.codename (more readable errors)
  167. * Redshift support (by allowing dynamic typecache update fail)
  168. * Aggregate small binary packets to one in epgsql_sock (network performance improvement)
  169. * Handle situations, when server initiate connection close
  170. * prepared_query APIs (useful when you need to execute one query many times with different parameters)
  171. * array of records type support
  172. * jsonb type support
  173. In 3.1.1:
  174. * It dialyzes happily now
  175. In 3.1.0:
  176. * Deal with int4range type.
  177. In 3.0.0:
  178. * Renamed everything to use the epgsql namespace.