migrate almost all code to Generator::Role::DDL
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / SQLServer.pm
1 package SQL::Translator::Producer::SQLServer;
2
3 use strict;
4 use warnings;
5 our ( $DEBUG, $WARN );
6 our $VERSION = '1.59';
7 $DEBUG = 1 unless defined $DEBUG;
8
9 use SQL::Translator::Schema::Constants;
10 use SQL::Translator::Utils qw(debug header_comment);
11 use SQL::Translator::Generator::DDL::SQLServer;
12
13 sub produce {
14   my $translator = shift;
15   SQL::Translator::Generator::DDL::SQLServer->new(
16     add_comments    => !$translator->no_comments,
17     add_drop_tables => $translator->add_drop_table,
18   )->schema($translator->schema)
19 }
20
21 1;
22
23 =pod
24
25 =head1 SQLServer Create Table Syntax
26
27 TODO
28
29
30 =head1 NAME
31
32 SQL::Translator::Producer::SQLServer - MS SQLServer producer for SQL::Translator
33
34 =head1 SYNOPSIS
35
36   use SQL::Translator;
37
38   my $t = SQL::Translator->new( parser => '...', producer => 'SQLServer' );
39   $t->translate;
40
41 =head1 DESCRIPTION
42
43 B<WARNING>B This is still fairly early code, basically a hacked version of the
44 Sybase Producer (thanks Sam, Paul and Ken for doing the real work ;-)
45
46 =head1 Extra Attributes
47
48 =over 4
49
50 =item field.list
51
52 List of values for an enum field.
53
54 =back
55
56 =head1 TODO
57
58  * !! Write some tests !!
59  * Reserved words list needs updating to SQLServer.
60  * Triggers, Procedures and Views DO NOT WORK
61
62
63     # Text of view is already a 'create view' statement so no need to
64     # be fancy
65     foreach ( $schema->get_views ) {
66         my $name = $_->name();
67         $output .= "\n\n";
68         $output .= "--\n-- View: $name\n--\n\n" unless $no_comments;
69         my $text = $_->sql();
70         $text =~ s/\r//g;
71         $output .= "$text\nGO\n";
72     }
73
74     # Text of procedure already has the 'create procedure' stuff
75     # so there is no need to do anything fancy. However, we should
76     # think about doing fancy stuff with granting permissions and
77     # so on.
78     foreach ( $schema->get_procedures ) {
79         my $name = $_->name();
80         $output .= "\n\n";
81         $output .= "--\n-- Procedure: $name\n--\n\n" unless $no_comments;
82         my $text = $_->sql();
83       $text =~ s/\r//g;
84         $output .= "$text\nGO\n";
85     }
86
87 =head1 SEE ALSO
88
89 SQL::Translator.
90
91 =head1 AUTHORS
92
93 Mark Addison E<lt>grommit@users.sourceforge.netE<gt> - Bulk of code from
94 Sybase producer, I just tweaked it for SQLServer. Thanks.
95
96 =cut