1 package SQL::Translator::Parser::MySQL;
3 #-----------------------------------------------------
4 # $Id: MySQL.pm,v 1.1.1.1 2002-03-01 02:26:25 kycl4rk Exp $
6 # File : SQL::Translator::Parser::MySQL
7 # Programmer : Ken Y. Clark, kclark@logsoft.com
9 # Purpose : parser for MySQL
10 #-----------------------------------------------------
13 use vars qw( $VERSION );
14 $VERSION = (qw$Revision: 1.1.1.1 $)[-1];
16 use SQL::Translator::Parser;
17 use base qw[ SQL::Translator::Parser ];
23 file : statement(s) { \%tables }
29 create : create_table table_name '(' line(s /,/) ')' table_type(?) ';'
32 for my $line ( @{ $item[4] } ) {
33 if ( $line->{'type'} eq 'field' ) {
34 my $field_name = $line->{'name'};
35 $tables{ $item{'table_name'} }
36 {'fields'}{$field_name} =
37 { %$line, order => $i };
40 if ( $line->{'is_primary_key'} ) {
42 @{ $tables{ $item{'table_name'} }{'indeces'} },
44 type => 'primary_key',
45 fields => [ $field_name ],
50 push @{ $tables{ $item{'table_name'} }{'indeces'} },
53 $tables{ $item{'table_name'} }{'type'} =
54 $item{'table_type'}[0];
67 field : field_name data_type not_null(?) default_val(?) auto_inc(?) primary_key(?)
69 my $null = defined $item{'not_null'}[0]
70 ? $item{'not_null'}[0] : 1 ;
73 name => $item{'field_name'},
74 data_type => $item{'data_type'}{'type'},
75 size => $item{'data_type'}{'size'},
77 default => $item{'default_val'}[0],
78 is_auto_inc => $item{'auto_inc'}[0],
79 is_primary_key => $item{'primary_key'}[0],
84 index : primary_key_index
94 data_type : WORD field_size(?)
104 field_size : '(' num_range ')' { $item{'num_range'} }
106 num_range : DIGITS ',' DIGITS
107 { $return = $item[1].','.$item[3] }
109 { $return = $item[1] }
112 create_table : /create/i /table/i
114 not_null : /not/i /null/i { $return = 0 }
116 default_val : /default/i /(?:')?[\w\d.-]*(?:')?/ { $item[2]=~s/'//g; $return=$item[2] }
118 auto_inc : /auto_increment/i { 1 }
120 primary_key : /primary/i /key/i { 1 }
122 primary_key_index : primary_key index_name(?) '(' field_name(s /,/) ')'
125 name => $item{'index_name'}[0],
126 type => 'primary_key',
131 normal_index : key index_name(?) '(' field_name(s /,/) ')'
134 name => $item{'index_name'}[0],
140 unique_index : /unique/i key index_name(?) '(' field_name(s /,/) ')'
143 name => $item{'index_name'}[0],
152 table_type : /TYPE=/i /\w+/ { $item[2] }
165 #-----------------------------------------------------
166 # Where man is not nature is barren.
168 #-----------------------------------------------------
172 SQL::Translator::Parser::MySQL - parser for MySQL
176 use SQL::Translator::Parser::MySQL;
184 Ken Y. Clark, kclark@logsoft.com