Files
scripts/cx2mysql.pl
2025-10-31 12:03:27 +01:00

138 lines
2.9 KiB
Perl

use strict;
use File::Slurp qw(:std);
use IO::Handle;
use File::Path qw(make_path);
use Data::Printer;
my $datei = 'admin.sql';
my @lines = read_file($datei);
write_file('admin2.sql', '');
my %spalten;
my $spaltenbestimmen = 0;
my $inserts = 0;
my $ignoreline = 0;
my $noreturn = 0;
for my $l ( @lines ) {
$noreturn = 0;
chomp($l);
if ( $l =~ /CREATE INDEX|CREATE UNIQUE/ ) {
$ignoreline = 1;
}
if ( $l eq "/" ) {
$inserts = 0;
}
if ( $inserts == 1 ) {
$l =~ s/" "/""/g;
$l =~ s/" /"/g;
$l =~ s/ "/"/g;
$l =~ s/'/\\'/g;
$l =~ s/,,,/,NULL,NULL,/g;
$l =~ s/,,/,NULL,/g;
$l =~ s/^,"/NULL,"/g;
$l = $l =~ s/,$//r;
$l = "($l),";
}
$l =~ s/~ME~/Ä/g;
$l =~ s/~NM~/Ü/g;
$l =~ s/~NG~/Ö/g;
$l =~ s/~OE~/ä/g;
$l =~ s/~PM~/ü/g;
$l =~ s/~PG~/ö/g;
$l =~ s/~NP~/ß/g;
$l =~ s/~ANAK~/\\n/g;
$l =~ s/ä/ä/g;
$l =~ s/~LF~/\\/g;
$l =~ s/ü/ü/g;
$l =~ s/ö/ö/g;
$l =~ s/"\\n"/""/g;
# if ( $l =~ /~..~/ ) {
# p $l;
# }
$l =~ s/\$long/""/g;
next if ( $l =~ /SET LOADVERSION|PCTFREE|^\\|~/ );
next if ( $l eq '/' );
if ( $l =~ /\$DATATYPES/ ) {
$l = "VALUES";
$inserts = 1;
}
if ( $l =~ /INSERT INTO/ ) {
$noreturn = 1;
$l = $l =~ s/VALUES//r;
$spaltenbestimmen = 0;
}
if ( $spaltenbestimmen > 0 ) {
if ( $l =~ /\)$/ ) {
$l = "$l;\n";
};
my @sp = split(/ /, $l);
$spalten{$spaltenbestimmen}= $sp[2];
$spaltenbestimmen += 1;
}
for my $z ( 0 .. 20 ) {
if ( $l =~ / :$z/ ) {
# print "$z $spalten{$z}\n";
$noreturn = 1;
$l = $l =~ s/:$z/$spalten{$z}/r;
}
}
if ( $l =~ /CREATE TABLE/ ) {
# p $l;
my $tabname = $l =~ s/CREATE TABLE SYSADM.//r;
$tabname =~ s/ \(//;
$l = "DROP TABLE IF EXISTS `$tabname`;\n" . $l;
p $l;
$l = $l =~ s/CREATE TABLE/CREATE TABLE IF NOT EXISTS/r;
$spaltenbestimmen = 1;
#if ( $l =~ /SYSADM.TEL_ALIASES|SYSADM.DATEIEN|SYSADM.PC_NET|SYSADM.PC_LOGIN|SYSADM.MMAC|SYSADM.PC_FILE|SYSADM.PC_RPRN|SYSADM.INV_INI|SYSADM.PC_KARTEN|SYSADM.HD_LOESUNG|SYSADM.HD_STICHWORT|SYSADM.HD_MELDG|SYSADM.TEL_TELEFON|SYSADM.TEL_NAMEN|SYSADM.PROXYMAILLOG/ ) {
if ( $l =~ /SYSADM.CX_/ ) {
if ( $l =~ /CX_IPOLD/ ) {
$ignoreline = 1;
} else {
$ignoreline = 0;
}
} else {
$ignoreline = 1;
}
}
if ( $ignoreline == 1 ) {
next;
};
next if ( $l eq '(//),' );
$l =~ s/SYSADM.//g;
append_file("admin2.sql", $l.( $noreturn == 1 ? "": "\n") );
}
my $lin = read_file("admin2.sql");
$lin =~ s/\),\nDROP/\);\n\nDROP/g; #
$lin =~ s/, OBJ0/, I2/g;
$lin =~ s/\),$/\);/;
write_file('cx.sql', $lin);
1;