Update repository generator to check for schema [skip ci]

This commit is contained in:
Akkadius 2020-04-03 02:38:37 -05:00
parent 3c9fe45af5
commit cbd2336442

View File

@ -1,41 +1,62 @@
#!/usr/bin/perl #!/usr/bin/perl
use warnings FATAL => 'all'; use warnings FATAL => 'all';
no warnings 'experimental::smartmatch';
use experimental 'smartmatch';
# Author: Akkadius # Author: Akkadius
# @file: repository-generator.pl # @file: repository-generator.pl
# @description: Script used to generate database repositories # @description: Script used to generate database repositories
# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/eqemu_config.json # @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/
use File::Find; use File::Find;
use Data::Dumper; use Data::Dumper;
use DBI;
use DBD::mysql;
use JSON;
my $json = new JSON();
############################################# #############################################
# args # args
############################################# #############################################
my $eqemu_config = $ARGV[0]; my $server_path = $ARGV[0];
my $config_path = $server_path . "/eqemu_config.json";
my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : ""; my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : "";
my $i = 0; #############################################
while ($ARGV[$i]) { # world path
# print "[$i] [" . $ARGV[$i] . "]\n"; #############################################
$i++; my $world_path = $server_path . "/world";
my $world_path_bin = $server_path . "/bin/world";
my $found_world_path = "";
if (-e $world_path) {
$found_world_path = $world_path;
}
elsif (-e $world_path_bin) {
$found_world_path = $world_path_bin;
} }
if (!-e $eqemu_config) { if ($found_world_path eq "") {
print "Error! Config file [$eqemu_config] not found\n"; print "Error! Cannot find world binary!\n";
exit; exit;
} }
#############################################
# validate config
#############################################
if (!-e $config_path) {
print "Error! Config file [$config_path] not found\n";
exit;
}
my $output = `cd $server_path && $found_world_path database:schema`;
my $database_schema = $json->decode($output);
############################################# #############################################
# database # database
############################################# #############################################
use DBI;
use DBD::mysql;
use JSON;
my $json = new JSON();
my $content; my $content;
open(my $fh, '<', $eqemu_config) or die "cannot open file $eqemu_config"; { open(my $fh, '<', $config_path) or die "cannot open file $config_path"; {
local $/; local $/;
$content = <$fh>; $content = <$fh>;
} }
@ -77,6 +98,29 @@ if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) {
my $generated_repository_files = ""; my $generated_repository_files = "";
foreach my $table_to_generate (@tables) { foreach my $table_to_generate (@tables) {
my $table_found_in_schema = 0;
my @categories = (
"content_tables",
"version_tables",
"state_tables",
"server_tables",
"player_tables",
"login_tables",
);
foreach my $category (@categories) {
if ($table_to_generate ~~ $database_schema->{$category}) {
$table_found_in_schema = 1;
}
}
if ($table_found_in_schema == 0) {
print "Table [$table_to_generate] not found in schema, skipping\n";
next;
}
my $ex = $connect->prepare( my $ex = $connect->prepare(
" "
SELECT SELECT
@ -242,6 +286,10 @@ foreach my $table_to_generate (@tables) {
my $primary_key = ($table_primary_key{$table_to_generate} ? $table_primary_key{$table_to_generate} : ""); my $primary_key = ($table_primary_key{$table_to_generate} ? $table_primary_key{$table_to_generate} : "");
my $database_connection = "database"; my $database_connection = "database";
if ($table_to_generate ~~ $database_schema->{"content_tables"}) {
$database_connection = "content_db";
}
chomp($column_names_quoted); chomp($column_names_quoted);
chomp($table_struct_columns); chomp($table_struct_columns);
chomp($default_entries); chomp($default_entries);