From 62941143b6e27b82af4f5d41f821f83a90e7d2a0 Mon Sep 17 00:00:00 2001 From: Ken Collins Date: Sun, 27 Nov 2016 18:30:10 -0500 Subject: [PATCH 1/4] Add DB col type `98` for int for `LOGINPROPERTY` function. --- ext/tiny_tds/result.c | 1 + test/result_test.rb | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/ext/tiny_tds/result.c b/ext/tiny_tds/result.c index 6cf1c9de..829798b1 100644 --- a/ext/tiny_tds/result.c +++ b/ext/tiny_tds/result.c @@ -216,6 +216,7 @@ static VALUE rb_tinytds_result_fetch_row(VALUE self, ID timezone, int symbolize_ val = INT2NUM(*(DBINT *)data); break; case SYBINT8: + case 98: // https://git.io/v1ItA val = LL2NUM(*(DBBIGINT *)data); break; case SYBBIT: diff --git a/test/result_test.rb b/test/result_test.rb index cfb16f77..533e1ec4 100644 --- a/test/result_test.rb +++ b/test/result_test.rb @@ -335,6 +335,11 @@ class ResultTest < TinyTds::TestCase assert_nil result.return_code end + it 'with LOGINPROPERTY function' do + v = @client.execute("SELECT LOGINPROPERTY('sa', 'IsLocked') as v").first['v'] + v.must_equal 0 + end + describe 'with multiple result sets' do before do From 9795cd045de7e866fc57836f59d13d95d2094cd3 Mon Sep 17 00:00:00 2001 From: Ken Collins Date: Sun, 27 Nov 2016 19:55:17 -0500 Subject: [PATCH 2/4] Assume `LOGINPROPERTY` returns 4byte integer. --- ext/tiny_tds/result.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/tiny_tds/result.c b/ext/tiny_tds/result.c index 829798b1..6b9cace7 100644 --- a/ext/tiny_tds/result.c +++ b/ext/tiny_tds/result.c @@ -213,10 +213,10 @@ static VALUE rb_tinytds_result_fetch_row(VALUE self, ID timezone, int symbolize_ val = INT2FIX(*(DBSMALLINT *)data); break; case SYBINT4: + case 98: // https://git.io/v1ItA val = INT2NUM(*(DBINT *)data); break; case SYBINT8: - case 98: // https://git.io/v1ItA val = LL2NUM(*(DBBIGINT *)data); break; case SYBBIT: From 04c5edcd2f90ec448c1ff2cb92a4c26daf809afa Mon Sep 17 00:00:00 2001 From: Ken Collins Date: Mon, 28 Nov 2016 19:26:30 -0500 Subject: [PATCH 3/4] Move SYBVARIANT to bottom of rb_tinytds_result_fetch_row. --- ext/tiny_tds/result.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ext/tiny_tds/result.c b/ext/tiny_tds/result.c index 6b9cace7..db06f89c 100644 --- a/ext/tiny_tds/result.c +++ b/ext/tiny_tds/result.c @@ -213,7 +213,6 @@ static VALUE rb_tinytds_result_fetch_row(VALUE self, ID timezone, int symbolize_ val = INT2FIX(*(DBSMALLINT *)data); break; case SYBINT4: - case 98: // https://git.io/v1ItA val = INT2NUM(*(DBINT *)data); break; case SYBINT8: @@ -326,6 +325,15 @@ static VALUE rb_tinytds_result_fetch_row(VALUE self, ID timezone, int symbolize_ case SYBTEXT: val = ENCODED_STR_NEW(data, data_len); break; + case 98: { // SYBVARIANT + if (data_len == 4) { + val = INT2NUM(*(DBINT *)data); + break; + } else { + val = ENCODED_STR_NEW(data, data_len); + break; + } + } default: val = ENCODED_STR_NEW(data, data_len); break; From 1599ca912a606e77e8102fa5e10c6683c37e8e0f Mon Sep 17 00:00:00 2001 From: Ken Collins Date: Sun, 11 Dec 2016 17:40:51 -0500 Subject: [PATCH 4/4] Update CHANGELOG. --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index f85d5c9a..ba736a1e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ * 1.0.6 * +* Handle SYBVARIANT types from SQL function. Fixes #317. Fixed #321. * Fix `use_utf16` optoin for booleans. Fixes #314 * Add `-q` check for bin puts. Fixes #318 * Use FreeTDS 1.00.21.