79 lines
2.7 KiB
PHP
79 lines
2.7 KiB
PHP
perl;
|
|
use strict;
|
|
my $path = "$ENV{'PATH_TO_TABLE'}";
|
|
if ($path eq "") { die "No path given!"; }
|
|
my @found_files = glob($path . "*.MYD");
|
|
if ($#found_files >= 0) {
|
|
print "found " . (1 + $#found_files) . " *.MYD file(s)\n";
|
|
}
|
|
@found_files = glob($path . "*.ibd");
|
|
if ($#found_files >= 0) {
|
|
print "found " . (1 + $#found_files) . " *.ibd file(s)\n";
|
|
}
|
|
if (-e $path . ".par") {
|
|
print ".par file exists\n";
|
|
}
|
|
my $frm_file = $path . ".frm";
|
|
if (not -e $frm_file) {
|
|
die $frm_file . " does not file exists!";
|
|
}
|
|
open(FH, "<", $frm_file) or die "Failed to open '$frm_file'";
|
|
binmode FH;
|
|
my $bin_val;
|
|
seek(FH, 0x33, 0) or die "Failed to seek";
|
|
my $res= read FH, $bin_val, 4;
|
|
die "Failed to read bin_val! res: $res" unless ($res == 4);
|
|
my $frm_ver = unpack("V", $bin_val);
|
|
if ($frm_ver >= 50708) {
|
|
print ".frm created by version >= 5.7.8\n";
|
|
} else {
|
|
print ".frm created by version: $frm_ver\n";
|
|
}
|
|
seek(FH, 3, 0) or die "Failed to seek";
|
|
my $res= read FH, $bin_val, 1;
|
|
die "Failed to read bin_val! res: $res" unless ($res == 1);
|
|
print "DB_TYPE (byte 3): " . unpack("C", $bin_val) . "\n";
|
|
seek(FH, 61, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 1;
|
|
die "Failed to read bin_val! res: $res" unless ($res == 1);
|
|
print "DEFAULT_PART_DB_TYPE (byte 61): " . unpack("C", $bin_val) . "\n";
|
|
# Also check the engine name
|
|
seek(FH, 55, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 4;
|
|
my $length = unpack("V", $bin_val);
|
|
if ($length != 0)
|
|
{
|
|
# see from table.cc (reading .frm file)
|
|
seek(FH, 6, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 2;
|
|
my $record_offset= unpack("v", $bin_val);
|
|
seek(FH, 14, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 2;
|
|
my $tmp = unpack("v", $bin_val);
|
|
if ($tmp == 0xffff)
|
|
{
|
|
seek(FH, 47, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 4;
|
|
$tmp= unpack("V", $bin_val);
|
|
}
|
|
$record_offset+= $tmp;
|
|
seek(FH, 16, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 2;
|
|
$tmp = unpack("v", $bin_val);
|
|
$record_offset+= $tmp;
|
|
# connect string length + string
|
|
seek(FH, $record_offset, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 2;
|
|
die "Failed to read bin_val! res: $res" unless ($res == 2);
|
|
$length= unpack("v", $bin_val);
|
|
seek(FH, $record_offset + 2 + $length, 0) or die "Failed to seek";
|
|
$res= read FH, $bin_val, 2;
|
|
die "Failed to read bin_val! res: $res" unless ($res == 2);
|
|
$length= unpack("v", $bin_val);
|
|
$res= read FH, $bin_val, $length;
|
|
die "Failed to read bin_val! res: $res" unless ($res == $length);
|
|
print "DB_TYPE string: '" . $bin_val . "'\n";
|
|
}
|
|
close(FH);
|
|
EOF
|