package SQL::Translator::Parser::SqlfXML;
# -------------------------------------------------------------------
-# $Id: SqlfXML.pm,v 1.1 2003-08-06 17:14:08 grommit Exp $
+# $Id: SqlfXML.pm,v 1.2 2003-08-06 22:08:16 grommit Exp $
# -------------------------------------------------------------------
# Copyright (C) 2003 Mark Addison <mark.addison@itn.co.uk>,
#
$ sql_translator.pl --from MySQL --to SqftXML foo_schema.sql
+==head1 default_value
+
+Leave the tag out all together to use the default in Schema::Field. Use empty
+tags or EMPTY_STRING for a zero lenth string. NULL for an explicit null
+(currently sets default_value to undef Schema::Field).
+
+ <sqlf:default_value></sqlf:default_value> <!-- Empty string -->
+ <sqlf:default_value>EMPTY_STRING</sqlf:default_value> <!-- Empty string -->
+ <sqlf:default_value>NULL</sqlf:default_value> <!-- NULL -->
+
=cut
use strict;
use warnings;
use vars qw[ $DEBUG $VERSION @EXPORT_OK ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/;
$DEBUG = 0 unless defined $DEBUG;
use Data::Dumper;
my %fdata = get_tagfields($xp, $_, "sqlf:",
qw/name data_type size default_value is_nullable is_auto_increment
is_primary_key is_foreign_key comments/);
+ if (exists $fdata{default_value} and defined $fdata{default_value}){
+ if ( $fdata{default_value} =~ /^\s*NULL\s*$/ ) {
+ $fdata{default_value}= undef;
+ }
+ elsif ( $fdata{default_value} =~ /^\s*EMPTY_STRING\s*$/ ) {
+ $fdata{default_value} = "";
+ }
+ }
my $field = $table->add_field(%fdata) or die $schema->error;
$table->primary_key($field->name) if $fdata{'is_primary_key'};
# TODO We should be able to make the table obj spot this when we
# get_tagfields XPNODE, NAMESPACE => qw/TAGNAMES/;
# get_tagfields $node, "sqlf:" => qw/name type fields reference/;
+#
+# Returns hash of data. If a tag isn't in the file it is not in this
+# hash.
+# TODO Add handling of and explicit NULL value.
sub get_tagfields {
my ($xp, $node, @names) = @_;
my (%data, $ns);
foreach (@names) {
if ( m/:$/ ) { $ns = $_; next; } # Set def namespace
- $data{$_} = "".$xp->findvalue( (s/(^.*?:)// ? $1 : $ns).$_, $node );
+ my $path = (s/(^.*?:)// ? $1 : $ns).$_;
+ $data{$_} = $xp->findvalue($path,$node) if $xp->exists($path,$node);
+ debug "Got $_=".(defined $data{$_} ? $data{$_} : "UNDEF");
}
return wantarray ? %data : \%data;
}
* Support sqf:options.
* Test forign keys are parsed ok.
- * Control over defaulting and parsing of empty vs non-existant tags.
+ * Control over defaulting of non-existant tags.
=head1 AUTHOR