mssql 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,71 @@
1
+ class TableOutput
2
+
3
+ def initialize(cols, rows)
4
+ @cols = cols
5
+ @rows = rows
6
+ calc_sizes
7
+ @ascii_encoding = Encoding.find("ASCII-8BIT")
8
+ end
9
+
10
+ def calc_sizes
11
+ @sizes = []
12
+ @align = []
13
+ @cols.each_with_index do |col, index|
14
+ @sizes[index] = col.to_s.length
15
+ @align[index] = '-'
16
+
17
+ end
18
+ @rows.each do |row|
19
+ row.each_with_index do |value, index|
20
+ row[index] = value = format_value(value, index)
21
+ size = value.length
22
+ if @sizes[index] < size
23
+ @sizes[index] = size
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ #FIXME - hard coded formating for floats and times
30
+ def format_value(value, index)
31
+ if value.class == String && value.encoding.to_s == "ASCII-8BIT" #timestamps and binary data
32
+ a = value.unpack("C" * value.size)
33
+ value = "%x"*a.size % a
34
+ elsif value.class == Float || value.class == BigDecimal
35
+ value = "%.4f" % [value]
36
+ @align[index] = "+"
37
+ elsif value.class == BigDecimal
38
+ value = value.to_s('F')
39
+ @align[index] = "+"
40
+ elsif value.class == Fixnum
41
+ @align[index] = "+"
42
+ elsif value.class == Time
43
+ value = value.
44
+ strftime("%F %T").
45
+ gsub(" 00:00:00", "")
46
+ @align[index] = "+"
47
+ end
48
+ #print "#{@cols[index]}\t#{value.class}\t#{value.to_s}\n"
49
+ value.to_s
50
+ end
51
+
52
+ def to_s
53
+ format = @sizes.each_with_index.map{|s, i| " %#{@align[i]}#{s}s "}.join("|")
54
+ output = []
55
+
56
+ separator = @sizes.map{|s| "-" * (s+2)}.join("+")
57
+ separator = "+#{separator}+"
58
+ output << ""
59
+ output << separator
60
+ output << "|#{format}|" % @cols
61
+ output << separator
62
+ @rows.each do |row|
63
+ output << "|#{format}|" % row
64
+ end
65
+ output << separator
66
+ output << "#{@rows.size} rows affected"
67
+ output << ""
68
+ output.join("\n")
69
+ end
70
+
71
+ end
@@ -0,0 +1,3 @@
1
+ module Mssql
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Igor Anic"]
6
+ gem.email = ["ianic@minus5.hr"]
7
+ gem.description = "mssql server command line tool"
8
+ gem.summary = "Command line tool for connecting to Microsoft Sql Server from Mac or Linux."
9
+ gem.homepage = "http://www.minus5.hr"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "mssql"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Mssql::VERSION
17
+
18
+ gem.add_dependency('tiny_tds' , '~> 0.5.0')
19
+ gem.add_dependency('hashie' , '~> 1.0.0')
20
+ gem.add_dependency('activesupport' , '~> 3.1.1')
21
+ end
@@ -0,0 +1,29 @@
1
+
2
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
3
+ | au_id | au_lname | au_fname | phone | address | city | state | zip | contract |
4
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
5
+ | 172-32-1176 | White | Johnson | 408 496-7223 | 10932 Bigge Rd. | Menlo Park | CA | 94025 | true |
6
+ | 213-46-8915 | Green | Marjorie | 415 986-7020 | 309 63rd St. #411 | Oakland | CA | 94618 | true |
7
+ | 238-95-7766 | Carson | Cheryl | 415 548-7723 | 589 Darwin Ln. | Berkeley | CA | 94705 | true |
8
+ | 267-41-2394 | O'Leary | Michael | 408 286-2428 | 22 Cleveland Av. #14 | San Jose | CA | 95128 | true |
9
+ | 274-80-9391 | Straight | Dean | 415 834-2919 | 5420 College Av. | Oakland | CA | 94609 | true |
10
+ | 341-22-1782 | Smith | Meander | 913 843-0462 | 10 Mississippi Dr. | Lawrence | KS | 66044 | false |
11
+ | 409-56-7008 | Bennet | Abraham | 415 658-9932 | 6223 Bateman St. | Berkeley | CA | 94705 | true |
12
+ | 427-17-2319 | Dull | Ann | 415 836-7128 | 3410 Blonde St. | Palo Alto | CA | 94301 | true |
13
+ | 472-27-2349 | Gringlesby | Burt | 707 938-6445 | PO Box 792 | Covelo | CA | 95428 | true |
14
+ | 486-29-1786 | Locksley | Charlene | 415 585-4620 | 18 Broadway Av. | San Francisco | CA | 94130 | true |
15
+ | 527-72-3246 | Greene | Morningstar | 615 297-2723 | 22 Graybar House Rd. | Nashville | TN | 37215 | false |
16
+ | 648-92-1872 | Blotchet-Halls | Reginald | 503 745-6402 | 55 Hillsdale Bl. | Corvallis | OR | 97330 | true |
17
+ | 672-71-3249 | Yokomoto | Akiko | 415 935-4228 | 3 Silver Ct. | Walnut Creek | CA | 94595 | true |
18
+ | 712-45-1867 | del Castillo | Innes | 615 996-8275 | 2286 Cram Pl. #86 | Ann Arbor | MI | 48105 | true |
19
+ | 722-51-5454 | DeFrance | Michel | 219 547-9982 | 3 Balding Pl. | Gary | IN | 46403 | true |
20
+ | 724-08-9931 | Stringer | Dirk | 415 843-2991 | 5420 Telegraph Av. | Oakland | CA | 94609 | false |
21
+ | 724-80-9391 | MacFeather | Stearns | 415 354-7128 | 44 Upland Hts. | Oakland | CA | 94612 | true |
22
+ | 756-30-7391 | Karsen | Livia | 415 534-9219 | 5720 McAuley St. | Oakland | CA | 94609 | true |
23
+ | 807-91-6654 | Panteley | Sylvia | 301 946-8853 | 1956 Arlington Pl. | Rockville | MD | 20853 | true |
24
+ | 846-92-7186 | Hunter | Sheryl | 415 836-7128 | 3410 Blonde St. | Palo Alto | CA | 94301 | true |
25
+ | 893-72-1158 | McBadden | Heather | 707 448-4982 | 301 Putnam | Vacaville | CA | 95688 | false |
26
+ | 899-46-2035 | Ringer | Anne | 801 826-0752 | 67 Seventh Av. | Salt Lake City | UT | 84152 | true |
27
+ | 998-72-3567 | Ringer | Albert | 801 826-0752 | 67 Seventh Av. | Salt Lake City | UT | 84152 | true |
28
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
29
+ 23 rows affected
@@ -0,0 +1,29 @@
1
+
2
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
3
+ | au_id | au_lname | au_fname | phone | address | city | state | zip | contract |
4
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
5
+ | 172-32-1176 | White | Johnson | 408 496-7223 | 10932 Bigge Rd. | Menlo Park | CA | 94025 | true |
6
+ | 213-46-8915 | Green | Marjorie | 415 986-7020 | 309 63rd St. #411 | Oakland | CA | 94618 | true |
7
+ | 238-95-7766 | Carson | Cheryl | 415 548-7723 | 589 Darwin Ln. | Berkeley | CA | 94705 | true |
8
+ | 267-41-2394 | O'Leary | Michael | 408 286-2428 | 22 Cleveland Av. #14 | San Jose | CA | 95128 | true |
9
+ | 274-80-9391 | Straight | Dean | 415 834-2919 | 5420 College Av. | Oakland | CA | 94609 | true |
10
+ | 341-22-1782 | Smith | Meander | 913 843-0462 | 10 Mississippi Dr. | Lawrence | KS | 66044 | false |
11
+ | 409-56-7008 | Bennet | Abraham | 415 658-9932 | 6223 Bateman St. | Berkeley | CA | 94705 | true |
12
+ | 427-17-2319 | Dull | Ann | 415 836-7128 | 3410 Blonde St. | Palo Alto | CA | 94301 | true |
13
+ | 472-27-2349 | Gringlesby | Burt | 707 938-6445 | PO Box 792 | Covelo | CA | 95428 | true |
14
+ | 486-29-1786 | Locksley | Charlene | 415 585-4620 | 18 Broadway Av. | San Francisco | CA | 94130 | true |
15
+ | 527-72-3246 | Greene | Morningstar | 615 297-2723 | 22 Graybar House Rd. | Nashville | TN | 37215 | false |
16
+ | 648-92-1872 | Blotchet-Halls | Reginald | 503 745-6402 | 55 Hillsdale Bl. | Corvallis | OR | 97330 | true |
17
+ | 672-71-3249 | Yokomoto | Akiko | 415 935-4228 | 3 Silver Ct. | Walnut Creek | CA | 94595 | true |
18
+ | 712-45-1867 | del Castillo | Innes | 615 996-8275 | 2286 Cram Pl. #86 | Ann Arbor | MI | 48105 | true |
19
+ | 722-51-5454 | DeFrance | Michel | 219 547-9982 | 3 Balding Pl. | Gary | IN | 46403 | true |
20
+ | 724-08-9931 | Stringer | Dirk | 415 843-2991 | 5420 Telegraph Av. | Oakland | CA | 94609 | false |
21
+ | 724-80-9391 | MacFeather | Stearns | 415 354-7128 | 44 Upland Hts. | Oakland | CA | 94612 | true |
22
+ | 756-30-7391 | Karsen | Livia | 415 534-9219 | 5720 McAuley St. | Oakland | CA | 94609 | true |
23
+ | 807-91-6654 | Panteley | Sylvia | 301 946-8853 | 1956 Arlington Pl. | Rockville | MD | 20853 | true |
24
+ | 846-92-7186 | Hunter | Sheryl | 415 836-7128 | 3410 Blonde St. | Palo Alto | CA | 94301 | true |
25
+ | 893-72-1158 | McBadden | Heather | 707 448-4982 | 301 Putnam | Vacaville | CA | 95688 | false |
26
+ | 899-46-2035 | Ringer | Anne | 801 826-0752 | 67 Seventh Av. | Salt Lake City | UT | 84152 | true |
27
+ | 998-72-3567 | Ringer | Albert | 801 826-0752 | 67 Seventh Av. | Salt Lake City | UT | 84152 | true |
28
+ +-------------+----------------+-------------+--------------+----------------------+----------------+-------+-------+----------+
29
+ 23 rows affected
@@ -0,0 +1 @@
1
+ select * from authors
@@ -0,0 +1 @@
1
+ 2 rows affected
@@ -0,0 +1 @@
1
+ 2 rows affected
@@ -0,0 +1 @@
1
+ update authors set state = state where state = 'UT'
@@ -0,0 +1,74 @@
1
+
2
+ +---------+-------+------------+---------------------+
3
+ | Name | Owner | Type | Created_datetime |
4
+ +---------+-------+------------+---------------------+
5
+ | authors | dbo | user table | 2009-12-12 17:32:23 |
6
+ +---------+-------+------------+---------------------+
7
+ 1 rows affected
8
+
9
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
10
+ | Column_name | Type | Computed | Length | Prec | Scale | Nullable | TrimTrailingBlanks | FixedLenNullInSource | Collation |
11
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
12
+ | au_id | id | no | 11 | | | no | no | no | Croatian_CI_AS |
13
+ | au_lname | varchar | no | 40 | | | no | no | no | Croatian_CI_AS |
14
+ | au_fname | varchar | no | 20 | | | no | no | no | Croatian_CI_AS |
15
+ | phone | char | no | 12 | | | no | no | no | Croatian_CI_AS |
16
+ | address | varchar | no | 40 | | | yes | no | yes | Croatian_CI_AS |
17
+ | city | varchar | no | 20 | | | yes | no | yes | Croatian_CI_AS |
18
+ | state | char | no | 2 | | | yes | no | yes | Croatian_CI_AS |
19
+ | zip | char | no | 5 | | | yes | no | yes | Croatian_CI_AS |
20
+ | contract | bit | no | 1 | | | no | (n/a) | (n/a) | |
21
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
22
+ 9 rows affected
23
+
24
+ +-----------------------------+------+-----------+---------------------+
25
+ | Identity | Seed | Increment | Not For Replication |
26
+ +-----------------------------+------+-----------+---------------------+
27
+ | No identity column defined. | | | |
28
+ +-----------------------------+------+-----------+---------------------+
29
+ 1 rows affected
30
+
31
+ +-------------------------------+
32
+ | RowGuidCol |
33
+ +-------------------------------+
34
+ | No rowguidcol column defined. |
35
+ +-------------------------------+
36
+ 1 rows affected
37
+
38
+ +---------------------------+
39
+ | Data_located_on_filegroup |
40
+ +---------------------------+
41
+ | PRIMARY |
42
+ +---------------------------+
43
+ 1 rows affected
44
+
45
+ +---------------+---------------------------------------------------+--------------------+
46
+ | index_name | index_description | index_keys |
47
+ +---------------+---------------------------------------------------+--------------------+
48
+ | aunmind | nonclustered located on PRIMARY | au_lname, au_fname |
49
+ | UPKCL_auidind | clustered, unique, primary key located on PRIMARY | au_id |
50
+ +---------------+---------------------------------------------------+--------------------+
51
+ 2 rows affected
52
+
53
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
54
+ | constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys |
55
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
56
+ | CHECK on column au_id | CK__authors__au_id__7D78A4E7 | (n/a) | (n/a) | Enabled | Is_For_Replication | ([au_id] like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]') |
57
+ | CHECK on column zip | CK__authors__zip__7F60ED59 | (n/a) | (n/a) | Enabled | Is_For_Replication | ([zip] like '[0-9][0-9][0-9][0-9][0-9]') |
58
+ | DEFAULT on column phone | DF__authors__phone__7E6CC920 | (n/a) | (n/a) | (n/a) | (n/a) | ('UNKNOWN') |
59
+ | PRIMARY KEY (clustered) | UPKCL_auidind | (n/a) | (n/a) | (n/a) | (n/a) | au_id |
60
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
61
+ 4 rows affected
62
+
63
+ +------------------------------------------------------+
64
+ | Table is referenced by foreign key |
65
+ +------------------------------------------------------+
66
+ | pubs.dbo.titleauthor: FK__titleauth__au_id__0AD2A005 |
67
+ +------------------------------------------------------+
68
+ 1 rows affected
69
+
70
+ +------------------------------+
71
+ | Table is referenced by views |
72
+ +------------------------------+
73
+ +------------------------------+
74
+ 0 rows affected
@@ -0,0 +1,74 @@
1
+
2
+ +---------+-------+------------+---------------------+
3
+ | Name | Owner | Type | Created_datetime |
4
+ +---------+-------+------------+---------------------+
5
+ | authors | dbo | user table | 2009-12-12 17:32:23 |
6
+ +---------+-------+------------+---------------------+
7
+ 1 rows affected
8
+
9
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
10
+ | Column_name | Type | Computed | Length | Prec | Scale | Nullable | TrimTrailingBlanks | FixedLenNullInSource | Collation |
11
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
12
+ | au_id | id | no | 11 | | | no | no | no | Croatian_CI_AS |
13
+ | au_lname | varchar | no | 40 | | | no | no | no | Croatian_CI_AS |
14
+ | au_fname | varchar | no | 20 | | | no | no | no | Croatian_CI_AS |
15
+ | phone | char | no | 12 | | | no | no | no | Croatian_CI_AS |
16
+ | address | varchar | no | 40 | | | yes | no | yes | Croatian_CI_AS |
17
+ | city | varchar | no | 20 | | | yes | no | yes | Croatian_CI_AS |
18
+ | state | char | no | 2 | | | yes | no | yes | Croatian_CI_AS |
19
+ | zip | char | no | 5 | | | yes | no | yes | Croatian_CI_AS |
20
+ | contract | bit | no | 1 | | | no | (n/a) | (n/a) | |
21
+ +-------------+---------+----------+--------+-------+-------+----------+--------------------+----------------------+----------------+
22
+ 9 rows affected
23
+
24
+ +-----------------------------+------+-----------+---------------------+
25
+ | Identity | Seed | Increment | Not For Replication |
26
+ +-----------------------------+------+-----------+---------------------+
27
+ | No identity column defined. | | | |
28
+ +-----------------------------+------+-----------+---------------------+
29
+ 1 rows affected
30
+
31
+ +-------------------------------+
32
+ | RowGuidCol |
33
+ +-------------------------------+
34
+ | No rowguidcol column defined. |
35
+ +-------------------------------+
36
+ 1 rows affected
37
+
38
+ +---------------------------+
39
+ | Data_located_on_filegroup |
40
+ +---------------------------+
41
+ | PRIMARY |
42
+ +---------------------------+
43
+ 1 rows affected
44
+
45
+ +---------------+---------------------------------------------------+--------------------+
46
+ | index_name | index_description | index_keys |
47
+ +---------------+---------------------------------------------------+--------------------+
48
+ | aunmind | nonclustered located on PRIMARY | au_lname, au_fname |
49
+ | UPKCL_auidind | clustered, unique, primary key located on PRIMARY | au_id |
50
+ +---------------+---------------------------------------------------+--------------------+
51
+ 2 rows affected
52
+
53
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
54
+ | constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys |
55
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
56
+ | CHECK on column au_id | CK__authors__au_id__7D78A4E7 | (n/a) | (n/a) | Enabled | Is_For_Replication | ([au_id] like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]') |
57
+ | CHECK on column zip | CK__authors__zip__7F60ED59 | (n/a) | (n/a) | Enabled | Is_For_Replication | ([zip] like '[0-9][0-9][0-9][0-9][0-9]') |
58
+ | DEFAULT on column phone | DF__authors__phone__7E6CC920 | (n/a) | (n/a) | (n/a) | (n/a) | ('UNKNOWN') |
59
+ | PRIMARY KEY (clustered) | UPKCL_auidind | (n/a) | (n/a) | (n/a) | (n/a) | au_id |
60
+ +-------------------------+------------------------------+---------------+---------------+----------------+------------------------+------------------------------------------------------------------+
61
+ 4 rows affected
62
+
63
+ +------------------------------------------------------+
64
+ | Table is referenced by foreign key |
65
+ +------------------------------------------------------+
66
+ | pubs.dbo.titleauthor: FK__titleauth__au_id__0AD2A005 |
67
+ +------------------------------------------------------+
68
+ 1 rows affected
69
+
70
+ +------------------------------+
71
+ | Table is referenced by views |
72
+ +------------------------------+
73
+ +------------------------------+
74
+ 0 rows affected
@@ -0,0 +1 @@
1
+ sp_help authors
@@ -0,0 +1,25 @@
1
+ $: << File.join(File.dirname(__FILE__))
2
+ require 'test_helper'
3
+
4
+ class TestCommandParser < MiniTest::Unit::TestCase
5
+
6
+ def test_find
7
+ cp = CommandParser.new(' .find nesto')
8
+ assert_equal :find, cp.command
9
+ assert_equal ["nesto"], cp.params
10
+ end
11
+
12
+ def test_explain
13
+ cp = CommandParser.new(' .explain dbo.authors')
14
+ assert_equal :explain, cp.command
15
+ assert_equal ["dbo", "authors"], cp.params
16
+ end
17
+
18
+ def test_use
19
+ cp = CommandParser.new(' .use connection2')
20
+ assert_equal :use, cp.command
21
+ assert_equal ["connection2"], cp.params
22
+ end
23
+
24
+
25
+ end
@@ -0,0 +1,103 @@
1
+ require 'test_helper'
2
+
3
+ class TestConnection < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ @authors_first_row = ["172-32-1176",
7
+ "White",
8
+ "Johnson",
9
+ "408 496-7223",
10
+ "10932 Bigge Rd.",
11
+ "Menlo Park",
12
+ "CA",
13
+ "94025",
14
+ true]
15
+ @authors_columns = [:au_id,
16
+ :au_lname,
17
+ :au_fname,
18
+ :phone,
19
+ :address,
20
+ :city,
21
+ :state,
22
+ :zip,
23
+ :contract]
24
+
25
+ conn1 = {
26
+ :username => 'ianic',
27
+ :password => 'ianic',
28
+ :host => 'iow',
29
+ :database => "pubs"}
30
+ conn2 = {
31
+ :name => 'conn2_name',
32
+ :username => 'ianic2',
33
+ :password => 'ianic2',
34
+ :host => 'iow',
35
+ :database => "pubs"}
36
+ options = Hashie::Mash.new({:default_connection => conn1, :conn1 => conn1, :conn2 => conn2})
37
+ @name = ''
38
+ @connection = Connection.new options, Proc.new {|name| @name = name}
39
+ end
40
+
41
+ def test_simple_select
42
+ result = @connection.exec "select * from authors"
43
+
44
+ assert_equal 23, result.rows.size
45
+ assert_equal 9, result.columns.size
46
+ assert_equal @authors_columns, result.columns
47
+ assert_equal @authors_first_row, result.rows.first
48
+ assert_equal 23, result.affected
49
+ end
50
+
51
+ def test_two_results
52
+ result = @connection.exec "select * from authors order by au_id; select * from employee"
53
+
54
+ assert_equal 2, result.columns.size
55
+ assert_equal 2, result.rows.size
56
+ assert_equal @authors_columns, result.columns[0]
57
+ assert_equal @authors_first_row, result.rows[0].first
58
+ end
59
+
60
+ def test_no_results
61
+ result = @connection.exec "update authors set phone = phone where au_id in ('172-32-1176', '213-46-8915', '238-95-7766')"
62
+ assert_equal 3, result.affected
63
+ end
64
+
65
+ def test_results_and_no_results
66
+ result = @connection.exec "select * from authors;
67
+ update authors set phone = phone where au_id in ('172-32-1176', '213-46-8915', '238-95-7766');
68
+ select * from employee"
69
+
70
+ assert_equal 2, result.columns.size
71
+ assert_equal 2, result.rows.size
72
+ assert_equal @authors_columns, result.columns[0]
73
+ assert_equal @authors_first_row, result.rows[0].first
74
+ assert_equal 43, result.affected
75
+ end
76
+
77
+ def test_error
78
+ result = @connection.exec "select * from pero"
79
+ assert_equal "Invalid object name 'pero'.", result.error
80
+ end
81
+
82
+ def test_update_and_error
83
+ result = @connection.exec "update authors set phone = phone where au_id in ('172-32-1176', '213-46-8915', '238-95-7766'); select * from pero;"
84
+ assert_equal "Invalid object name 'pero'.", result.error
85
+ end
86
+
87
+ def test_change_connection
88
+ assert @connection.use :conn2
89
+ assert_equal 23, @connection.exec("select * from authors").rows.size
90
+ assert @connection.use :conn1
91
+ assert_equal 23, @connection.exec("select * from authors").rows.size
92
+ assert_equal "ianic@iow", @connection.name
93
+
94
+ assert !@connection.use(:unknown)
95
+ end
96
+
97
+ def test_connection_name
98
+ assert_equal 'ianic@iow', @name
99
+ assert @connection.use :conn2
100
+ assert_equal 'conn2_name', @name
101
+ end
102
+
103
+ end