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