package SQL::Translator::Parser::SQLServer;
# -------------------------------------------------------------------
-# $Id: SQLServer.pm 1440 2009-01-17 16:31:57Z jawnsy $
-# -------------------------------------------------------------------
# Copyright (C) 2002-2009 SQLFairy Authors
#
# This program is free software; you can redistribute it and/or
use strict;
use vars qw[ $DEBUG $VERSION $GRAMMAR @EXPORT_OK ];
-$VERSION = '1.99';
+$VERSION = '1.59';
$DEBUG = 0 unless defined $DEBUG;
use Data::Dumper;
| create_index
| create_constraint
| comment
+ | drop
| use
| setuser
| if
comment_middle : m{([^*]+|\*(?!/))*}
+drop : if_exists(?) /drop/i tbl_drop END_STATEMENT
+
+tbl_drop : /table/i NAME
+
+if_exists : /if exists/i '(' /select/i 'name' /from/i 'sysobjects' /[^\)]+/ ')'
+
#
# Create table.
#
}
}
-create_constraint : /create/i constraint
+create_constraint : /create/i constraint
{
@table_comments = ();
push @{ $tables{ $item[2]{'table'} }{'constraints'} }, $item[2];
}
+create_constraint : /alter/i /table/i ident /add/i foreign_key_constraint END_STATEMENT
+ {
+ push @{ $tables{ $item[3]{name} }{constraints} }, $item[5];
+ }
+
create_index : /create/i index
{
@table_comments = ();
{ $return = 'null' }
| /default/i /'[^']*'/
{ $item[2]=~ s/'//g; $return = $item[2] }
+ | /default/i WORD
+ { $return = $item[2] }
auto_inc : /identity/i { 1 }
}
}
+unique_constraint : /constraint/i index_name(?) /unique/i parens_field_list
+ {
+ $return = {
+ supertype => 'constraint',
+ type => 'unique',
+ name => $item[2][0],
+ fields => $item[4],
+ }
+ }
+
unique_constraint : /unique/i clustered(?) INDEX(?) index_name(?) on_table(?) parens_field_list
{
$return = {
on_system : /on/i /system/i
{ $return = 1 }
-index : clustered(?) INDEX index_name(?) on_table(?) parens_field_list ';'
+index : clustered(?) INDEX index_name(?) on_table(?) parens_field_list END_STATEMENT
{
$return = {
supertype => 'index',