GithubHelp home page GithubHelp logo

odbc-rs's People

Contributors

brandonros avatar cfsamson avatar cristianberneanu avatar dependabot-preview[bot] avatar dependabot-support avatar donhcd avatar eddyb avatar itn3000 avatar jpastuszek avatar koka avatar nao-kobayashi avatar pacman82 avatar palfrey avatar yekimov avatar yuana1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

odbc-rs's Issues

Rewrite everything in terms of odbc-safe

Let's drop every use of direct odbc-sys calls in favor of odbc-safe crate (especially Statement related part).
Maybe a major API redesign is needed - in a more idiomatic way (with major version bump).

[FreeTDS][SQL Server]Invalid string or buffer length

The problem doesn't happen every time. I just tested 5 times and I got ok, ok, err, err, err, ok, ok. Also it seems to only happen when I use bind_parameter.

error

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: State: HY090, Native error: 0, Message: [FreeTDS][SQL Server]Invalid string or buffer length', /checkout/src/libcore/result.rs:860:4

create table

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[test](
	[CODE] [int] NULL,
	[VALUE] [varchar](15) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

insert data

INSERT INTO test
(CODE, VALUE)
VALUES (10605, 'a');

query

let stmt = stmt.prepare(r#"SELECT
CODE
FROM test
WHERE
CODE = ?;"#)?;

let code = 10605;

let stmt = stmt.bind_parameter(1, &code)?;

versions
rustc 1.21.0-nightly (ba1d065ff 2017-08-06)
odbc 0.9
Driver=FreeTDS
freetds 1.00.44-1
Arch Linux 64-bit
Microsoft SQL Server Standard Edition (64-bit) 9.00.3042.00

cannot use tables / tables_str with mariadb-driver because it needs NULL

I tried to use tables_str to get all tables from a maria db.

It always returns an empty result. After some trying with odbc-c-binding and calling SQLTables with odbc-sys directly I found the solution.
If I passs null_mut() to SQLTables for catalog, schema and table, it works. So there has to be a way for tables / tables_str to provide null. Maybe with an Optional?

Don't know why the mariadb-driver handles this differently than other drivers (tried sqlite, which works if I use "%"-strings)

iODBC Driver Manager support

I am trying to connect to a sqlite3 database to query a table. In my project, the connection string gives me the error 'Diagnostics returned error for record number 2. Record numbers have to be at least 1.'

I decided to download the crate individually to see if I could run test examples and figure out what is wrong with my code. None of the tests pass.

My output is below:
cargo_test_output.txt

Also, is there a list of dependencies need for this repo? I got a linker error until I used "brew install libiodbc".

chrono support

I saw custom_get_data.rs but would it be possible to have native Chrono support?

I'm thinking maybe it's not since ODBC can be used to query different sources which probably use differents datetime formats.

Send+Sync for connection

Looking at the docs it says that Send and Sync are not implemented for connection but in your r2d2-odbc crate it is "unsafely" implemented. Can they be implemented in this crate? Or do you allow it under r2d2 because it takes care not to share a connection amongst two threads?

In some editions of Windows using non UTF-8, displaying DiagnosticRecord causes thread 'main' panicked at 'called `Result::unwrap()` on Utf8Error

I'm using a Japanese edition of Windows and MSSQL. When I call env.connect_with_connection_string with an incorrect connection string, the function does not return an Err, but causes following panick with Utf8Error.

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Utf8Error { valid_up_to: 33, error_len: Some(1) }', libcore\result.rs:1009:5
stack backtrace:
...
  12: odbc::diagnostics::{{impl}}::fmt
             at C:\Users\username\Project\rust\odbc_test\odbc-rs\src\diagnostics.rs:63
...
  21: env_logger::fmt::DefaultFormat::write_args
             at C:\Users\username\.cargo\registry\src\github.com-1ecc6299db9ec823\env_logger-0.6.0\src\fmt\mod.rs:290
...
  28: log::__private_api_log
             at C:\Users\username\.cargo\registry\src\github.com-1ecc6299db9ec823\log-0.4.6\src\lib.rs:1232
  29: odbc::result::into_result<odbc_safe::data_source::DataSource<odbc_safe::data_source::connected::Connected>,odbc_safe::data_source::DataSource<odbc_safe::data_source::unconnected::Unconnected>>
             at C:\Users\username\Project\rust\odbc_test\odbc-rs\src\result.rs:95
  30: odbc::environment::Environment<odbc_safe::version::Odbc3>::connect_with_connection_string
             at C:\Users\username\Project\rust\odbc_test\odbc-rs\src\connection.rs:40
...
  41: main
...
error: process didn't exit successfully: `target\debug\odbc_test.exe` (exit code: 101)

This is because the ODBC driver returns messages in Shift_JIS (strictly speaking, it is Windows-31J) encoding, which is incompatible with UTF-8. As an experiment, I have rewrited using encoding_rs 0.8.15 odbc-rs/src/diagnostics.rs:63 as follows.

message.to_str().unwrap()

            encoding_rs::SHIFT_JIS.decode(message.to_bytes()).0

This rewriting passes connect_with_connection_string and the function returns Err correctly. The following message is the proper message in Shift_JIS, which causes Utf8Error panick above.

[2019-02-07T11:25:39Z ERROR odbc::result] State: IM002, Native error: 0, Message: [Microsoft][ODBC Driver Manager] デー タ ソース名および指定された既定のドライバーが見つかりません。

(FYI, this message says "The data source name and specified default driver is not found" in Japanese.)

Of course this rewriting is just an experimental code and can never be accepted as production code. I'm new to Rust and ODBC, but I think it is better to create some mechanisms to provide some way for users to change the conversion from std::ffi::CStr to string.

Note: This problem seems to be common in CJK editions of Windows.

  • Japanese editions of Windows use Microsoft Code Page 932 (Windows-31J, or called Shift_JIS inaccurately) by default
  • Simplified Chinese editions of Windows use Microsoft Code Page 936 (GBK) by default
  • Korean editions of Windows use Microsoft Code Page 949 (UCH) by default

The default code page can surely be changed, but there are hardly any users change the setting, and even some CJK applications assume that the setting is not changed.

This problem is similar to #94, #52, #86.

parameter binding problem(Is this dangling pointer?)

Hi, I wrote following code.
"params" is a values of the query parameter.
When I set japanese text into params, duplicate value used in SQL.

I think String.value_ptr sometimes return duplicate addresses in the bind_parameter function.
For example, I set 10 japanese words into params Vector.
Some value is duplicated.
(I paste println results of String.value_ptr later.)
I think it may only happen in the case of SJIS or multibyte.

I am using SQLServer2016 and collate is Japanese_CI_AS.
I created ODBC environment as create_environment_v3_with_os_db_encoding("utf8", "sjis").
Rust's version is 1.39.0 and MSVC toolchain.

Please check it, thank you.

pub fn query<T>(
    &self,
    sql: &str,
    params: Vec<String>,
    converter: impl Fn(Vec<Option<String>>) -> T,
) -> Result<Vec<T>, Box<dyn Error>> {

    let mut conn = self.get_connection();
    let stmt = Statement::with_parent(&conn)?;
    let mut prepare_stmt = stmt.prepare(sql)?;
    prepare_stmt = prepare_stmt.reset_parameters()?;

    for (i, p) in params.iter().enumerate() {
        //I will write results of println! below.
        println!("value={} {:?}", p, (*p).value_ptr());
        prepare_stmt = prepare_stmt.bind_parameter((i + 1) as u16, p)?;
    }

    let mut query_result = Vec::new();
    if let Data(mut data) = prepare_stmt.execute()? {
        let columns = data.num_result_cols()? as u16;
        while let Some(mut cursor) = data.fetch()? {
            let mut row = Vec::new();
            for i in 1..=columns {
                row.push(cursor.get_data::<String>(i)?);
            }
            query_result.push(converter(row));
        }

        data.close_cursor()?;
    }

    conn.commit()?;
    Ok(query_result)
}

***** println results ************
//println!("value={} {:?}", p, (*p).value_ptr());
some value_ptr's results are duplicated!!!

value=あ 0x1c5f133cc50
value=い 0x1c5f133cbb0 <- duplicate case 1
value=う 0x1c5f133ca30 <- duplicate case 2
value=え 0x1c5f133cbb0 <- duplicate case 1
value=お 0x1c5f133ccf0
value=か 0x1c5f133ca30 <- duplicate case 2
value=き 0x1c5f133ca30 <- duplicate case 2
value=く 0x1c5f133ceb0 <- duplicate case 3
value=け 0x1c5f133ceb0 <- duplicate case 3
value=こ 0x1c5f133cbb0 <- duplicate case 1

How to treat SUCCESS_WITH_INFO in a high level abstraction of odbc?

For the low level stuff SUCCESS_WITH_INFO mostly happens if a buffer is truncated, which we can avoid entirely. Actually executing SQL Statements however is an entirely different matter. How do we handle ODBC notion of warnings (SQL_SUCCESS_WITH_INFO) with idomatic error handling in RUST which only knows Ok and Error?

[FreeTDS][SQL Server]Invalid data type

error

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: State: HY004, Native error: 0, Message: [FreeTDS][SQL Server]Invalid data type', /checkout/src/libcore/result.rs:860

code

let param = "something";

let mut stmt = stmt.prepare("SELECT col1, col2 FROM table WHERE p = ?")?;

let stmt = stmt.bind_parameter(1, &param)?;

rustc 1.19.0-nightly (cfb5debbc 2017-06-12)
odbc b88e683
Driver=FreeTDS
freetds 1.00.40-1
Arch Linux 64-bit

zero bytes for empty string decoded with latin1

I got "\u{0}" for some empty string.

odbc 0.14.0
I'm also using r2d2_odbc (that I updated to use odbc 0.14.0).

ODBCEnv(create_environment_v3_with_os_db_encoding("latin1", "latin1").unwrap());

I have some wireshark captures, not sure which parts I can send.

first mentioned on #113

Tests are failing

Looks like SQLBindParam for strings is truncating them or something

`get_data` on large string field results in `None`

Hi,

I am trying to use the odbc crate to process some data in a SQL Server database.
During processing, I get null values for some of the string fields that have a large amount of content in them. Is that a known bug? If yes, is there some workaround that I can use?

Thanks.

How can I connect to MS DataBase

I'm connected to MS Access database using julia odbc as below:

db=ODBC.DSN("Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=C:/Users/hasan.yousef/Documents/myDB.accdb")

I'm using evcxr_jupyter

How can I do the same using Rust.

image

affected_row_count should be implemented for all executed statements (including Prepared)

Currently affected_row_count method is available for direct query (Allocated/Executed) and Prepared with HasResult but not for prepared query with NoResult.
If you run INSERT via prepared query you can't get the number of affected rows.

This looks all wrong to me though... Executed is an alias Allocated so you can't distinguish based on this on type system level. Also Prepared has no concept of Executed so you can only work with HasResult/NoResult on type system level. Ideally you could add another type parameter and have two pairs Direct/Prepared and Allocated/Executed so that you can implement affected_row_count to any type that is Executed and change Executed to Allocated with close_cursor method.

get_data returns Chinese string error under windows

The database returns a Chinese string. Running normally under linux, but compiling and running under windows will report the following error:

thread 'main' panicked at 'called Result::unwrap()on anErr value: Utf8Error { valid_up_to: 1, error_len: Some(1) }'

Support non UTF-8 strings

thread 'main' panicked at 'called Result::unwrap()on anErr value: Utf8Error { valid_up_to: 1, error_len: Some(1) }', src\libcore\result.rs:860

The database has german characters in it "üÜäÄöÖ".

this is how I try to get the data:
cursor.get_data::<String>(3)

is this a bug or should I use some other data type ?

Example on crates.io is out of date.

New Rust user coming from Python. I need a Rust program that speaks odbc and I stumbled upon this project. However, I think the example is out of date. I'm new to Rust so I don't think I can contribute to the code, but I'd love to help with the Documentation.

You need any help with that?

No reexport for odbc_safe

Hi,
although the docs claim that odbc_safe is re-exported, I don't see it in the code. The part of the docs says:

Re-exports:

pub extern crate odbc_safe;
--
pub use ResultSetState::*;
pub use odbc_safe as safe;

When I couldn't import the odbc_safe because it's private, I checked the actual crate code:

pub use diagnostics::{DiagnosticRecord, GetDiagRec};
pub use result::Result;
pub use environment::*;
pub use connection::Connection;
pub use statement::*;

use odbc_object::OdbcObject;
use raii::Raii;
use result::{Return, into_result, try_into_option};
use odbc_safe as safe;

Can you please check and fix? Right now, I have to use odbc_safe as additional dependency.

Thanks.

Unstable tests

I've got unstable behaviour in our tests - they fail time to time with the following thread-related exception message:

running 12 tests
test not_read_only ... ok
test implicit_disconnect ... ok
test list_system_data_sources ... ok
test invalid_connection_string ... ok
libs-896b1f373715685b: pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
error: process didn't exit successfully: `/home/travis/build/Koka/odbc-rs/target/debug/deps/libs-896b1f373715685b` (signal: 6, SIGABRT: process abort signal)

Caused by:
  process didn't exit successfully: `/home/travis/build/Koka/odbc-rs/target/debug/deps/libs-896b1f373715685b` (signal: 6, SIGABRT: process abort signal)

Quick googling suggests setting set Threading param to 0 or 1 in odbcinst.ini, but I'm not sure of consequences.

Running Insert Prepared Statement in Vertica returns Resultsetstate Data

I tried running prepared statement insert into test (a) values (:?) and stmt.execute returned resultsetstate with value as Data. Now I cannot resuse this prepare statement because , when I call stmt.close_cursor() vertica complains "Invalid cursor state". So how can I reuse the prepared statement again. Why is the stmt.execute gives me ResultsetState of Data in place of NoData.

odbc v0.13.0 does not compile any more

Test project:

[package]
name = "odbc-test"
version = "0.1.0"
edition = "2018"

[dependencies]
odbc = "0.13.0"

Build fails but it was working before incompatible odbc-safe update:

$ cargo check
   Compiling odbc-sys v0.8.2
   Compiling odbc-sys v0.6.3
   Compiling log v0.4.8
    Checking cfg-if v0.1.10
    Checking odbc-safe v0.4.2
    Checking odbc v0.13.0
error[E0107]: wrong number of type arguments: expected 1, found 0
 --> /home/kazuya/.cargo/registry/src/github.com-1ecc6299db9ec823/odbc-0.13.0/src/connection.rs:7:11
  |
7 |     safe: safe::Connection<'env>,
  |           ^^^^^^^^^^^^^^^^^^^^^^ expected 1 type argument

error: aborting due to previous error

For more information about this error, try `rustc --explain E0107`.
error: could not compile `odbc`.

To learn more, run the command again with --verbose.
zsh: exit 101   cargo check

This breaks my crate odbc-iter that uses this particular version.
Is it possible for you to yank responsible crate so the project adheres to SemVer again, please?
Should odbc-safe version v0.4.2 be yanked and re-released as v0.5.0?

Otherwise I don't know how to fix my projects without updating to latest odbc version.

odbc-safe layer

I am open a GitHub issue since this is probably the best way to have a public design discussion. During the last month I have been busy revisiting some of the design decisions in odbc-rs and did some iterating in a separate repository without worrying to much about breaking interfaces and tests. I did this not with use cases in mind and convenience in mind, but wanted to stay very truthful to the original ODBC C interface. You can have a look at the result of this at odbc-safe. Referring our design discussion in issue #14 [odbc-safe] is currently a merge of layers 2 and 3.

My suggestion is to rewrite odbc-rs in Terms of [odbc-safe]. This should allow us:

  • To write odbc-rs entirely in safe Rust. Making contributions less dangerous and easier to review.
  • Provide users with uses cases which are not supported yet (i.e. #48 ), or are add odds with the design decisions made in odbc-rs a layer to fall back on, which is still safe Rust.

However, some breaking changes are likely to occur down this road. I've down little thinking on how exactly an idiomatic odbc library build on top of odbc-safe would look like, but I thought it is about time to discuss this with you and hear your general thoughts about the subject.

Can I use this to query .mdb files?

I'm using mdbtools right now to query Microsoft Access files on *nix, but I want a more elegant solution that can work also on Windows. Can this crate be used to query .mdb files?

How to get blob field data?

when i tried to get a blob data from oracle 11g, I ran into some problems. I googled it, but didn't have a solution. I need help.
My struct:

 struct Template {
    late_id: u32, 
    index_info: String,
    id: u32,
    lib: u8, 
    gender: u8,
    region: u16,
    year: u16,
    template: Vec<u8>,
 }

In the database, the template field corresponds to a blob filed。
Did i should get the blob field like this?if not, how can i get the blob field?

    let mut lib: Vec<Template> = Vec::new();
    while let Some(mut cursor) = stmt.fetch().unwrap() {
        lib.push(Template {
            template_id: cursor.get_data(1).unwrap().unwrap(),
            index_info: cursor.get_data(2).unwrap().unwrap(),
            id: cursor.get_data(4).unwrap().unwrap(),
            lib: cursor.get_data(5).unwrap().unwrap(),
            gender: cursor.get_data(6).unwrap().unwrap(),
            region: cursor.get_data(7).unwrap().unwrap(),
            year: cursor.get_data(9).unwrap().unwrap(),
            template: cursor.get_data(11).unwrap().unwrap(),// here, i couldn't compile it
        })
    }

can somebody help me? thank you!

Panic when Reading table from DB2 Driver

I'm hitting the following panic which I think relates to some DB2 related weirdness. I have a feeling it's returning no value for a column row.

Happy to submit a PR if someone can point me in the direction of where it possibly might be an issue:

thread 'tokio-runtime-worker-0' panicked at 'no more data but indicatior outside of data buffer', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/odbc-0.14.0/src/statement/output.rs:69:21

This relates to the following line:

assert!(start_pos + indicator as usize <= buffer.len(), "no more data but indicatior outside of data buffer");

How to Get Rows Updated when Running Insert Command

I am trying to insert a record in to table using select statement and I want to know how many records inserted. I am not able to get the results using cursor. Is there any other ways to get number of records affected in ODBC

Suggestion for structuring the API in layers

I think we would benefit from structuring the API in seperate layers with dedicated responsibilities:

  1. The first layer is the already in existence and encapsulated in the raw module. It contains FFI signatures of the C API calls.
  2. The second layer should only ensure the basic rust safety promises. No memory corruption, no data races. No layer above it should contain unsafe code.
  3. The third layer should try to enforce correct use of the ODBC API. This could be achieved by modelling state machines as types. This way we could prevent the user from reading a result set, before executing a query at compile time.
  4. In the fourth layer we enable convenience and writing of idiomatic rust code.

[5]. Potentially we could support a generic layer which uses to type information to provide ORM, but maybe that is there we pass the ball to crates like diesel

What do you think?

Code in Readme: wrong number of type arguments: expected 1, found 0

When attempting to compile the code in the Readme, I get the following error:

error[E0107]: wrong number of type arguments: expected 1, found 0
  --> src\main.rs:30:35
   |
30 | fn execute_statement<'env>(conn: &Connection<'env>) -> Result<()> {
   |                                   ^^^^^^^^^^^^^^^^ expected 1 type argument

I have added the following dependencies to the Cargo.toml file:

[dependencies]
odbc = "0.15.0"
log = "0.4.0"
env_logger = "0.7.1"

My main.rs is exactly the code in the Readme file.

Compiler version:

C:\dev\rust\playground
λ cargo --version
cargo 1.39.0 (1c6ec66d5 2019-09-30)

C:\dev\rust\playground
λ rustc --version
rustc 1.39.0 (4560ea788 2019-11-04)

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FromBytesWithNulError { kind: InteriorNul(113) }

I'm trying to connect to some weird database. It's called HFSQL. I'm able to connect to it with its 32 bit ODBC driver and MS Excel (32 bit). With Rust I'm trying with the 64 bit driver (I didn't test the driver with a 64 bit Excel yet).

I used the "WX230PACKODBC042u.exe" driver on the french https://www.pcsoft.fr/st/telec/modules-communs-23/wx23_42u.htm page.

odbc-rs bdc9294

nightly-x86_64-pc-windows-msvc (default)
rustc 1.29.0-nightly (1ecf6929d 2018-07-16)

    Finished dev [unoptimized + debuginfo] target(s) in 0.18s
     Running `target\debug\hfsql.exe`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FromBytesWithNulError { kind: InteriorNul(113) }
', libcore\result.rs:945:5
stack backtrace:
   0: std::sys::windows::backtrace::set_frames
             at C:\projects\rust\src\libstd\sys\windows\backtrace\mod.rs:104
   1: std::sys::windows::backtrace::set_frames
             at C:\projects\rust\src\libstd\sys\windows\backtrace\mod.rs:104
   2: std::sys_common::backtrace::_print
             at C:\projects\rust\src\libstd\sys_common\backtrace.rs:71
   3: std::sys_common::backtrace::_print
             at C:\projects\rust\src\libstd\sys_common\backtrace.rs:71
   4: std::panicking::default_hook::{{closure}}
             at C:\projects\rust\src\libstd\panicking.rs:211
   5: std::panicking::default_hook
             at C:\projects\rust\src\libstd\panicking.rs:227
   6: std::panicking::rust_panic_with_hook
             at C:\projects\rust\src\libstd\panicking.rs:475
   7: std::panicking::continue_panic_fmt
             at C:\projects\rust\src\libstd\panicking.rs:390
   8: std::panicking::rust_begin_panic
             at C:\projects\rust\src\libstd\panicking.rs:325
   9: core::panicking::panic_fmt
             at C:\projects\rust\src\libcore\panicking.rs:77
  10: core::result::unwrap_failed<std::ffi::c_str::FromBytesWithNulError>
             at C:\projects\rust\src\libcore\macros.rs:26
  11: core::result::Result<std::ffi::c_str::CStr*, std::ffi::c_str::FromBytesWithNulError>::unwrap<std::ffi::c_str::CStr
*,std::ffi::c_str::FromBytesWithNulError>
             at C:\projects\rust\src\libcore\result.rs:782
  12: odbc::diagnostics::{{impl}}::fmt
             at C:\Users\bbigras\.cargo\git\checkouts\odbc-rs-a3733d8f7dfc02a2\bdc9294\src\diagnostics.rs:41
  13: core::fmt::Formatter::run
             at C:\projects\rust\src\libcore\fmt\mod.rs:1103
  14: core::fmt::Formatter::run
             at C:\projects\rust\src\libcore\fmt\mod.rs:1103
  15: core::fmt::{{impl}}::fmt
             at C:\projects\rust\src\libcore\fmt\mod.rs:448
  16: core::fmt::{{impl}}::fmt
             at C:\projects\rust\src\libcore\fmt\mod.rs:448
  17: core::fmt::{{impl}}::fmt<core::fmt::Arguments>
             at C:\projects\rust\src\libcore\fmt\mod.rs:1849
  18: core::fmt::Formatter::run
             at C:\projects\rust\src\libcore\fmt\mod.rs:1103
  19: core::fmt::Formatter::run
             at C:\projects\rust\src\libcore\fmt\mod.rs:1103
  20: std::io::Write::write_fmt<env_logger::fmt::Formatter>
             at C:\projects\rust\src\libstd\io\mod.rs:1182
  21: env_logger::{{impl}}::into_boxed_fn::{{closure}}
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\env_logger-0.5.13\src\lib.rs:348
  22: env_logger::{{impl}}::log::{{closure}}
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\env_logger-0.5.13\src\lib.rs:849
  23: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<env_logger::fmt::Formatter>>>::try_with<core
::cell::RefCell<core::option::Option<env_logger::fmt::Formatter>>,closure,()>
             at C:\projects\rust\src\libstd\thread\local.rs:294
  24: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<env_logger::fmt::Formatter>>>::with<core::ce
ll::RefCell<core::option::Option<env_logger::fmt::Formatter>>,closure,()>
             at C:\projects\rust\src\libstd\thread\local.rs:248
  25: env_logger::{{impl}}::log
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\env_logger-0.5.13\src\lib.rs:820
  26: log::__private_api_log
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\log-0.4.4\src\lib.rs:1232
  27: odbc::result::into_result<odbc_safe::data_source::DataSource<odbc_safe::data_source::connected::Connected>,odbc_sa
fe::data_source::DataSource<odbc_safe::data_source::unconnected::Unconnected>>
             at C:\Users\bbigras\.cargo\git\checkouts\odbc-rs-a3733d8f7dfc02a2\bdc9294\src\result.rs:95
  28: odbc::environment::Environment<odbc_safe::version::Odbc3>::connect_with_connection_string
             at C:\Users\bbigras\.cargo\git\checkouts\odbc-rs-a3733d8f7dfc02a2\bdc9294\src\connection.rs:40
  29: hfsql::connect
             at .\src\main.rs:51
  30: hfsql::main
             at .\src\main.rs:21
  31: std::rt::lang_start::{{closure}}<()>
             at C:\projects\rust\src\libstd\rt.rs:74
  32: std::rt::lang_start_internal::{{closure}}
             at C:\projects\rust\src\libstd\rt.rs:59
  33: std::rt::lang_start_internal::{{closure}}
             at C:\projects\rust\src\libstd\rt.rs:59
  34: panic_unwind::__rust_maybe_catch_panic
             at C:\projects\rust\src\libpanic_unwind\lib.rs:106
  35: std::panicking::try
             at C:\projects\rust\src\libstd\panicking.rs:289
  36: std::panicking::try
             at C:\projects\rust\src\libstd\panicking.rs:289
  37: std::panicking::try
             at C:\projects\rust\src\libstd\panicking.rs:289
  38: std::rt::lang_start<()>
             at C:\projects\rust\src\libstd\rt.rs:74
  39: main
  40: invoke_main
             at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  41: invoke_main
             at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  42: BaseThreadInitThunk
  43: RtlUserThreadStart
error: process didn't exit successfully: `target\debug\hfsql.exe` (exit code: 101)

Cannot get all tables in database

I am trying to get list all tables from database with Statement::tables function. But when I am trying to fetch the data, the 'fetch' function always returns None(Cursor).

What I've tried:

  1. Modified 'connect' example to use tables function instead of exec_direct, can be found here
  • this example succeeds on 'tables' call, but always prints 'no cursor' later on in the code, so you cannot use the cursor to query rows
  1. Tracing the calls up to fetch function, this functions returned SQL_NO_DATA, when I requested tables.
  2. Tested this functionality in python with pyodbc library - this one worked, working example here

When checking out pyodbc source, I noticed they use SQLBindCol after calling SQLTables, which is not used in odbc-rs, could this be a problem?

I've tried this with multiple databases, first with MSSQL and SQLite3 on Windows and on Linux with SQLite3.
The SQLite3 odbc driver I used is this one

user extensible value decoding

The Output trait describes how a rust type can be derived from a query result value. However, it can only be implemented within the library itself.

This means, for example, that I can't query a datetime directly into a rust datetime value unless this library implements it. The postgres crate (https://github.com/sfackler/rust-postgres) does nice job with this, providing a trait that users can implement themselves (assuming they understand the postgres value encoding)

OSX Build Error, Unable to link with cc

I was trying to evaluate the ODBC crate for a connection to Snowflake. This is behind a corporate firewall, so I've modified the path in the error message to not report sensitive info.

`$ cargo run
Compiling v0.1.0 (/Users/<my_user>/)
error: linking with cc failed: exit code: 1
|
= note: "cc" "-m64" "-L" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.1qkl8d8wrzock9kb.rcgu.o" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.3matjfnoj00r44h0.rcgu.o" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.3ubgblp7dup27l4d.rcgu.o" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.4m8v4wwyq571naim.rcgu.o" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.5sji8ezxrldtah5.rcgu.o" "-o" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602" "/Users/<my_user>//target/debug/deps/-e6f4733065e2a602.5d0nec8rtamh45mt.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/<my_user>//target/debug/deps" "-L" "/Users/<my_user>//target/debug/build/backtrace-sys-a847bb58001c105f/out" "-L" "/Users/<my_user>//target/debug/build/brotli-sys-b7227223821e7c65/out" "-L" "/Users/<my_user>//target/debug/build/miniz-sys-004c205c1662ced2/out" "-L" "/Users/<my_user>/Downloads/ImageMagick-7.0.8/lib/" "-L" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib" "-L" "/Users/<my_user>//target/debug/deps" "-L" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib" "-L" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib" "-L" "/Users/<my_user>/lib" "-L" "/usr/local/lib" "-L" "/usr/lib" "-L" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users/<my_user>//target/debug/deps/libodbc-cfaeb7960856e69f.rlib" "/Users/<my_user>//target/debug/deps/libencoding_rs-2b35bc34cb8581ab.rlib" "/Users/<my_user>//target/debug/deps/libodbc_safe-9332b0a0585254e9.rlib" "/Users/<my_user>//target/debug/deps/libodbc_sys-93836ed7809c42ea.rlib" "/Users/<my_user>//target/debug/deps/liblog-e6341d4b68b4c0d2.rlib" "/Users/<my_user>//target/debug/deps/libcfg_if-a26a8e1aed04c8f0.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libstd-cd43daae2cf7ddf1.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-8db2c641f3653a71.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libhashbrown-028605a5a8e4ba77.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_alloc-d8c165584b999613.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libbacktrace-8ca59077c26b8378.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libbacktrace_sys-9e5cb6a845ac1bcb.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-428f6f0ce2c8cd70.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libunwind-5b4e5f1e334da9a7.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcfg_if-0c3a77eecc027943.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/liblibc-5ff1b410a39476d9.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/liballoc-bc9ef7c32fbaa74f.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-3ee6ce2ac9d08f55.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcore-9b01ec0dd7c68c5f.rlib" "/Users/<my_user>/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-dae0483206048e13.rlib" "-lodbc" "-lSystem" "-lresolv" "-lc" "-lm"
= note: ld: warning: directory not found for option '-L/Users/<my_user>/lib'
ld: library not found for -lodbc
clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: aborting due to previous error

error: could not compile .

To learn more, run the command again with --verbose.

Minimum repro main.rs

extern crate odbc;

fn main(){

}`

Minimum repro Cargo.toml

`[package]
name = ""
version = "0.1.0"
authors = [""]
edition = "2018"

[dependencies]
odbc = "0.14.0"`

OSX Version = 10.14.6
Rustc Version = rustc 1.40.0-nightly (1423bec54 2019-11-05)
(it's nightly because the rest of the project has deps that need nightly, but I'm able to reproduce the error in stable as well)
Cargo Version = cargo 1.40.0-nightly (5da4b4d47 2019-10-28)

get_data fetches garbage on linux

One "error" was that if I did a SELECT on one column, the data didn't seems to match the real data but it looked familiar (like if I had parts of the data or if the rows weren't spitted correctly).

I've been able to reproduce this behavior. Sadly it only occurs on Linux using unix_odbc. I do not get this locally on my windows machine. Luckily for now I did not require MS SQL to reproduce this SQLite is quite enough. Now I only have to fix it...

connect_with_connection_string borrows Environment preventing you from moving instances to a higher scope

Consider this code:

pub fn create_connection<'env>(config: &UpgradeConfig) ->Result<(Connection<'env>, Environment<Version3>)> {
    let conn_str = build_connection_string(&config);
    let env = create_environment_v3().map_err(|e| e.unwrap()).unwrap();
    let conn = env.connect_with_connection_string(&conn_str);
    (conn, env)
}

Because Connection is created within the scope of the method from a borrowed self, the original env reference is no longer valid, at least until conn is dropped. This means you can't move Connection out of that scope and can only go into inner scopes. This isn't necessarily ideal, as you can't even assign env/conn to struct fields.

I would suggest instead doing Connection::from_connection_string(&conn_str, &env). Env would only be borrowed for that scope of the method unless you borrow a field from Env for Conn.

docs

Do you intentionally publish the documentation yourself? If not you might safe some work by just linking to https://docs.rs/odbc

Panic if LANG env variable isn't set.

I'm seeing a panic using odbc if the LANG environment variable isn't set:

thread 'main' panicked at 'not yet implemented', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/odbc-0.14.0/src/statement/types.rs:176:31

This relates to the following portion of code:

    fn convert(buffer: &'a [u8]) -> Self {
        let cow = unsafe { ::environment::DB_ENCODING }.decode(buffer).0;
        match cow {
            Borrowed(strref) => strref,
            Owned(_string) => unimplemented!(),
        }
    }

If I set LANG=en_US.UTF-8 this doesn't appear to trigger the unimplemented branch. Happy to submit a PR to implement it, but I'm not exactly sure what needs to happen in this case.

SQLGetData has already returned the colmun data

I get this error while trying to read some non-utf8 data intro a Vec.

I'm not sure if I can provide a test case. I'm using a weird SQL server called hfsql.

I'm pretty sure I use the right indexes with get_data().

odbc 0.13.0

thread 'arbiter:3ce368fa-bd9e-4ec4-bef3-4d0227f66433:actix-net-worker-1' panicked at 'SQLGetData has already returned the colmun data', C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:100:33
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::windows::backtrace::set_frames
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys\windows\backtrace\mod.rs:95
   1: std::sys::windows::backtrace::unwind_backtrace
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys\windows\backtrace\mod.rs:82
   2: std::sys_common::backtrace::_print
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys_common\backtrace.rs:71
   3: std::sys_common::backtrace::print
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys_common\backtrace.rs:59
   4: std::panicking::default_hook::{{closure}}
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:197
   5: std::panicking::default_hook
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:211
   6: std::panicking::rust_panic_with_hook
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:474
   7: std::panicking::begin_panic<str*>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\panicking.rs:408
   8: odbc::raii::Raii<odbc_sys::Stmt>::get_partial_data<alloc::vec::Vec<u8>>
             at <::std::macros::panic macros>:3
   9: odbc::raii::Raii<odbc_sys::Stmt>::get_data<alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:36
  10: odbc::statement::output::{{impl}}::get_data<alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:23
  11: odbc::statement::Cursor<odbc::statement::Allocated>::get_data<odbc::statement::Allocated,alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\mod.rs:243
  12: something::handle_this
             at .\src\main.rs:1455
  13: core::ops::function::Fn::call<fn((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)) -> core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>))>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libcore\ops\function.rs:69
  14: actix_web::with::{{impl}}::create::{{closure}}<(actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>),something::AppState,fn((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)) -> core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:299
  15: actix_web::with::{{impl}}::call_with<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,closure>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:16
  16: actix_web::with::{{impl}}::poll<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:141
  17: actix_web::with::{{impl}}::poll<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:131
  18: actix_web::with::{{impl}}::handle<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:87
  19: actix_web::handler::{{impl}}::handle<something::AppState,actix_web::with::With<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)), something::AppState, core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>,actix_web::handler::AsyncResult<actix_web::httpresponse::HttpResponse, actix_web::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\handler.rs:449
  20: actix_web::route::InnerHandler<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\route.rs:321
  21: actix_web::route::Route<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\route.rs:53
  22: actix_web::resource::Resource<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\resource.rs:302
  23: actix_web::router::Router<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\router.rs:446
  24: actix_web::application::{{impl}}::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\application.rs:40
  25: actix_web::pipeline::StartMiddlewares<something::AppState, actix_web::application::Inner<something::AppState>>::init<something::AppState,actix_web::application::Inner<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\pipeline.rs:202
  26: actix_web::pipeline::Pipeline<something::AppState, actix_web::application::Inner<something::AppState>>::new<something::AppState,actix_web::application::Inner<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\pipeline.rs:95
  27: actix_web::application::{{impl}}::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\application.rs:87
  28: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::parse<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:497
  29: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll_io<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:348
  30: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll_handler<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:376
  31: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:223
  32: actix_web::server::channel::{{impl}}::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\channel.rs:105
  33: actix_web::server::channel::{{impl}}::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\channel.rs:155
  34: actix_net::service::map_err::{{impl}}::poll<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>,closure,()>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-net-0.2.6\src\service\map_err.rs:92
  35: actix_net::service::and_then::{{impl}}::poll<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>,actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-net-0.2.6\src\service\and_then.rs:94
  36: actix_web::server::acceptor::{{impl}}::poll<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\acceptor.rs:378
  37: futures::future::either::{{impl}}::poll<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>,futures::future::result_::FutureResult<(), ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\either.rs:35
  38: futures::future::either::{{impl}}::poll<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>,futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service
::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\either.rs:35
  39: futures::future::chain::Chain<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>, futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::And
Then<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>, futures::future::result_::FutureResult<(), ()>, closure>::poll<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(())
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\chain.rs:26
  40: futures::future::then::{{impl}}::poll<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>, futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_t
hen::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>,core::result::Result<(), ()>,closure>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\then.rs:32
  41: futures::future::{{impl}}::poll<Future>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\mod.rs:113
  42: futures::task_impl::{{impl}}::poll_future_notify::{{closure}}<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:329
  43: futures::task_impl::{{impl}}::enter::{{closure}}<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:399
  44: futures::task_impl::std::set<closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\std\mod.rs:78
  45: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::enter<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:399
  46: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_fn_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:291
  47: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_future_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:329
  48: tokio_current_thread::scheduler::Scheduled<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:351
  49: tokio_current_thread::scheduler::{{impl}}::tick::{{closure}}<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  50: tokio_current_thread::{{impl}}::enter::{{closure}}::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  51: tokio_current_thread::CurrentRunner::set_spawn<closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:825
  52: tokio_current_thread::{{impl}}::enter::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  53: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::try_with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  54: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  55: tokio_current_thread::Borrow<tokio_reactor::Handle>::enter<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:786
  56: tokio_current_thread::scheduler::Scheduler<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  57: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::tick<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:612
  58: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::block_on<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>,futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:502
  59: tokio::runtime::current_thread::runtime::{{impl}}::block_on::{{closure}}<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:200
  60: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:241
  61: tokio_executor::global::with_default::{{closure}}<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:209
  62: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::try_with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  63: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  64: tokio_executor::global::with_default<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:178
  65: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:239
  66: tokio_timer::timer::handle::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:94
  67: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  68: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  69: tokio_timer::timer::handle::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:81
  70: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:232
  71: tokio_timer::clock::clock::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:141
  72: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::try_with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  73: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  74: tokio_timer::clock::clock::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:124
  75: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:231
  76: tokio_reactor::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:237
  77: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  78: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  79: tokio_reactor::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:217
  80: tokio::runtime::current_thread::runtime::Runtime::enter<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:230
  81: tokio::runtime::current_thread::runtime::Runtime::block_on<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:198
  82: actix::arbiter::{{impl}}::new_with_builder::{{closure}}
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\arbiter.rs:116
thread 'arbiter:106f246b-fa00-4f11-8991-5ab53d57d30d:actix-net-worker-0' panicked at 'SQLGetData has already returned the colmun data', C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:100:33
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::windows::backtrace::set_frames
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys\windows\backtrace\mod.rs:95
   1: std::sys::windows::backtrace::unwind_backtrace
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys\windows\backtrace\mod.rs:82
   2: std::sys_common::backtrace::_print
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys_common\backtrace.rs:71
   3: std::sys_common::backtrace::print
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\sys_common\backtrace.rs:59
   4: std::panicking::default_hook::{{closure}}
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:197
   5: std::panicking::default_hook
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:211
   6: std::panicking::rust_panic_with_hook
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\/src\libstd\panicking.rs:474
   7: std::panicking::begin_panic<str*>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\panicking.rs:408
   8: odbc::raii::Raii<odbc_sys::Stmt>::get_partial_data<alloc::vec::Vec<u8>>
             at <::std::macros::panic macros>:3
   9: odbc::raii::Raii<odbc_sys::Stmt>::get_data<alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:36
  10: odbc::statement::output::{{impl}}::get_data<alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\output.rs:23
  11: odbc::statement::Cursor<odbc::statement::Allocated>::get_data<odbc::statement::Allocated,alloc::vec::Vec<u8>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\odbc-0.13.0\src\statement\mod.rs:243
  12: something::handle_this
             at .\src\main.rs:1455
  13: core::ops::function::Fn::call<fn((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)) -> core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>))>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libcore\ops\function.rs:69
  14: actix_web::with::{{impl}}::create::{{closure}}<(actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>),something::AppState,fn((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)) -> core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:299
  15: actix_web::with::{{impl}}::call_with<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>,closure>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:16
  16: actix_web::with::{{impl}}::poll<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:141
  17: actix_web::with::{{impl}}::poll<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:131
  18: actix_web::with::{{impl}}::handle<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)),something::AppState,core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\with.rs:87
  19: actix_web::handler::{{impl}}::handle<something::AppState,actix_web::with::With<((actix_web::httprequest::HttpRequest<something::AppState>, actix_web::extractor::Query<something::CamionsReq2>)), something::AppState, core::result::Result<actix_web::httpresponse::HttpResponse, failure::error::Error>>,actix_web::handler::AsyncResult<actix_web::httpresponse::HttpResponse, actix_web::error::Error>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\handler.rs:449
  20: actix_web::route::InnerHandler<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\route.rs:321
  21: actix_web::route::Route<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\route.rs:53
  22: actix_web::resource::Resource<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\resource.rs:302
  23: actix_web::router::Router<something::AppState>::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\router.rs:446
  24: actix_web::application::{{impl}}::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\application.rs:40
  25: actix_web::pipeline::StartMiddlewares<something::AppState, actix_web::application::Inner<something::AppState>>::init<something::AppState,actix_web::application::Inner<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\pipeline.rs:202
  26: actix_web::pipeline::Pipeline<something::AppState, actix_web::application::Inner<something::AppState>>::new<something::AppState,actix_web::application::Inner<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\pipeline.rs:95
  27: actix_web::application::{{impl}}::handle<something::AppState>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\application.rs:87
  28: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::parse<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:497
  29: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll_io<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:348
  30: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll_handler<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:376
  31: actix_web::server::h1::Http1Dispatcher<tokio_tcp::stream::TcpStream, actix_web::application::HttpApplication<something::AppState>>::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\h1.rs:223
  32: actix_web::server::channel::{{impl}}::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\channel.rs:105
  33: actix_web::server::channel::{{impl}}::poll<tokio_tcp::stream::TcpStream,actix_web::application::HttpApplication<something::AppState>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\channel.rs:155
  34: actix_net::service::map_err::{{impl}}::poll<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>,closure,()>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-net-0.2.6\src\service\map_err.rs:92
  35: actix_net::service::and_then::{{impl}}::poll<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>,actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-net-0.2.6\src\service\and_then.rs:94
  36: actix_web::server::acceptor::{{impl}}::poll<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.19\src\server\acceptor.rs:378
  37: futures::future::either::{{impl}}::poll<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>,futures::future::result_::FutureResult<(), ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\either.rs:35
  38: futures::future::either::{{impl}}::poll<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>,futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service
::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\either.rs:35
  39: futures::future::chain::Chain<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>, futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::And
Then<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>, futures::future::result_::FutureResult<(), ()>, closure>::poll<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(())
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\chain.rs:26
  40: futures::future::then::{{impl}}::poll<futures::future::either::Either<futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_then::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_net::service::map_err::MapErr<actix_web::server::acceptor::DefaultAcceptor, fn(()) -> actix_web::server::error::AcceptorError<()>, actix_web::server::error::AcceptorError<()>>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>, futures::future::either::Either<actix_web::server::acceptor::ServerMessageAcceptorServiceFut<actix_net::service::and_then::AndThen<actix_net::service::and_t
hen::AndThen<actix_net::service::map_err::MapErr<actix_web::server::acceptor::TcpAcceptorService<actix_web::server::acceptor::AcceptorTimeoutService<actix_web::server::acceptor::DefaultAcceptor>>, closure, ()>, actix_web::server::service::StreamConfigurationService<tokio_tcp::stream::TcpStream, ()>>, actix_net::service::map_err::MapErr<actix_web::server::service::HttpServiceHandler<actix_web::application::HttpApplication<something::AppState>, tokio_tcp::stream::TcpStream>, closure, ()>>>, futures::future::result_::FutureResult<(), ()>>>,core::result::Result<(), ()>,closure>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\then.rs:32
  41: futures::future::{{impl}}::poll<Future>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\future\mod.rs:113
  42: futures::task_impl::{{impl}}::poll_future_notify::{{closure}}<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:329
  43: futures::task_impl::{{impl}}::enter::{{closure}}<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:399
  44: futures::task_impl::std::set<closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\std\mod.rs:78
  45: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::enter<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:399
  46: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_fn_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:291
  47: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_future_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.26\src\task_impl\mod.rs:329
  48: tokio_current_thread::scheduler::Scheduled<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:351
  49: tokio_current_thread::scheduler::{{impl}}::tick::{{closure}}<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  50: tokio_current_thread::{{impl}}::enter::{{closure}}::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  51: tokio_current_thread::CurrentRunner::set_spawn<closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:825
  52: tokio_current_thread::{{impl}}::enter::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  53: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::try_with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  54: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  55: tokio_current_thread::Borrow<tokio_reactor::Handle>::enter<tokio_reactor::Handle,closure,bool>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:786
  56: tokio_current_thread::scheduler::Scheduler<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  57: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::tick<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:612
  58: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::block_on<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>,futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:502
  59: tokio::runtime::current_thread::runtime::{{impl}}::block_on::{{closure}}<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:200
  60: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:241
  61: tokio_executor::global::with_default::{{closure}}<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:209
  62: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::try_with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  63: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  64: tokio_executor::global::with_default<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:178
  65: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:239
  66: tokio_timer::timer::handle::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:94
  67: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  68: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  69: tokio_timer::timer::handle::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:81
  70: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:232
  71: tokio_timer::clock::clock::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:141
  72: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::try_with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  73: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  74: tokio_timer::clock::clock::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:124
  75: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:231
  76: tokio_reactor::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:237
  77: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:299
  78: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/94fd0458951a4ff91c03366445f0e2e93b86bd2f\src\libstd\thread\local.rs:245
  79: tokio_reactor::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:217
  80: tokio::runtime::current_thread::runtime::Runtime::enter<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:230
  81: tokio::runtime::current_thread::runtime::Runtime::block_on<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.19\src\runtime\current_thread\runtime.rs:198
  82: actix::arbiter::{{impl}}::new_with_builder::{{closure}}
             at C:\Users\bbigras\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\arbiter.rs:116
[2019-06-26T19:07:00Z INFO  actix_net::server::server] SIGINT received, exiting

Fix coveralls reporting

Coveralls reports bad data for now. It's somehow related to travis build matrix I think. Will fix it later

0.15 release broke 0.14

Hi,
please be aware that 0.15 release broke 0.14 version:


   Compiling odbc v0.14.0
error[E0107]: wrong number of type arguments: expected 1, found 0
 --> /home/vsts/.cargo/registry/src/github.com-1ecc6299db9ec823/odbc-0.14.0/src/connection.rs:7:11
  |
7 |     safe: safe::Connection<'env>,
  |           ^^^^^^^^^^^^^^^^^^^^^^ expected 1 type argument

Possible UB can be caused by resize of param_ind_buffers

self.param_ind_buffers.resize(new_size, 0);

If I am not mistaken this resize call may deallocate and allocate new memory invalidating pointers passed to ffi::SQLBindParameter. Pointers passed to this functions must be valid until SQLExecute is called.

Note that I did not trigger any crash yet with this so I may be wrong here.

See this discussion:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a5e8b15e-c47e-479e-8bde-d6e493eea977/how-to-insert-a-null-in-a-sqltypetimestamp-column-?forum=sqldataaccess

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.