vorax 0.4.2 → 5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -29
- data/vorax.gemspec +3 -11
- metadata +4 -92
- data/.rspec +0 -1
- data/Rakefile +0 -30
- data/lib/vorax.rb +0 -60
- data/lib/vorax/base_funnel.rb +0 -30
- data/lib/vorax/output/html_convertor.rb +0 -120
- data/lib/vorax/output/html_funnel.rb +0 -79
- data/lib/vorax/output/pagezip_convertor.rb +0 -20
- data/lib/vorax/output/tablezip_convertor.rb +0 -22
- data/lib/vorax/output/vertical_convertor.rb +0 -53
- data/lib/vorax/output/zip_convertor.rb +0 -117
- data/lib/vorax/parser/argument.rb~ +0 -125
- data/lib/vorax/parser/conn_string.rb +0 -104
- data/lib/vorax/parser/grammars/alias.rb +0 -904
- data/lib/vorax/parser/grammars/alias.rl +0 -138
- data/lib/vorax/parser/grammars/column.rb +0 -454
- data/lib/vorax/parser/grammars/column.rl +0 -64
- data/lib/vorax/parser/grammars/common.rl +0 -107
- data/lib/vorax/parser/grammars/declare.rb +0 -9606
- data/lib/vorax/parser/grammars/declare.rl +0 -160
- data/lib/vorax/parser/grammars/for_block.rb +0 -440
- data/lib/vorax/parser/grammars/for_block.rl +0 -73
- data/lib/vorax/parser/grammars/plsql_def.rb +0 -539
- data/lib/vorax/parser/grammars/plsql_def.rl +0 -73
- data/lib/vorax/parser/grammars/statement.rb +0 -925
- data/lib/vorax/parser/grammars/statement.rl +0 -83
- data/lib/vorax/parser/parser.rb +0 -344
- data/lib/vorax/parser/plsql_structure.rb +0 -222
- data/lib/vorax/parser/plsql_walker.rb +0 -143
- data/lib/vorax/parser/statement_inspector.rb~ +0 -52
- data/lib/vorax/parser/stmt_inspector.rb +0 -78
- data/lib/vorax/parser/target_ref.rb +0 -110
- data/lib/vorax/sqlplus.rb +0 -273
- data/lib/vorax/version.rb +0 -7
- data/lib/vorax/vorax_io.rb +0 -70
- data/spec/column_spec.rb +0 -40
- data/spec/conn_string_spec.rb +0 -53
- data/spec/declare_spec.rb +0 -281
- data/spec/pagezip_spec.rb +0 -153
- data/spec/parser_spec.rb +0 -352
- data/spec/plsql_structure_spec.rb +0 -68
- data/spec/spec_helper.rb +0 -13
- data/spec/sql/create_objects.sql +0 -69
- data/spec/sql/dbms_crypto.spc +0 -339
- data/spec/sql/dbms_stats.spc +0 -4097
- data/spec/sql/drop_user.sql +0 -10
- data/spec/sql/muci.spc +0 -26
- data/spec/sql/setup_user.sql +0 -22
- data/spec/sql/test.fnc +0 -12
- data/spec/sql/test.pkg +0 -83
- data/spec/sqlplus_spec.rb +0 -52
- data/spec/stmt_inspector_spec.rb +0 -96
- data/spec/tablezip_spec.rb +0 -111
- data/spec/vertical_spec.rb +0 -150
data/spec/sql/drop_user.sql
DELETED
data/spec/sql/muci.spc
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
create or replace package muci as
|
2
|
-
|
3
|
-
MY_CONSTANT1 constant varchar2(100) := 'abc';
|
4
|
-
MY_CONSTANT2 constant integer := 10;
|
5
|
-
|
6
|
-
ex_no_data_found exception;
|
7
|
-
pragma exception_init(ex_no_data_found, -20000);
|
8
|
-
|
9
|
-
ex_custom exception;
|
10
|
-
pragma exception_init(ex_custom, -20001);
|
11
|
-
|
12
|
-
cursor my_cursor is
|
13
|
-
select * from user_tables;
|
14
|
-
|
15
|
-
type population_type is table of varchar2(100);
|
16
|
-
|
17
|
-
g_var1 integer;
|
18
|
-
g_var2 varchar2(100) := 'xyz';
|
19
|
-
g_var3 dual.dummy%type;
|
20
|
-
g_var4 all_objects%rowtype;
|
21
|
-
|
22
|
-
procedure my_proc(p1 integer);
|
23
|
-
function my_func(param1 varchar2, param2 boolean := true) return boolean;
|
24
|
-
|
25
|
-
end;
|
26
|
-
/
|
data/spec/sql/setup_user.sql
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
set verify off
|
2
|
-
set feedback off
|
3
|
-
|
4
|
-
prompt Create VORAX_TEST user
|
5
|
-
|
6
|
-
grant create session,
|
7
|
-
create table,
|
8
|
-
create view,
|
9
|
-
create sequence,
|
10
|
-
create procedure,
|
11
|
-
create type,
|
12
|
-
create synonym,
|
13
|
-
unlimited tablespace
|
14
|
-
to vorax_test identified by xxx;
|
15
|
-
|
16
|
-
grant select on v_$sesstat to vorax_test;
|
17
|
-
grant select on v_$statname to vorax_test;
|
18
|
-
grant select on v_$mystat to vorax_test;
|
19
|
-
|
20
|
-
prompt Done.
|
21
|
-
|
22
|
-
quit
|
data/spec/sql/test.fnc
DELETED
data/spec/sql/test.pkg
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
create or replace package test as
|
2
|
-
|
3
|
-
g_var varchar2(100);
|
4
|
-
|
5
|
-
procedure test(p1 integer);
|
6
|
-
function muci(x varchar2, y clob) return boolean;
|
7
|
-
|
8
|
-
end test;
|
9
|
-
/
|
10
|
-
|
11
|
-
create or replace package body test as
|
12
|
-
|
13
|
-
lg_var_private varchar2(100);
|
14
|
-
|
15
|
-
procedure private_proc(p integer) as
|
16
|
-
|
17
|
-
l_var varchar2(100);
|
18
|
-
|
19
|
-
/* local function */
|
20
|
-
function abc return boolean as
|
21
|
-
begin
|
22
|
-
return true;
|
23
|
-
end;
|
24
|
-
|
25
|
-
procedure xyz as
|
26
|
-
begin
|
27
|
-
null;
|
28
|
-
end;
|
29
|
-
|
30
|
-
begin
|
31
|
-
l_var := 'abc';
|
32
|
-
for x in (select * from v$session) loop
|
33
|
-
dbms_output.put_line(x.);
|
34
|
-
if x.dummy = 'X' then
|
35
|
-
dbms_output.put_line('Great!');
|
36
|
-
end if;
|
37
|
-
if 1 = 0 then
|
38
|
-
if 1 = 1 then
|
39
|
-
for y in (select * from cat) loop
|
40
|
-
dbms_output.put_line(y.table_name);
|
41
|
-
dbms_output.put_line('------------------------------');
|
42
|
-
end loop;
|
43
|
-
dbms_output.put_line('not here ever!');
|
44
|
-
end if;
|
45
|
-
if 1 = 0 then
|
46
|
-
dbms_output.put_line('OMG!');
|
47
|
-
end if;
|
48
|
-
end if;
|
49
|
-
null;
|
50
|
-
end loop;
|
51
|
-
select dummy into l_var from dual;
|
52
|
-
if l_var is not null then
|
53
|
-
dbms_output.put_line('yessss baby!');
|
54
|
-
end if;
|
55
|
-
dbms_output.put_line('a loop is following');
|
56
|
-
loop
|
57
|
-
exit when l_var = 'X';
|
58
|
-
dbms_output.put_line('should not be here');
|
59
|
-
end loop;
|
60
|
-
dbms_output.put_line('that''s all folks!');
|
61
|
-
end;
|
62
|
-
|
63
|
-
procedure test(p1 integer) as
|
64
|
-
begin
|
65
|
-
dbms_output.put_line('just a test');
|
66
|
-
begin
|
67
|
-
null;
|
68
|
-
exception
|
69
|
-
when others then
|
70
|
-
null;
|
71
|
-
end;
|
72
|
-
end;
|
73
|
-
|
74
|
-
function muci(x varchar2, y clob) return boolean as
|
75
|
-
begin
|
76
|
-
return false;
|
77
|
-
end;
|
78
|
-
|
79
|
-
begin
|
80
|
-
g_var := 'test';
|
81
|
-
end test;
|
82
|
-
/
|
83
|
-
|
data/spec/sqlplus_spec.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
include Vorax
|
4
|
-
|
5
|
-
describe 'sqlplus' do
|
6
|
-
|
7
|
-
before(:each) do# {{{
|
8
|
-
@sp = Sqlplus.new('sqlplus')
|
9
|
-
@prep = [VORAX_CSTR,
|
10
|
-
"set tab off",
|
11
|
-
"set linesize 10000",
|
12
|
-
"set echo off",
|
13
|
-
"set pause off",
|
14
|
-
"set define &",
|
15
|
-
"set termout on",
|
16
|
-
"set verify off",
|
17
|
-
"set pagesize 4"].join("\n")
|
18
|
-
@result = ""
|
19
|
-
end# }}}
|
20
|
-
|
21
|
-
it 'should work with utf8' do# {{{
|
22
|
-
@sp.exec('select name from employees where id=1;', :prep => @prep + "\ncolumn name format a20")
|
23
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
24
|
-
expected = "
|
25
|
-
SQL>
|
26
|
-
NAME
|
27
|
-
--------------------
|
28
|
-
Tică Șerban
|
29
|
-
|
30
|
-
SQL> "
|
31
|
-
@result.should eq(expected)
|
32
|
-
end# }}}
|
33
|
-
|
34
|
-
it 'should work with substitution variables' do# {{{
|
35
|
-
begin
|
36
|
-
pack_file = Tempfile.new(['vorax', '.sql'])
|
37
|
-
@sp.exec("accept var prompt \"Enter var: \"\nprompt &var", :prep => @prep, :pack_file => pack_file.path)
|
38
|
-
Timeout::timeout(10) {
|
39
|
-
@result << @sp.read_output(32767) while @result !~ /Enter var: \z/
|
40
|
-
@sp.send_text("muci\n")
|
41
|
-
@result << @sp.read_output(32767) while @result !~ /muci\n\z/
|
42
|
-
}
|
43
|
-
ensure
|
44
|
-
pack_file.unlink
|
45
|
-
end
|
46
|
-
end# }}}
|
47
|
-
|
48
|
-
after(:each) do# {{{
|
49
|
-
@sp.terminate
|
50
|
-
end# }}}
|
51
|
-
|
52
|
-
end
|
data/spec/stmt_inspector_spec.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
include Vorax
|
4
|
-
include Parser
|
5
|
-
|
6
|
-
describe 'stmt_inspector' do
|
7
|
-
|
8
|
-
it 'should work with delete statements' do
|
9
|
-
text = "\n delete from bskcmptre d where itmidn = d.\n end loop;"
|
10
|
-
inspector = StmtInspector.new(text)
|
11
|
-
inspector.find_alias('d', 0).columns.should == ['bskcmptre.*']
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should work with hierarchical queries' do
|
15
|
-
text = "select * from (select level as lvl, bskcmptre_tbl.*\n from bskcmptre_tbl\n start with itmidn = pi_nodidn\n connect by prior itmidn = bskprnidn\n order by itmidn desc) v_crtrec"
|
16
|
-
inspector = StmtInspector.new(text)
|
17
|
-
inspector.find_alias('v_crtrec', 0).columns.should == ["lvl", "bskcmptre_tbl.*"]
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should work with a complex query' do# {{{
|
21
|
-
text = '
|
22
|
-
with
|
23
|
-
tab as (select * from dba_users),
|
24
|
-
t2 as (select * from v$session)
|
25
|
-
select d.*, c.table_name
|
26
|
-
from sys.dual d inner join
|
27
|
-
(select c. from cat c) c on (d.c = c.c) outer join
|
28
|
-
dba_tables on (x=y)
|
29
|
-
union
|
30
|
-
select t.*, x
|
31
|
-
from muci t, buci
|
32
|
-
where 1=2;
|
33
|
-
'
|
34
|
-
#puts text
|
35
|
-
inspector = StmtInspector.new(text)
|
36
|
-
#pp inspector.data_source
|
37
|
-
inspector.data_source.size.should == 7
|
38
|
-
inspector.data_source.should include(ExprRef.new("select * from dba_users", (29..51), "tab"))
|
39
|
-
inspector.data_source.should include(ExprRef.new("select * from v$session", (71..93), "t2"))
|
40
|
-
inspector.data_source.should include(TableRef.new("sys.dual", "d"));
|
41
|
-
inspector.data_source.should include(ExprRef.new("select c. from cat c", (179..198), 'c'));
|
42
|
-
inspector.data_source.should include(TableRef.new("dba_tables", nil));
|
43
|
-
inspector.data_source.should include(TableRef.new("muci", "t"));
|
44
|
-
inspector.data_source.should include(TableRef.new("buci", nil));
|
45
|
-
inspector.query_fields.should eq(["d.*", "c.table_name"])
|
46
|
-
end# }}}
|
47
|
-
|
48
|
-
it 'should get alias on an inner context' do# {{{
|
49
|
-
text = '
|
50
|
-
with
|
51
|
-
tab as (select * from dba_users),
|
52
|
-
t2 as (select * from v$session)
|
53
|
-
select d.*, c.table_name
|
54
|
-
from sys.dual d inner join
|
55
|
-
(select * from (select * from cat) c) c on (d.c = c.c) outer join
|
56
|
-
dba_tables on (x=y)
|
57
|
-
union
|
58
|
-
select t.*, x
|
59
|
-
from muci t, buci
|
60
|
-
where 1=2;
|
61
|
-
'
|
62
|
-
inspector = StmtInspector.new(text)
|
63
|
-
ds = inspector.data_source(186);
|
64
|
-
ds.size.should == 8
|
65
|
-
ds.should include(ExprRef.new("select * from cat", (15..31), "c"))
|
66
|
-
ds.should include(ExprRef.new("select * from dba_users", (29..51), "tab"))
|
67
|
-
ds.should include(ExprRef.new("select * from v$session", (71..93), "t2"))
|
68
|
-
ds.should include(TableRef.new("sys.dual", "d"));
|
69
|
-
ds.should include(ExprRef.new("select * from (select * from cat) c", (179..213), 'c'));
|
70
|
-
ds.should include(TableRef.new("dba_tables", nil));
|
71
|
-
ds.should include(TableRef.new("muci", "t"));
|
72
|
-
ds.should include(TableRef.new("buci", nil));
|
73
|
-
end# }}}
|
74
|
-
|
75
|
-
it 'should get columns for the provided alias' do# {{{
|
76
|
-
text = '
|
77
|
-
with
|
78
|
-
tab as (select * from (select user_id, user_name, password, x.* from dba_users, (select c1, c2, from dual) x)),
|
79
|
-
t2 as (select * from v$session)
|
80
|
-
select d.*, c.table_name
|
81
|
-
from sys.dual d inner join
|
82
|
-
(select * from (select * from cat) c) c on (d.c = c.c) outer join
|
83
|
-
dba_tables on (x=y)
|
84
|
-
union
|
85
|
-
select t.*, x.*
|
86
|
-
from muci t, buci x
|
87
|
-
where 1=2;
|
88
|
-
'
|
89
|
-
inspector = StmtInspector.new(text)
|
90
|
-
inspector.find_alias('x', 0).columns.should eq(["buci.*"])
|
91
|
-
inspector.find_alias('x', 63).columns.should eq(["c1", "c2"])
|
92
|
-
inspector.find_alias('tab', 0).columns.should eq(["user_id", "user_name", "password", "c1", "c2"])
|
93
|
-
end# }}}
|
94
|
-
|
95
|
-
end
|
96
|
-
|
data/spec/tablezip_spec.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
include Vorax
|
4
|
-
|
5
|
-
describe 'tablezip layout' do
|
6
|
-
|
7
|
-
before(:each) do# {{{
|
8
|
-
@sp = Sqlplus.new('sqlplus')
|
9
|
-
@sp.default_convertor = :tablezip
|
10
|
-
@prep = [VORAX_CSTR,
|
11
|
-
"set tab off",
|
12
|
-
"set linesize 10000",
|
13
|
-
"set markup html on",
|
14
|
-
"set echo off",
|
15
|
-
"set pause off",
|
16
|
-
"set define &",
|
17
|
-
"set termout on",
|
18
|
-
"set verify off",
|
19
|
-
"set pagesize 4"].join("\n")
|
20
|
-
@result = ""
|
21
|
-
end# }}}
|
22
|
-
|
23
|
-
it 'should work with multiple statements' do# {{{
|
24
|
-
@sp.exec("select * from dual;\nselect * from departments where id <= 2;", :prep => @prep)
|
25
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
26
|
-
expected = <<OUTPUT
|
27
|
-
|
28
|
-
SQL>
|
29
|
-
|
30
|
-
DUM
|
31
|
-
---
|
32
|
-
X
|
33
|
-
|
34
|
-
SQL>
|
35
|
-
|
36
|
-
ID NAME DESCRIPTION
|
37
|
-
-- ----------- -----------------------------------
|
38
|
-
1 Bookkeeping This department is responsible for:
|
39
|
-
- financial reporting
|
40
|
-
- analysis
|
41
|
-
- other boring tasks
|
42
|
-
2 Marketing
|
43
|
-
|
44
|
-
SQL>
|
45
|
-
OUTPUT
|
46
|
-
#puts @result
|
47
|
-
@result.should eq(expected)
|
48
|
-
end# }}}
|
49
|
-
|
50
|
-
it 'should work with multi line records' do# {{{
|
51
|
-
@sp.exec("select * from departments where id <= 10;", :prep => @prep)
|
52
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
53
|
-
expected = <<OUTPUT
|
54
|
-
|
55
|
-
SQL>
|
56
|
-
|
57
|
-
ID NAME DESCRIPTION
|
58
|
-
-- ---------------- -----------------------------------
|
59
|
-
1 Bookkeeping This department is responsible for:
|
60
|
-
- financial reporting
|
61
|
-
- analysis
|
62
|
-
- other boring tasks
|
63
|
-
2 Marketing
|
64
|
-
3 Deliveries
|
65
|
-
4 CRM
|
66
|
-
|
67
|
-
ID NAME DESCRIPTION
|
68
|
-
-- ---------------- -----------------------------------
|
69
|
-
5 Legal Stuff
|
70
|
-
6 Management The bad guys department
|
71
|
-
7 Cooking
|
72
|
-
8 Public Relations
|
73
|
-
|
74
|
-
ID NAME DESCRIPTION
|
75
|
-
-- ---------------- -----------------------------------
|
76
|
-
9 Aquisitions
|
77
|
-
10 Cleaning
|
78
|
-
|
79
|
-
10 rows selected.
|
80
|
-
|
81
|
-
SQL>
|
82
|
-
OUTPUT
|
83
|
-
@result.should eq(expected)
|
84
|
-
end# }}}
|
85
|
-
|
86
|
-
it 'should work with accept prompts' do# {{{
|
87
|
-
begin
|
88
|
-
pack_file = Tempfile.new(['vorax', '.sql'])
|
89
|
-
@sp.exec("accept var prompt \"Enter var: \"\nprompt &var", :prep => @prep, :pack_file => pack_file.path)
|
90
|
-
Timeout::timeout(10) {
|
91
|
-
@result << @sp.read_output(32767) while @result !~ /Enter var:\z/
|
92
|
-
@sp.send_text("muci\n")
|
93
|
-
@result << @sp.read_output(32767) while @result !~ /muci\n\z/
|
94
|
-
}
|
95
|
-
ensure
|
96
|
-
pack_file.unlink
|
97
|
-
end
|
98
|
-
end# }}}
|
99
|
-
|
100
|
-
it 'should work with <pre> tags' do# {{{
|
101
|
-
@sp.exec("set autotrace traceonly explain\nselect * from dual;", :prep => @prep)
|
102
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
103
|
-
@result.should match(/SELECT STATEMENT/)
|
104
|
-
end# }}}
|
105
|
-
|
106
|
-
after(:each) do# {{{
|
107
|
-
@sp.terminate
|
108
|
-
end# }}}
|
109
|
-
|
110
|
-
end
|
111
|
-
|
data/spec/vertical_spec.rb
DELETED
@@ -1,150 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
include Vorax
|
4
|
-
|
5
|
-
describe 'vertical layout' do
|
6
|
-
|
7
|
-
before(:each) do# {{{
|
8
|
-
@sp = Sqlplus.new('sqlplus')
|
9
|
-
@sp.default_convertor = :vertical
|
10
|
-
@prep = [VORAX_CSTR,
|
11
|
-
"set tab off",
|
12
|
-
"set linesize 10000",
|
13
|
-
"set markup html on",
|
14
|
-
"set echo off",
|
15
|
-
"set pause off",
|
16
|
-
"set define &",
|
17
|
-
"set termout on",
|
18
|
-
"set verify off",
|
19
|
-
"set pagesize 4"].join("\n")
|
20
|
-
@result = ""
|
21
|
-
end# }}}
|
22
|
-
|
23
|
-
it 'should work with pagesize=0' do# {{{
|
24
|
-
@sp.exec("select * from departments where id<=3;", :prep => @prep + "\nset pagesize 0")
|
25
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
26
|
-
expected = <<OUTPUT
|
27
|
-
|
28
|
-
SQL>
|
29
|
-
|
30
|
-
: 1
|
31
|
-
: Bookkeeping
|
32
|
-
: This department is responsible for:
|
33
|
-
- financial reporting
|
34
|
-
- analysis
|
35
|
-
- other boring tasks
|
36
|
-
------------------------------------------------------------
|
37
|
-
: 2
|
38
|
-
: Marketing
|
39
|
-
:
|
40
|
-
------------------------------------------------------------
|
41
|
-
: 3
|
42
|
-
: Deliveries
|
43
|
-
:
|
44
|
-
------------------------------------------------------------
|
45
|
-
|
46
|
-
SQL>
|
47
|
-
OUTPUT
|
48
|
-
@result.should eq(expected)
|
49
|
-
end# }}}
|
50
|
-
|
51
|
-
it 'should work with unicode special chars' do# {{{
|
52
|
-
@sp.exec("select * from employees where id=1;", :prep => @prep)
|
53
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
54
|
-
expected = <<OUTPUT
|
55
|
-
|
56
|
-
SQL>
|
57
|
-
|
58
|
-
ID : 1
|
59
|
-
NAME : Tică Șerban
|
60
|
-
SALARY : 570
|
61
|
-
DEPARTMENT_ID : 1
|
62
|
-
------------------------------------------------------------
|
63
|
-
|
64
|
-
SQL>
|
65
|
-
OUTPUT
|
66
|
-
#puts @result
|
67
|
-
@result.should eq(expected)
|
68
|
-
end# }}}
|
69
|
-
|
70
|
-
it 'should work with one single line record' do# {{{
|
71
|
-
@sp.exec("select * from departments where id=2;", :prep => @prep)
|
72
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
73
|
-
expected = <<OUTPUT
|
74
|
-
|
75
|
-
SQL>
|
76
|
-
|
77
|
-
ID : 2
|
78
|
-
NAME : Marketing
|
79
|
-
DESCRIPTION :
|
80
|
-
------------------------------------------------------------
|
81
|
-
|
82
|
-
SQL>
|
83
|
-
OUTPUT
|
84
|
-
@result.should eq(expected)
|
85
|
-
end# }}}
|
86
|
-
|
87
|
-
it 'should work with one multiline record' do# {{{
|
88
|
-
@sp.exec("select * from departments where id=1;", :prep => @prep)
|
89
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
90
|
-
expected = <<OUTPUT
|
91
|
-
|
92
|
-
SQL>
|
93
|
-
|
94
|
-
ID : 1
|
95
|
-
NAME : Bookkeeping
|
96
|
-
DESCRIPTION : This department is responsible for:
|
97
|
-
- financial reporting
|
98
|
-
- analysis
|
99
|
-
- other boring tasks
|
100
|
-
------------------------------------------------------------
|
101
|
-
|
102
|
-
SQL>
|
103
|
-
OUTPUT
|
104
|
-
@result.should eq(expected)
|
105
|
-
end# }}}
|
106
|
-
|
107
|
-
it 'should work with multiple lines' do# {{{
|
108
|
-
@sp.exec("select * from departments where id in (1, 2);", :prep => @prep)
|
109
|
-
@result << @sp.read_output(32767) while @sp.busy?
|
110
|
-
expected = <<OUTPUT
|
111
|
-
|
112
|
-
SQL>
|
113
|
-
|
114
|
-
ID : 1
|
115
|
-
NAME : Bookkeeping
|
116
|
-
DESCRIPTION : This department is responsible for:
|
117
|
-
- financial reporting
|
118
|
-
- analysis
|
119
|
-
- other boring tasks
|
120
|
-
------------------------------------------------------------
|
121
|
-
ID : 2
|
122
|
-
NAME : Marketing
|
123
|
-
DESCRIPTION :
|
124
|
-
------------------------------------------------------------
|
125
|
-
|
126
|
-
SQL>
|
127
|
-
OUTPUT
|
128
|
-
@result.should eq(expected)
|
129
|
-
end# }}}
|
130
|
-
|
131
|
-
it 'should work with accept prompts' do# {{{
|
132
|
-
begin
|
133
|
-
pack_file = Tempfile.new(['vorax', '.sql'])
|
134
|
-
@sp.exec("accept var prompt \"Enter var: \"\nprompt &var", :prep => @prep, :pack_file => pack_file.path)
|
135
|
-
Timeout::timeout(10) {
|
136
|
-
@result << @sp.read_output(32767) while @result !~ /Enter var:\z/
|
137
|
-
@sp.send_text("muci\n")
|
138
|
-
@result << @sp.read_output(32767) while @result !~ /muci\n\z/
|
139
|
-
}
|
140
|
-
ensure
|
141
|
-
pack_file.unlink
|
142
|
-
end
|
143
|
-
end# }}}
|
144
|
-
|
145
|
-
after(:each) do# {{{
|
146
|
-
@sp.terminate
|
147
|
-
end# }}}
|
148
|
-
|
149
|
-
end
|
150
|
-
|