Release commit for 1.62
[dbsrgits/SQL-Translator.git] / t / 50-sqlserver-parser.t
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' );
111     is( join(',', $constraints[0]->fields),
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