From: Chris Mungall Date: Fri, 11 Oct 2002 21:09:49 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: v0.01~45 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=dd2ef5ae9a4f343e7abd89a4d5f05173c3f8ea1f;p=dbsrgits%2FSQL-Translator.git *** empty log message *** --- diff --git a/lib/SQL/Translator/Parser/MySQL.pm b/lib/SQL/Translator/Parser/MySQL.pm index 6e99b35..a9f8fd7 100644 --- a/lib/SQL/Translator/Parser/MySQL.pm +++ b/lib/SQL/Translator/Parser/MySQL.pm @@ -1,7 +1,7 @@ package SQL::Translator::Parser::MySQL; #----------------------------------------------------- -# $Id: MySQL.pm,v 1.3 2002-07-23 19:22:11 dlc Exp $ +# $Id: MySQL.pm,v 1.4 2002-10-11 21:09:49 cmungall Exp $ #----------------------------------------------------- # Copyright (C) 2002 Ken Y. Clark , # darren chamberlain @@ -23,7 +23,7 @@ package SQL::Translator::Parser::MySQL; use strict; use vars qw($VERSION $GRAMMAR @EXPORT_OK); -$VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/; #use SQL::Translator::Parser; # This is not necessary! use Parse::RecDescent; @@ -89,6 +89,16 @@ $GRAMMAR = } | + create : create_index index_name /on/i table_name '(' field_name(s /,/) ')' ';' +# create : create_index index_name keyword_on table_name '(' field_name ')' ';' + { + # do nothing just now + my $dummy = 0; + } + | + + keyword_on : /on/i + line : index | field | @@ -97,23 +107,59 @@ $GRAMMAR = blank : /\s*/ - field : field_name data_type not_null(?) default_val(?) auto_inc(?) primary_key(?) + + field : field_name data_type field_qualifier(s?) { - my $null = defined $item{'not_null'}[0] - ? $item{'not_null'}[0] : 1 ; - $return = { + my %qualifier_h = + map {%$_} @{$item{'field_qualifier'} || []}; + my $null = defined $item{'not_null'} + ? $item{'not_null'} : 1 ; + delete $qualifier_h{'not_null'}; + $return = { type => 'field', name => $item{'field_name'}, data_type => $item{'data_type'}{'type'}, - size => $item{'data_type'}{'size'}, - null => $null, - default => $item{'default_val'}[0], - is_auto_inc => $item{'auto_inc'}[0], - is_primary_key => $item{'primary_key'}[0], + null => $null, + %qualifier_h, } } | + field_qualifier : not_null + { + $return = { + null => $item{'not_null'}, + } + } + + field_qualifier : default_val + { + $return = { + default => $item{default_val}, + } + } + + field_qualifier : auto_inc + { + $return = { + is_auto_inc => $item{auto_inc}, + } + } + + field_qualifier : primary_key + { + $return = { + is_primary_key => $item{primary_key}, + } + } + + field_qualifier : unsigned + { + $return = { + is_unsigned => $item{unsigned}, + } + } + index : primary_key_index | unique_index | normal_index @@ -144,8 +190,12 @@ $GRAMMAR = create_table : /create/i /table/i + create_index : /create/i /index/i + not_null : /not/i /null/i { $return = 0 } + unsigned : /unsigned/i { $return = 0 } + default_val : /default/i /(?:')?[\w\d.-]*(?:')?/ { $item[2]=~s/'//g; $return=$item[2] } auto_inc : /auto_increment/i { 1 } @@ -170,7 +220,7 @@ $GRAMMAR = } } - unique_index : /unique/i key index_name(?) '(' field_name(s /,/) ')' + unique_index : /unique/i key(?) index_name(?) '(' field_name(s /,/) ')' { $return = { name => $item{'index_name'}[0], diff --git a/t/05bgep-re.t b/t/05bgep-re.t index a7b9f13..8efb0d6 100644 --- a/t/05bgep-re.t +++ b/t/05bgep-re.t @@ -22,3 +22,5 @@ close FH; print $tr->translate(\$data); +print "ok 1\n"; +