Commit graph

622 commits

Author SHA1 Message Date
Felipe Lessa
516af07713
Sqlite support for DateTime<{Utc,Local}>. 2020-06-27 12:08:00 +01:00
Ryan Leckey
a7117dd71b feat(any): introduce the Any database driver which enables choosing the database driver at runtime 2020-06-27 04:07:40 -07:00
Ryan Leckey
62d02e9450 feat: implement Execute for (&str, Arguments) 2020-06-27 04:06:54 -07:00
Ryan Leckey
5091a28ce6 refactor: remove Default requirement for ArgumentBuffer 2020-06-27 04:06:35 -07:00
Ryan Leckey
b7ec7bbd3e refactor: allow non-Send adding to arguments crate-local 2020-06-27 04:06:22 -07:00
Ryan Leckey
eb26e9f557 refactor: remove several blanket impls to allow more customization 2020-06-27 04:05:23 -07:00
Ryan Leckey
34859af1d3 feat(core): lift Send bound for arguments to Arguments::add
Execute already required Send so this just makes it fail earlier
2020-06-27 04:03:17 -07:00
Felipe Lessa
4254735dcf
Update sqlite chrono support so it compiles. 2020-06-27 09:12:33 +01:00
Felipe Sere
333803c1ff
Correct table headings and only list types that are actually implemented 2020-06-27 08:25:07 +01:00
Felipe Sere
7c27065c09
First attempt at roundtripping chrono types through SQLite 2020-06-27 08:25:05 +01:00
Ryan Leckey
991c0ba155 fix(sqlite): double negative in sqlite connection prepare 2020-06-25 05:34:14 -07:00
Ryan Leckey
8d1368f163 fix(sqlite): with caching disabled force persistent to false
additionally, set persistent to true for a cached statement and
correctly only reset the statement when its being reused
2020-06-25 03:44:26 -07:00
Ryan Leckey
8d24dfc0ef feat(cache): expose capacity on StatementCache 2020-06-25 03:43:31 -07:00
Julius de Bruijn
363dbfb81e No need to reset the statement when dropping. 2020-06-25 12:38:20 +02:00
Julius de Bruijn
745a32ab60 Close pg statements correctly 2020-06-25 12:26:44 +02:00
Julius de Bruijn
f969798cb6 Document new connection string params 2020-06-25 11:57:55 +02:00
Julius de Bruijn
2c2a277666 Caching methods in Connection 2020-06-25 10:44:05 +02:00
Julius de Bruijn
eba82e3fc1 LRU caching for SQLite 2020-06-24 19:46:32 +02:00
Julius de Bruijn
5d64310004 LRU caching for PostgreSQL 2020-06-24 19:01:54 +02:00
Julius de Bruijn
2b6f242a22 LRU statement cache for MySQL 2020-06-24 16:57:06 +02:00
Tim Murison
72c4e040bc Require a mutable reference to self 2020-06-23 17:03:48 -07:00
Tim Murison
cac3f193d7 Adds a method get the underlying sqlite3 pointer 2020-06-23 17:03:48 -07:00
Zachery Gyurkovitz
84e8ed0d4c fix: bigdecimal decoding ob1 for positive weight multiples of 4 2020-06-23 13:10:03 -07:00
Ryan Leckey
f85920acaf fix(postgres): ignore more harmless messages in execute 2020-06-21 22:09:00 -07:00
Ryan Leckey
3dc067f031 fix: downgrade num-bigint due to conflicting version in rsa 2020-06-21 04:13:45 -07:00
Ryan Leckey
ec6b4be7fb fix: rename Decode::accepts to Type::compatible for MSSQL / bool 2020-06-21 04:13:33 -07:00
Ryan Leckey
4448c0e629 feat: add should_flush and only spawn on drop for PoolConnection if we need to flush 2020-06-21 03:55:31 -07:00
Ryan Leckey
d76002e110 postgres: ignore more messages during execution if they are deemed not relevant 2020-06-21 03:55:31 -07:00
Ryan Leckey
f8dc7284b9 chore: update dependencies 2020-06-21 03:55:31 -07:00
Ryan Leckey
e7e2f5b37a fix: implement transparent Serialize and Deserialize for Json<_> 2020-06-21 03:55:31 -07:00
Ryan Leckey
93728a051c fix: impl Deserialize for Json for MySQL instead of DeserializeOwned 2020-06-21 03:55:31 -07:00
Ryan Leckey
21717b47a0 fix: AsyncStream should use a zero-capacity stream to ensure we run in lock-step 2020-06-21 03:55:31 -07:00
Ryan Leckey
6cfe5ac811 refactor: tweak type name display to use TypeInfo::name 2020-06-21 03:55:31 -07:00
Ryan Leckey
aaa475cc33 refactor: move Decode::accepts to Type::compatible 2020-06-21 03:55:31 -07:00
Ryan Leckey
5ac7601fe2 docs: extend documentation on Encode/Decode 2020-06-21 03:55:31 -07:00
Ryan Leckey
11e21e201c feat: add a name method to TypeInfo 2020-06-21 03:55:31 -07:00
Ryan Leckey
e3adb88ab5 feat: disassociate Type from Decode further and require only Decode for FromRow + Row + Value 2020-06-21 03:55:31 -07:00
Daniel Akhterov
80d545109b
feat: implement BIT support in MSSQL 2020-06-15 22:49:33 -07:00
Bo Jeanes
956721c96c Don't leak txns on explicit commit/rollback
Fixes #409
2020-06-14 20:03:50 -07:00
Ryan Leckey
e10c7c723f refactor: remove impl of Encode::produces where it doesn't make sense
produces is meant as a value-dependent override, it only makes sense
currently for MSSQL or in generic contexts
2020-06-13 10:18:04 -07:00
Ryan Leckey
847e0b6b6b fix(mysql): update usage of Digest and remove OAEP module in favor of the RSA crate 2020-06-13 08:55:24 -07:00
Ryan Leckey
c2ce35fc06 fix(postgres): update usage of Digest 2020-06-13 08:54:52 -07:00
Ryan Leckey
e2ac01e190 chore: update dependencies 2020-06-13 08:54:38 -07:00
Ryan Leckey
c9f3e1adca feat(postgres): add support for built-in range types and allow derives to handle custom range types
Co-authored-by: Caio <c410.f3r@gmail.com>
2020-06-12 15:33:19 -07:00
Ryan Leckey
fedd883d91 style: rustfmt 2020-06-12 15:33:19 -07:00
Caio
d4329e98d4 refactor: prepare to support postgres ranges
- Remove Type bound from Encode + Decode which removes the defaults 
   for produces() and accepts(). This allows custom type implementations
   to be more flexible.
2020-06-12 15:33:19 -07:00
Daniel Akhterov
98a0de2cfd
feat: implement Order message type 2020-06-11 18:58:06 -07:00
Ryan Leckey
e9a562f89a fix(mysql): handle MySQL sending more or less bytes than we expect for an integer type 2020-06-11 03:39:23 -07:00
Pirmin Kalberer
e5a7619344 Allow queries on virtual tables 2020-06-11 03:36:58 -07:00
Ryan Leckey
475ed9e1df fix(mariadb): don't append UNSIGNED to the type of timestamp columns 2020-06-10 04:24:34 -07:00
Ryan Leckey
1dac0b5c29 fix(postgres): invert the type description logic to allow all "simple" type categories
closes #379
2020-06-10 04:21:09 -07:00
Ryan Leckey
e7d6e67f03 docs(pool): add some module docs to sqlx::pool 2020-06-10 01:51:14 -07:00
Ryan Leckey
ef6afb64d3 feat(pool): use Connect::Options over &str 2020-06-10 01:19:10 -07:00
Ryan Leckey
8359c01b76 fix(sqlite): set a busy timeout to handle SQLITE_BUSY 2020-06-10 01:02:41 -07:00
Ryan Leckey
a2c55b9f31 fix(mysql): tweak JSON type so it accepts BINARY in addition to CHAR (and make tests pass in MySQL 5.5) 2020-06-10 00:43:14 -07:00
Ryan Leckey
6fcb520ac9 fix(mssql): emit nvarchar(max) if len is too large 2020-06-10 00:43:14 -07:00
Ryan Leckey
72ca9036c5 fix(mssql): potential stall on re-using connection after an dropped incomplete fetch stream 2020-06-10 00:43:14 -07:00
Peter Maatman
2a5ea2f71b mysql: always use column alias when available
If a query has a column alias available we should use that name instead
of the column name.

Fixes #385
2020-06-10 00:42:58 -07:00
Ryan Leckey
ec1cfc11e6 refactor(core): rename try_stream2 to try_stream (after removal of conflicting async-stream package) 2020-06-09 23:15:54 -07:00
Ryan Leckey
65057f0e05 fix(core): add missing .await in try_stream! 2020-06-09 23:15:19 -07:00
Ryan Leckey
e1d22a1840 fix(core): async-stream crate seems to lose the stream if the stream owns the object we are streaming
hand-rolled a copy of the idea behind AsyncStream and things seem to work
2020-06-09 02:16:47 -07:00
Ryan Leckey
e54d030381 fix(mysql): str should produce VARCHAR not BLOB 2020-06-08 02:30:21 -07:00
Ryan Leckey
9a7401a427 chore: update dependencies 2020-06-07 16:30:21 -07:00
Ryan Leckey
f2885f84a7 fix(mssql): handle NULL values 2020-06-07 16:30:07 -07:00
Ryan Leckey
a0ccc135aa style(mssql): rename MsSql to Mssql as MSSQL is not written MsSQL 2020-06-07 05:39:12 -07:00
Ryan Leckey
c9eef8b030 fix(postgres): failure to detect errors on postgres 9.5 2020-06-07 05:09:51 -07:00
Ryan Leckey
53c074130f Merge remote-tracking branch 'origin/ab/macro-fixes' 2020-06-07 02:35:12 -07:00
Daniel Akhterov
c050611bac fix: remove DatebaseError impl for stringprep::Error and panic instead 2020-06-07 02:34:41 -07:00
Daniel Akhterov
362a546484 feat(postgres): make sure username is ran through saslprep before sending to server 2020-06-07 02:34:41 -07:00
流光
ebfd5eb4f8 fix bug in init_min_connections 2020-06-07 02:34:20 -07:00
Ryan Leckey
9233cb5812 fix(sqlite): minor typo when encode for Option<T> became a macro 2020-06-07 02:15:48 -07:00
Ryan Leckey
13598c0eeb feat(mssql): add support for offline 2020-06-07 02:15:10 -07:00
Ryan Leckey
ef2527ff3e feat(mssql): fix a few bugs and implement Connection::describe 2020-06-07 02:00:31 -07:00
Ryan Leckey
559169cc79 refactor(mssql): clean up unused imports and other warnings 2020-06-07 02:00:13 -07:00
Ryan Leckey
12c1137d91 feat(mssql): add support for f32 and f64 2020-06-07 02:00:13 -07:00
Ryan Leckey
28636c1f5d feat(mssql): add support for string types including a framework for handling non-UTF8 data 2020-06-07 02:00:13 -07:00
Ryan Leckey
2a272bdd59 feat(mssql): setup type tests for MSSQL and add support for all the int types 2020-06-07 02:00:13 -07:00
Ryan Leckey
434bfaa76a feat(mssql): handle stream flushing 2020-06-07 02:00:13 -07:00
Ryan Leckey
c64122c03f feat(mssql): implement parameterized queries 2020-06-07 02:00:13 -07:00
Ryan Leckey
9a701313bc feat(mssql): implement enough to get simple queries working
Co-authored-by: Daniel Akhterov <akhterovd@gmail.com>
2020-06-07 02:00:12 -07:00
Ryan Leckey
05eb07e7d4 feat(mssql): setup the initial boilerplate for MSSQL
Co-authored-by: Daniel Akhterov <akhterovd@gmail.com>
2020-06-07 02:00:12 -07:00
Ryan Leckey
3bc11cea26 fix: comment in mysql should say mysql 2020-06-07 02:00:12 -07:00
Daniel Akhterov
2863247660
fix: remove mssql and db2 modules 2020-06-06 11:01:40 -07:00
Daniel Akhterov
1b9ef2b7f2
fix: comment out mssql module 2020-06-06 10:59:44 -07:00
Austin Bonander
80b4e2fca6
fix(macros): reintroduce and fix macro tests for MySQL 2020-06-05 21:02:24 -07:00
Austin Bonander
e3dbd58bf2 PgConnection: use more obvious/safer query for ping() 2020-06-05 20:13:20 -07:00
rage311
a0d1106f90 Added quotes to listen/unlisten channel names to honor case sensitivity and be consistent with 'listen_all()' 2020-06-05 19:50:44 -07:00
dignifiedquire
9b68eb19ef fix(sqlx-macros): update trait definitions 2020-06-05 19:49:31 -07:00
Ryan Leckey
9341cb8651 test: mark macro doctests as ignored (for now) 2020-06-01 17:06:42 -07:00
Ryan Leckey
b7f8a5fa81 fix: remove outdated comment, we do have the test_on_acquire setting 2020-06-01 05:37:26 -07:00
Ryan Leckey
bb7c064bec fix: error handling in main options examples 2020-06-01 05:35:13 -07:00
Ryan Leckey
a3053119fa fix: expose runtime-actix in sqlx/Cargo.toml 2020-06-01 05:34:52 -07:00
dignifiedquire
994911b1fe
feat: implement FromRow for tuples up to 16 2020-05-31 00:08:33 -07:00
Ryan Leckey
51ae9f00e7
chore: bump version to 0.4.0-pre 2020-05-30 23:15:52 -07:00
Ryan Leckey
3fcd4cd80e
style(core): apply more clippy suggestions 2020-05-30 18:28:55 -07:00
Ryan Leckey
35bf560481
fix(core): tweak serialization impls to fix offline mode 2020-05-30 18:17:51 -07:00
Ryan Leckey
9b299d9f09
style(core): apply future-incompatible suggestions 2020-05-30 18:06:21 -07:00
Ryan Leckey
72c1f52caf
style(core): apply clippy suggestions 2020-05-30 18:00:21 -07:00
Ryan Leckey
e08f05b879
feat: re-introduce error downcasting 2020-05-30 17:51:56 -07:00
Ryan Leckey
e5b6047009
feat: introduce docker-compose based testing for running locally against many database combinations 2020-05-30 17:51:55 -07:00
Ryan Leckey
afd831b0d3
feat: re-introduce Pool::begin and add Pool::try_begin to match Pool::try_acquire 2020-05-30 17:51:55 -07:00
Ryan Leckey
0a04abdb3e
feat: Pool is now generic over Database, as opposed to Connection
this fixes an unfortunate interaction with HRTBs where the compiler would
produce infinitely nested PoolConnection<PoolConnection<....
2020-05-30 17:51:55 -07:00
Ryan Leckey
cf7606be1b
fix: Transaction now to rollbacks on drop (again) 2020-05-30 17:51:55 -07:00
Ryan Leckey
bb3b571a57
fix: tweak lifetimes in Executor to limit the scope for the borrow on the query to the single execution 2020-05-30 17:51:55 -07:00
Ryan Leckey
cc9d443434
feat: re-introduce Transaction
* Transaction now wraps `&mut Connection` instead of `Connection`
2020-05-30 17:51:55 -07:00
Ryan Leckey
9d2a0141cb
feat: introduce IntoArguments, query_with, query_as_with, and query_scalar_with 2020-05-30 17:51:55 -07:00
Ryan Leckey
88532ffc28
refactor: clean up warnings 2020-05-30 17:51:49 -07:00
Ryan Leckey
a54b1267f6
refactor(macros): adapt to the 0.4.x core refactor 2020-05-30 17:51:49 -07:00
Ryan Leckey
eaa7fba9d4
refactor(postgres): adapt to the 0.4.x core refactor 2020-05-30 17:49:30 -07:00
Ryan Leckey
2966b655fc
refactor(mysql): adapt to the 0.4.x core refactor 2020-05-30 17:48:10 -07:00
Ryan Leckey
37a69e0ac3
refactor(sqlite): adapt to the 0.4.x core refactor
* massive (~20x) performance improvement
2020-05-30 16:09:50 -07:00
Ryan Leckey
757a930e21
refactor(core): remove the HRTB (higher rank trait bound) on Row in the aim of improving ergonomics
* removes the lifetime from Row

 * removes MySqlQueryAs, SqliteQueryAs, etc. (no longer needed)

 * introduce query_scalar

 * introduce Decode::accepts to allow overriding runtime type checking
   per-type (replaces TypeInfo::compatible)

 * introduce Encode::produces to allow overriding the encoded type per-value

 * adds a lifetime to Arguments (and introduce the HRTB HasArguments)
   to support zero-copy encoding with SQLite

 * renames Database::RawBuffer to HasArguments::ArgumentBuffer

 * introduce Connect::connect_with to provide an ConnectOptions type
   explicitly to opt-out of connection string parsing

 * introduce Value and ValueRef traits to allow decoding-deferred
   extraction of values from Rows

 * introduce Encode::encode_by_ref and change Encode::encode to take
   by-value to try and re-use memory where possible

 * use thiserror to generate sqlx::Error

 * [!] temporarily removes query logging

 * [!] temporarily removes transactions
2020-05-30 16:09:08 -07:00
Austin Bonander
6913695588 add support for building in "decoupled" mode 2020-05-30 16:02:37 -07:00
吴翱翔
77cdafe08a Fix a misspelling in MySQL types document 2020-05-15 12:46:35 -07:00
Ryan Leckey
cbccd68963
chore: prepare v0.3.5 2020-05-06 03:30:35 -07:00
meh
7b1cc7fd09 Derive Serialize and Deserialize for Json 2020-05-06 00:13:19 -07:00
Austin Bonander
c285e28670 fix and test handling of 0 for BigDecimal in Postgres/MySQL
closes #283
2020-04-28 11:54:41 -07:00
Peter Maatman
4122a3dbd9 mysql: Advance buffer to comply with protocol
Fixes #254
2020-04-27 16:47:38 -07:00
Hasan Ali
3e2ed00b60 Drop all statements before closing sqlite connection 2020-04-27 10:20:57 -07:00
Josh Holmer
581bcf0ceb Extract slow query threshold to constant 2020-04-23 14:09:59 -07:00
Josh Holmer
627d8292f8 Log queries from sqlx::query
This will make logged queries show
as from `sqlx::query` instead of `sqlx::db_name::executor`.

Followup to #268
2020-04-23 14:09:59 -07:00
Josh Holmer
f73149a90f Format SQL queries when printing them to the logs
Before, the query would be formatted equivalent to the input string:

```
[2020-04-18T23:47:32Z DEBUG sqlx_core::postgres::executor] SELECT id, queue, ..., elapsed: 2.320µs

        SELECT id, queue, payload, status, priority, created_at, updated_at
    FROM jobs
    WHERE status = $1
    ORDER BY priority ASC, created_at ASC

```

After, the query is formatted cleanly and consistently:

```
[2020-04-19T00:30:18Z DEBUG sqlx_core::postgres::executor] SELECT id, queue, ..., elapsed: 2.280µs

    SELECT
      id,
      queue,
      payload,
      status,
      priority,
      created_at,
      updated_at
    FROM
      jobs
    WHERE
      status = $1
    ORDER BY
      priority ASC,
      created_at ASC

```

This uses the `sqlformat` crate, which was ported from the
Javascript `sql-formatter-plus` library specifically for this purpose.
2020-04-19 16:11:50 -07:00
Ryan Leckey
1cdfb8507c fix: remove the clone on Encode for JsonValue 2020-04-19 16:05:37 -07:00
Peter Maatman
1b04829c46 json: Refactor Encode/Decode for serde values to be generic for DB
Since the implementation of Encode and Decode for both mysql and
postgres on serde's Value and RawValue were practically the same they
were moved to the generic json module.
2020-04-19 15:58:47 -07:00
Peter Maatman
30d13174ea mysql: Add JSON support 2020-04-19 15:58:47 -07:00
Felix Wiedemann
57f52ffbc4 postgres: Use $USER as default for the username 2020-04-18 14:31:31 -07:00
Felix Wiedemann
f3fe41ebdb postgres: Use username as default for database name 2020-04-18 14:31:31 -07:00
Felix Wiedemann
a2673f7880 postgres: Add support for postgres:///?host=... connection strings 2020-04-18 14:31:31 -07:00
Felix Wiedemann
fc78f15ebf postgres: Add support for non-default socket paths 2020-04-18 14:31:31 -07:00
Felix Wiedemann
5628658d3f postgres: Add unix domain socket support 2020-04-18 14:31:31 -07:00
Felix Wiedemann
49f15713d6 Move empty host handling to the DB specific code 2020-04-18 14:31:31 -07:00
Josh Holmer
16229fd0ad Add basic query logging
Prints each query performed at DEBUG level,
along with a timing of how long the query took
to execute.

Slow queries will be printed at WARN level.
Currently the slow query threshold is
hardcoded to 1 second.
2020-04-17 22:49:33 -07:00
George Kaplan
7df6d4dbcf undo URL percent-encoding for SQLite connection strings 2020-04-17 18:23:33 -07:00
meh
2fb38dd0c1 Derive all traits and impl Deref and AsRef for types::Json 2020-04-16 11:00:31 -07:00
Austin Bonander
80eb2cc7d2 make the stream returned from Map::fetch() Unpin
closes #244
2020-04-11 03:04:21 -07:00
Ryan Leckey
90fd35745c Prepare v0.3.4 2020-04-10 15:56:13 -07:00
xiaopengli89
5711e1cc94 refactor: mysql decimal value is just ascii str 2020-04-10 15:35:58 -07:00
xiaopengli89
229635771a fix: test 2020-04-10 15:35:58 -07:00
xiaopengli89
771d423c6f fix: change u8::MAX to std::u8::MAX 2020-04-10 15:35:58 -07:00
xiaopengli89
401ffd19e6 add test_encode_decimal, test_decode_decimal 2020-04-10 15:35:58 -07:00
xiaopengli89
b354ed430d implement DECIMAL type support for mysql 2020-04-10 15:35:58 -07:00
Ryan Leckey
d360f682f8 fix(postgres): guarantee the type name on a PgTypeInfo to always be set
fixes #241
2020-04-10 13:37:08 -07:00
Ryan Leckey
cd6735b5d7 fix(sqlite): handle empty statements, fixes #231 2020-04-08 02:13:37 -07:00
Ryan Leckey
72bd933e41 add MapRow impls; closes #228 2020-04-08 01:24:57 -07:00
Kristy Brambila
0e61642165 Make postgres type name resolution case-insensitive 2020-04-08 01:22:37 -07:00
kosyak
6c9241a3a9 Fixed types of variables that interact with libsqlite3 2020-04-07 04:10:47 -07:00
Ryan Leckey
e7ace2adc7 Prepare v0.3.3 2020-04-01 18:24:08 -07:00
Ryan Leckey
2a9774d84f use cow::borrowed to remove a minor allocation in postgres/startup
refs #214
2020-03-31 21:41:29 -07:00
Ryan Leckey
3a997f06ab
Merge pull request #214 from jamwaffles/encoded-connection-string
Decode username on read
2020-03-31 21:38:33 -07:00
James Waples
f05f6bedd9 Decode username on read 2020-03-31 23:03:17 +01:00