You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2013/01/31 15:30:09 UTC
svn commit: r1440978 -
/vcl/site/trunk/content/comm/commprojects/derby-parser.pl
Author: jfthomps
Date: Thu Jan 31 14:30:08 2013
New Revision: 1440978
URL: http://svn.apache.org/viewvc?rev=1440978&view=rev
Log:
initial add
Added:
vcl/site/trunk/content/comm/commprojects/derby-parser.pl (with props)
Added: vcl/site/trunk/content/comm/commprojects/derby-parser.pl
URL: http://svn.apache.org/viewvc/vcl/site/trunk/content/comm/commprojects/derby-parser.pl?rev=1440978&view=auto
==============================================================================
--- vcl/site/trunk/content/comm/commprojects/derby-parser.pl (added)
+++ vcl/site/trunk/content/comm/commprojects/derby-parser.pl Thu Jan 31 14:30:08 2013
@@ -0,0 +1,195 @@
+#!/usr/bin/perl -w
+
+#The intend of the file is to take vcl.sql file and parse it change what is needed in order
+#for it to be compatible with Apache Derby Database. Changes that are made are described
+#along the file where they are addressed.
+
+#Files to be modified
+$input = "vcl.sql";
+$output = "vcl-derby.sql";
+
+#Get data from files
+open(IN1, $input);
+@lines = <IN1>;
+close(IN1);
+
+#set variable to outputs
+$out = "";
+
+#Here are variable needed for the connection for the database
+$db = 'vcl1';
+$user = 'vcluser';
+$pw = 'vclPassowrd';
+$out.= "connect 'jdbc:derby:$db;user=$user;password=$pw;';\n";
+
+
+#modify the data
+foreach $line (@lines) {
+
+ #Remove sql_mode
+ if($line =~ /SET SQL_MODE=/) {
+ $line = "";
+ }
+ #Remove the IF NOT EXIST as this is not supported in Derby
+ if($line =~ /^(.*)(IF NOT EXISTS )(.*)$/) {
+ $line = $1.$3."\n";
+ }
+ #Remove the engine specification, not supported in Derby
+ if($line =~ /^(.*)( ENGINE=)/) {
+ $line = $1.";\n";
+ }
+ #Modify the 'auto_increment' command to 'GENERATED BY DEFAULT AS IDENTITY'
+ #Note Derby offer an option here, 'GENERATED ALWAYS AS IDENTITY', however this is compatible
+ #with other sql commands in this file
+ if($line =~ /^(.*)(auto_increment)(.*)$/) {
+ $line = $1."GENERATED BY DEFAULT AS IDENTITY,"."\n";
+ }
+ #Modify the 'UNIQUE KEY' command to 'UNIQUE'
+ if($line =~ /^(.*)(UNIQUE KEY \`[a-zA-Z\d]+\`)(.*)$/) {
+ $line = $1."UNIQUE".$3." \n";
+ }
+ #Remove the 'KEY' command not the sam in Derby
+ if($line =~ /^(.*)( KEY )(.*)$/) {
+ $line = "";
+ }
+ #Change name of columns and tables as they are keywords in Derby
+ #'end' -> 'end1'
+ #'order' -> 'order1'
+ #'key' -> 'key1'
+ #'order' -> 'order1'
+ if($line =~ /^(.*)(\`(end|order|key|user))(\`)(.*)$/) {
+ $line = $1.$2."1".$4.$5."\n";
+ }
+ #Remove encapsulation of names `` are not needed for Derby
+ while($line =~ /^(.*)(\`)([A-Za-z_\d]+)(\`)(.*)$/) {
+ $line = $1.$3.$5." \n";
+ }
+ #Remove keyword 'unsigned' as this is not supported in Derby
+ if($line =~ /^(.*)(unsigned)(.*)$/) {
+ $line = $1." ".$3." \n";
+ }
+ #Remove encampsulation of default integer values '' are not needed in Derby
+ if($line =~ /^(.*)(default \'(\d+)\')(.*)$/) {
+ $line = $1."default ".$3.$4." \n";
+ }
+ #Remove 'NULL' keyword, it is not needed to specify that a column can be 'NULL'
+ if($line =~ /^(.*)(NULL default NULL)(.*)$/) {
+ $line = $1."default NULL".$3." \n";
+ }
+ #Remove 'COMMENT' statement, it is not supported in Derby
+ if($line =~ /^(.*)( COMMENT )(.*)$/) {
+ $line = $1.",\n";
+ }
+
+ #Type changes
+ #'tinyint' -> 'int'
+ if($line =~ /^(.*)(tinyint\(\d\) )(.*)$/) {
+ $line = $1."int ".$3." \n";
+ }
+ #'mediumint' -> 'int'
+ if($line =~ /^(.*)(mediumint\((\d|\d\d)\) )(.*)$/) {
+ $line = $1."int".$4." \n";
+ }
+ #Integer values do not need to specify a size
+ if($line =~ /^(.*)(int\((\d|\d\d)\) )(.*)$/) {
+ $line = $1."int ".$4." \n";
+ }
+ #'text' -> 'clob'
+ #'mediumtext' -> 'clob'
+ #'longtext' -> 'clob'
+ if($line =~ /^(.*)( (long|medium|)text)(.*)$/) {
+ $line = $1." clob".$4." \n";
+ }
+ #Enum type is not supported by Derby
+ #'enum' -> 'clob'
+ if($line =~ /^(.*)(enum\([\'a-zA-Z0-9\,_]+\))(.*)$/) {
+ $line = $1."clob".$3." \n";
+ }
+ #'datetime' -> 'timestamp'
+ if($line =~ /^(.*)(datetime)(.*)$/) {
+ $line = $1."timestamp".$3." \n";
+ }
+ #'timestamp' can not be 'NULL'
+ if($line =~ /^(.*)(timestamp default )(NULL,)/) {
+ $line = $1.$2."\'0000-00-00 00:00:00\',"."\n";
+ }
+ #'timestamp' needs a default value
+ if($line =~ /^(.*)(timestamp NOT NULL)(,)/) {
+ $line = $1.$2." default \'0000-00-00 00:00:00\',"."\n";
+ }
+
+ #As we changed 'enum' -> 'clob' Derby does not support uniqueness for strings
+ #remove the whole line as this may cause problems
+ #There should be a restriction in the web-code to prevent this
+ if($line =~ /^(.*)(UNIQUE \(resourcegroupid,privnodeid,type\))(.*)$/) {
+ $line = "";
+ }
+
+ #'timestamp' can not be skipped add NULL or 0001-01-01 xx:xx:xx' for imagerevision
+ if($line =~ /^(.*)(\', 0, 1, NULL, \')(.*)$/) {
+ $line = $1."', 0, NULL, 1, NULL, '".$3."\n";
+ }
+ if($line =~ /^(.*)(deleted, )(production)(.*)$/) {
+ $line = $1.$2."datedeleted, ".$3.$4."\n";
+ }
+ #'timestamp' value of '0000-00-00 xx:xx:xx' is not in the range changed to '0001-01-01 xx:xx:xx'
+ if($line =~ /^(.*)(0000-00-00)(.*)$/) {
+ $line = $1."0001-01-01".$3."\n";
+ }
+
+ #Remove 'ON UPDATE CASCADE' feature as it is not supported
+ if($line =~ /^(.*)( ON UPDATE CASCADE)(.*)$/) {
+ $line = $1.$3."\n";
+ }
+ #Each 'ADD CONSTRAIN' statement need to be encampsulated in its own 'ALTER TABLE'
+ #we end each row of 'ADD CONSTRAIN' statement with ';'
+ if($line =~ /^(.*)(ADD CONSTRAIN)(.*)(,)(\s*)$/) {
+ $line = $1.$2.$3.";\n";
+ }
+
+ #Add lines to intermediate list @mod
+ if($line ne "") {
+ push(@mod, $line);
+ }
+
+
+
+
+}
+
+#Loop throught the list to add chnages that involve several rows
+$max = @mod;
+$current = "";
+for ($i = 0; $i < $max; $i++) {
+ $line = $mod[$i];
+ $next = "";
+ if ($i < $max - 1) {
+ $next = $mod[$i+1];
+ }
+
+ #Due to the removal of row with keyword 'KEY" some changes need to be made to the cyntax
+ #the last statement in the 'CREATE TABLE' should not end with a ','
+ if(($line =~ /^(.*)(,)(\s*)$/) && ($next =~ /^\);$/)) {
+ $line =~ /^(.*)(,)(.*)$/;
+ $line = $1."\n";
+ }
+
+ #Each 'ADD CONSTRAIN' statement need to be encampsulated in its own 'ALTER TABLE'
+ if($line =~ /^(.*)(ALTER TABLE)(.*)$/) {
+ $current = $line;
+ }
+ if(($line =~ /^(.*)(ADD CONSTRAIN)(.*)$/) && ($mod[$i-1] =~ /^(.*)(ADD CONSTRAIN)(.*)$/)){
+ $out.= $current;
+ }
+
+ $out.= $line;
+}
+
+#Close the databse connection
+$out.="\ndisconnect;\n";
+$out.= "exit;\n";
+
+#save the new file
+open(OUT1, ">".$output);
+print OUT1 $out;
+close(OUT1);
Propchange: vcl/site/trunk/content/comm/commprojects/derby-parser.pl
------------------------------------------------------------------------------
svn:eol-style = native