Commit | Line | Data |
ff3dd529 |
1 | #!/usr/bin/perl |
2 | # vim: set ft=perl ts=4 et: |
3 | # |
4 | |
5 | # Copied from 19sybase-parser.t with some additions |
6 | |
7 | use strict; |
8 | |
9 | use FindBin qw/$Bin/; |
10 | use Test::More; |
11 | use Test::SQL::Translator qw(maybe_plan); |
12 | use SQL::Translator; |
13 | use SQL::Translator::Schema::Constants; |
14 | |
15 | BEGIN { |
16 | maybe_plan(46, 'SQL::Translator::Parser::SQLServer'); |
17 | SQL::Translator::Parser::SQLServer->import('parse'); |
18 | } |
19 | |
20 | my $file = "$Bin/data/sqlserver/create.sql"; |
21 | |
22 | ok( -e $file, "File exists" ); |
23 | |
24 | my $data; |
25 | { |
26 | local $/; |
27 | open my $fh, "<$file" or die "Can't read file '$file': $!\n"; |
28 | $data = <$fh>; |
29 | close $fh; |
30 | } |
31 | |
32 | ok( $data, 'Data' ); |
33 | |
34 | my $t = SQL::Translator->new; |
35 | |
36 | my $val = parse($t, $data); |
37 | |
38 | is( $val, 1, 'Parse' ); |
39 | |
40 | my $schema = $t->schema; |
41 | |
42 | isa_ok( $schema, 'SQL::Translator::Schema', 'Schema' ); |
43 | |
44 | is( $schema->is_valid, 1, 'Schema is valid' ); |
45 | |
46 | my @tables = $schema->get_tables; |
47 | |
48 | is( scalar @tables, 8, 'Eight tables' ); |
49 | |
50 | { |
51 | my $t = $schema->get_table( 'jdbc_function_escapes' ); |
52 | isa_ok( $t, 'SQL::Translator::Schema::Table', 'Table' ); |
53 | is( $t->name, 'jdbc_function_escapes', "Name = 'jdbc_function_escapes'" ); |
54 | |
55 | my @fields = $t->get_fields; |
56 | is( scalar @fields, 2, 'Two fields' ); |
57 | |
58 | is( $fields[0]->name, 'escape_name', "First field name is 'escape_name'" ); |
59 | is( $fields[0]->data_type, 'varchar', "First field is 'varchar'" ); |
60 | is( $fields[0]->size, 40, "First field size is '40'" ); |
61 | is( $fields[0]->is_nullable, 0, "First field cannot be null" ); |
62 | |
63 | is( $fields[1]->name, 'map_string', "Second field name is 'map_string'" ); |
64 | is( $fields[1]->data_type, 'varchar', "Second field is 'varchar'" ); |
65 | is( $fields[1]->size, 40, "Second field size is '40'" ); |
66 | is( $fields[1]->is_nullable, 0, "Second field cannot be null" ); |
67 | } |
68 | |
69 | { |
70 | my $t = $schema->get_table( 'spt_jtext' ); |
71 | isa_ok( $t, 'SQL::Translator::Schema::Table', 'Table' ); |
72 | is( $t->name, 'spt_jtext', "Name = 'spt_jtext'" ); |
73 | |
74 | my @fields = $t->get_fields; |
75 | is( scalar @fields, 2, 'Two fields' ); |
76 | |
77 | is( $fields[0]->name, 'mdinfo', "First field name is 'mdinfo'" ); |
78 | is( $fields[0]->data_type, 'varchar', "First field is 'varchar'" ); |
79 | is( $fields[0]->size, 30, "First field size is '30'" ); |
80 | is( $fields[0]->is_nullable, 0, "First field cannot be null" ); |
81 | |
82 | is( $fields[1]->name, 'value', "Second field name is 'value'" ); |
83 | is( $fields[1]->data_type, 'text', "Second field is 'text'" ); |
84 | is( $fields[1]->size, 0, "Second field size is '0'" ); |
85 | is( $fields[1]->is_nullable, 0, "Second field cannot be null" ); |
86 | |
87 | my @constraints = $t->get_constraints; |
88 | is( scalar @constraints, 1, 'One constraint' ); |
89 | |
90 | is( $constraints[0]->type, UNIQUE, 'Constraint is UNIQUE' ); |
91 | is( join(',', $constraints[0]->fields), 'mdinfo', 'On "mdinfo"' ); |
92 | } |
93 | |
94 | { |
95 | my $t = $schema->get_table( 'spt_mda' ); |
96 | isa_ok( $t, 'SQL::Translator::Schema::Table', 'Table' ); |
97 | is( $t->name, 'spt_mda', "Name = 'spt_mda'" ); |
98 | |
99 | my @fields = $t->get_fields; |
100 | is( scalar @fields, 7, 'Seven fields' ); |
101 | |
102 | is( $fields[0]->name, 'mdinfo', "First field name is 'mdinfo'" ); |
103 | is( $fields[0]->data_type, 'varchar', "First field is 'varchar'" ); |
104 | is( $fields[0]->size, 30, "First field size is '30'" ); |
105 | is( $fields[0]->is_nullable, 0, "First field cannot be null" ); |
106 | |
107 | my @constraints = $t->get_constraints; |
108 | is( scalar @constraints, 1, 'One constraint' ); |
109 | |
110 | is( $constraints[0]->type, UNIQUE, 'Constraint is UNIQUE' ); |
aee4b66e |
111 | is( join(',', $constraints[0]->fields), |
ff3dd529 |
112 | 'mdinfo,mdaver_end,srvver_end', 'On "mdinfo,mdaver_end,srvver_end"' ); |
113 | } |
114 | |
115 | # New testing for views and procedures |
116 | my @views = $schema->get_views; |
117 | |
118 | is( scalar @views, 1, 'One view' ); |
119 | like($views[0]->sql, qr/vs_xdp_data/, "Detected view vs_xdp_data"); |
120 | |
121 | my @procedures = $schema->get_procedures; |
122 | |
123 | is( scalar @procedures, 10, 'Ten procedures' ); |
124 | like($procedures[8]->sql, qr/Tx_B_Get_Vlan/, "Detected procedure Tx_B_Get_Vlan"); |
125 | like($procedures[9]->sql, qr/\[dbo\].inet_ntoa/, "Detected function [dbo].inet_ntoa"); |
126 | |