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