#! perl -slw
use strict;
local $/ = ''; # paragraph mode
while( my $clause = <DATA> ) {
$clause =~ s[
( create \s+ table \s+ \S+ \s+ \( )
( .+ )
( \) \s* )$
]{
my( $x, $y, $z ) = ( $1, $2, $3 );
$y =~ s[(?<!null)(,|\Z)][ not null$1 ]g;
"$x$y$z";
}esx;
print $clause;
}
__DATA__
create table foo (
somevar1 sometype,
somevar2 sometype null,
somevar3 sometype not null,
somevar4 sometype(20),
somevar5 sometype(20) null,
somevar6 sometype(10))
create
table
foo
(
somevar1
sometype
,
somevar2
sometype
null
,
somevar3
sometype
not
null,
somevar4 sometype
(20),
somevar5 sometype(20)
null, somevar6 sometype(10
))
create table foo ( somevar1 sometype, somevar2 sometype null, somevar3
sometype not null, somevar4 sometype(20), somevar5 sometype(20) null,
somevar6 sometype(10))
Produces
C:\test>junk3
create table foo (
somevar1 sometype not null,
somevar2 sometype null,
somevar3 sometype not null,
somevar4 sometype(20) not null,
somevar5 sometype(20) null,
somevar6 sometype(10) not null )
create
table
foo
(
somevar1
sometype
not null,
somevar2
sometype
null
not null,
somevar3
sometype
not
null,
somevar4 sometype
(20) not null,
somevar5 sometype(20)
null, somevar6 sometype(10
) not null )
create table foo ( somevar1 sometype not null, somevar2 sometype null
+, somevar3
sometype not null, somevar4 sometype(20) not null, somevar5 sometype(
+20) null,
somevar6 sometype(10) not null )
*Note: I've use a simplified regex to demostrate the nested substitution technique. You will probably need to improve it match SQl syntax.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|