98 Commits

Author SHA1 Message Date
Anthony Dodd
ae7e15cbe3 Added demo program to show use of LISTEN/NOTIFY. 2020-03-15 02:17:14 -07:00
Anthony Dodd
a0da99e128 A good bit of refactoring.
Broke up PgListener into two types. PgListener for basic one-off
connections, and PgPoolListener for the listener created from the
PgPool.

The API is a bit more clear now with this change in terms of reconnect
behavior and the like.

Update `fn stream` to be `fn into_stream`, as that nomenclature is a bit
more normative in the Rust ecosystem.
2020-03-15 02:17:14 -07:00
Anthony Dodd
f83180861b Impl a few features & refactor some code based on design discussion.
Extension traits are now being used for PgConnection, PgPoolConnection &
PgPool for listen/notify functionality. Only two extension traits were
introduced.

Only a single trait method is present on the extension traits and it
works for single or multi channel listening setups.

Automatic reconnect behavior is implemented for PgPool based listeners.
All logic has been cut over to the `recv` impls for the PgListener
variants.

Use async-stream for a nice Stream interface.
2020-03-15 02:17:14 -07:00
Anthony Dodd
cb186e6a13 Updates from review and from testing. 2020-03-15 02:17:14 -07:00
Anthony Dodd
a52f36468b Implement Postgres LISTEN interface.
This changeset introduces an interface for using PostgreSQL's LISTEN
functionality from within sqlx.

The listen interface is implemented over the PgConnection, PgPool & the
PgPoolConnection types for ease of use. In the case of PgPool, a new
connection is acquired, and is then used for LISTEN functionality.

Closes #87
2020-03-15 02:17:14 -07:00
Ryan Leckey
68d4a0d258 sqlite: produce connection specific errors
postgres, mysql: use derive for Debug for error types
2020-03-15 02:14:23 -07:00
Ryan Leckey
426361f361 sqlite: make SqliteConnection and Statement !Sync 2020-03-15 01:48:51 -07:00
Ryan Leckey
dd99fc351c suppress unused warnings 2020-03-14 19:54:19 -07:00
Ryan Leckey
751efdf31b generalize MaybeOwnedConnection and clean up the connection file 2020-03-14 17:43:44 -07:00
Ryan Leckey
553f03fa05 Add Database::RawBuffer to parameterize Encode 2020-03-14 17:43:44 -07:00
Ryan Leckey
cca096355f Run rustfmt 2020-03-14 17:43:44 -07:00
Ryan Leckey
7a98253840 postgres: clean up protocol 2020-03-14 17:43:06 -07:00
Ryan Leckey
a165615f53 row: Row::get panics, Row::try_get is fallible, Query::map panics, Query::try_map is fallible 2020-03-11 03:32:52 -07:00
Ryan Leckey
e047f7c353 Remove custom Execute impl (no longer needed) 2020-03-11 01:55:18 -07:00
Ryan Leckey
e701aef9af Annotate the DB type for Decode in Decode for String 2020-03-11 01:55:06 -07:00
Ryan Leckey
c9df8acc41 Add zero-allocation to MySQL query execution
WIP mysql compiles with types and executor commented out
2020-03-11 01:47:29 -07:00
Ryan Leckey
672f83c00e use pin-project and fix impl of GuardedFlush 2020-03-11 01:47:29 -07:00
Austin Bonander
4163388298 add nullability info to Describe
implement nullability check for Postgres as a query on pg_attribute

implement type name fetching for Postgres as part of `describe()`

add nullability for describe() to MySQL

improve errors with unknown result column type IDs in `query!()`

run cargo fmt and fix warnings

improve error when feature gates for chrono/uuid types is not turned on

workflows/rust: add step to UI-test missing optional features

improve error for unsupported/feature-gated input parameter types

fix `PgConnection::get_type_names()` for empty type IDs list

fix `tests::mysql::test_describe()` on MariaDB 10.4

copy-edit unsupported/feature-gated type errors in `query!()`

Postgres: fix SQL type of string array

closes #107
closes #17

Co-Authored-By: Anthony Dodd <Dodd.AnthonyJosiah@gmail.com>
2020-03-11 01:46:06 -07:00
Ryan Leckey
13caade571 silence some unused warnings in postgres/tls with tls not compiled in 2020-03-11 01:46:06 -07:00
Ryan Leckey
10d2b45d9c update dependencies and clean up some more unused imports 2020-03-11 01:46:06 -07:00
Ryan Leckey
b8cd2e9388 remove unused imports 2020-03-11 01:45:04 -07:00
Ryan Leckey
10232a2cdc remove re-exports from sqlx-core and let sqlx fully define the module layout 2020-03-11 01:45:04 -07:00
Ryan Leckey
f337f1c602 postgres: implement text mode for chrono and clean up type tests 2020-03-11 01:44:41 -07:00
Ryan Leckey
7fbc26de05 tls: update tls module for postgres 2020-03-11 01:44:41 -07:00
Ryan Leckey
47f3d77e59 query_as: fully implement query_as, required a db-specific ext trait 2020-03-11 01:44:41 -07:00
Ryan Leckey
f18ab2fecb tweak type decoding in text mode for floats 2020-03-11 01:44:06 -07:00
Ryan Leckey
8e8cf6db20 postgres: fix various issues and add more tests 2020-03-11 01:44:06 -07:00
Ryan Leckey
433aab1e5b postgres: use RawValue in Decode and implement row-returning simple queries 2020-03-11 01:44:06 -07:00
Ryan Leckey
dd5f250e5e decode: add lifetime to Decode; impl Decode for &str and &[u8]; remove DecodeError 2020-03-11 01:43:27 -07:00
Ryan Leckey
d257c32946 postgres: handle NoticeResponse 2020-03-11 01:43:27 -07:00
Ryan Leckey
f462343787 Split Executor into Executor and RefExecutor
* Allow `conn.fetch(" ... ")` to be called where `conn` is an owned Connection
 * Executor::fetch -> RefExecutor::fetch_by_ref
 * Executor::fetch_by_ref -> Executor::fetch
 * Move `Connection::describe` to `Executor::describe`
 * `Transaction` is no longer a `Connection`
 * `Connection` has `Executor` as a super-trait again which greatly simplifies bounds
2020-03-11 01:43:27 -07:00
Ryan Leckey
0afcf33395 rename Executor::execute to Executor::fetch 2020-03-11 01:43:27 -07:00
Ryan Leckey
72b60e8a7d remove the DB type parameter from HasCursor and push to an associated type; remove Cursor::first 2020-03-11 01:43:27 -07:00
Ryan Leckey
d981262e7e row: RowIndex -> ColumnIndex and de-duplicate logic with macros 2020-03-11 01:43:27 -07:00
Austin Bonander
0cb7bd1185 make macros work again 2020-03-11 01:43:27 -07:00
Ryan Leckey
55ffd989e1 postgres: add support for simple queries (that do not return results) 2020-03-11 01:43:17 -07:00
Ryan Leckey
7404708bab adjust Cursor::map to work through black magic hacks and hope we get GATs soon 2020-03-11 01:43:17 -07:00
Ryan Leckey
a374c18a18 postgres: rewrite protocol in more iterative and lazy fashion 2020-03-11 01:43:17 -07:00
Ryan Leckey
3795d15e1c postgres: break out TLS and SASL into their own files 2020-03-11 01:43:04 -07:00
Ryan Leckey
ea1a4fb042 add Cursor and rewrite Executor/Query over it
* this breaks a lot internally as-is
 * mysql needs a restructure
2020-03-11 01:43:04 -07:00
Ryan Leckey
bb17ebfbbd make Connect extend Connection to simplify bounds 2020-03-11 01:42:34 -07:00
Ryan Leckey
d3d58ef0cf remove unused methods from Arguments: is_empty, len, size 2020-03-11 01:42:34 -07:00
Ryan Leckey
7201f637bf Fix #104, need to advance buffer index to account for the null (one 32-bit length val of -1) 2020-02-01 00:33:59 -08:00
Austin Bonander
eff7c9e125
fix Pool to remove possibility of "leaking" connections (#84)
* fix `Pool` to reduce possibility of "leaking" connections

now uses RAII guards to control `SharedPool::size`

* add smoke test for `Pool` to both Postgres and MySQL tests

add `Pool::is_closed()`

* fix documentation re: pool

* refactor pool implementation to not use futures oneshot channels

https://github.com/launchbadge/sqlx/pull/84#issuecomment-580476223

* run cargo fmt

* Pool: remove superfluous guard struct, document some internal methods
2020-01-31 23:33:42 -08:00
Ryan Leckey
24d6c696f8
Merge pull request #70 from launchbadge/ab/idents-fix
sqlx-macros: fix handling of invalid idents
2020-01-21 16:01:56 -08:00
Wesley Norris
1461891901 Fix passwords not being percent decoded
The password portion of the `Url` type is post-percent encoding
and needs to be manually decoded before processing and being
sent to the server.
2020-01-21 18:53:07 -05:00
Austin Bonander
831ce2d615 fix build with TLS feature on 2020-01-21 11:57:01 -08:00
Austin Bonander
efed9b3d6d sqlx-macros: fix handling of invalid idents
add regression test with Trybuild

fix lint warnings as otherwise Trybuild wanted to include them
2020-01-21 01:52:57 -08:00
Jonas Platte
f93beb460a
Add PgTypeInfo::with_oid 2020-01-18 14:04:17 +01:00
Ryan Leckey
d00c18ec75 Fix query! for the no results case in Postgres and MySQL 2020-01-18 00:43:59 -08:00