mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 17:51:28 +00:00
[Repository Generator] Add int64/bigint support, add support for reserved words (#1439)
This commit is contained in:
parent
ab89fe13b4
commit
b68607a6ef
@ -188,10 +188,11 @@ foreach my $table_to_generate (@tables) {
|
||||
my $longest_data_type_length = 0;
|
||||
while (my @row = $ex->fetchrow_array()) {
|
||||
my $column_name = $row[0];
|
||||
my $column_name_formatted = format_column_name_for_cpp_var($column_name);
|
||||
my $data_type = $row[2];
|
||||
|
||||
if ($longest_column_length < length($column_name)) {
|
||||
$longest_column_length = length($column_name);
|
||||
if ($longest_column_length < length($column_name_formatted)) {
|
||||
$longest_column_length = length($column_name_formatted);
|
||||
}
|
||||
|
||||
my $struct_data_type = translate_mysql_data_type_to_c($data_type);
|
||||
@ -217,6 +218,7 @@ foreach my $table_to_generate (@tables) {
|
||||
|
||||
while (my @row = $ex->fetchrow_array()) {
|
||||
my $column_name = $row[0];
|
||||
my $column_name_formatted = format_column_name_for_cpp_var($column_name);
|
||||
my $table_name = $row[1];
|
||||
my $data_type = $row[2];
|
||||
my $column_type = $row[3];
|
||||
@ -231,8 +233,13 @@ foreach my $table_to_generate (@tables) {
|
||||
}
|
||||
}
|
||||
|
||||
print $column_default . "\n";
|
||||
|
||||
my $default_value = 0;
|
||||
if ($column_default ne "NULL" && $column_default ne "") {
|
||||
if ($column_default eq "current_timestamp()") {
|
||||
$default_value = '""';
|
||||
}
|
||||
elsif ($column_default ne "NULL" && $column_default ne "") {
|
||||
$column_default =~ s/'/"/g;
|
||||
$default_value = $column_default;
|
||||
}
|
||||
@ -246,19 +253,19 @@ foreach my $table_to_generate (@tables) {
|
||||
my $struct_data_type = translate_mysql_data_type_to_c($data_type);
|
||||
|
||||
# struct
|
||||
$table_struct_columns .= sprintf("\t\t\%-${longest_data_type_length}s %s;\n", $struct_data_type, $column_name);
|
||||
$table_struct_columns .= sprintf("\t\t\%-${longest_data_type_length}s %s;\n", $struct_data_type, $column_name_formatted);
|
||||
|
||||
# new entity
|
||||
$default_entries .= sprintf("\t\tentry.%-${longest_column_length}s = %s;\n", $column_name, $default_value);
|
||||
$default_entries .= sprintf("\t\tentry.%-${longest_column_length}s = %s;\n", $column_name_formatted, $default_value);
|
||||
|
||||
# column names (string)
|
||||
$column_names_quoted .= sprintf("\t\t\t\"%s\",\n", $column_name);
|
||||
$column_names_quoted .= sprintf("\t\t\t\"%s\",\n", format_column_name_for_mysql($column_name));
|
||||
|
||||
# update one
|
||||
if ($extra ne "auto_increment") {
|
||||
my $query_value = sprintf('\'" + EscapeString(%s_entry.%s) + "\'");', $table_name, $column_name);
|
||||
my $query_value = sprintf('\'" + EscapeString(%s_entry.%s) + "\'");', $table_name, $column_name_formatted);
|
||||
if ($data_type =~ /int|float|double|decimal/) {
|
||||
$query_value = sprintf('" + std::to_string(%s_entry.%s));', $table_name, $column_name);
|
||||
$query_value = sprintf('" + std::to_string(%s_entry.%s));', $table_name, $column_name_formatted);
|
||||
}
|
||||
|
||||
$update_one_entries .= sprintf(
|
||||
@ -269,26 +276,30 @@ foreach my $table_to_generate (@tables) {
|
||||
}
|
||||
|
||||
# insert
|
||||
my $value = sprintf("\"'\" + EscapeString(%s_entry.%s) + \"'\"", $table_name, $column_name);
|
||||
my $value = sprintf("\"'\" + EscapeString(%s_entry.%s) + \"'\"", $table_name, $column_name_formatted);
|
||||
if ($data_type =~ /int|float|double|decimal/) {
|
||||
$value = sprintf('std::to_string(%s_entry.%s)', $table_name, $column_name);
|
||||
$value = sprintf('std::to_string(%s_entry.%s)', $table_name, $column_name_formatted);
|
||||
}
|
||||
|
||||
$insert_one_entries .= sprintf("\t\tinsert_values.push_back(%s);\n", $value);
|
||||
$insert_many_entries .= sprintf("\t\t\tinsert_values.push_back(%s);\n", $value);
|
||||
|
||||
# find one / all (select)
|
||||
if ($data_type =~ /int/) {
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index);
|
||||
if ($data_type =~ /bigint/) {
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = strtoll(row[%s], NULL, 10);\n", $column_name_formatted, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = strtoll(row[%s], NULL, 10);\n", $column_name_formatted, $index);
|
||||
}
|
||||
elsif ($data_type =~ /int/) {
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name_formatted, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name_formatted, $index);
|
||||
}
|
||||
elsif ($data_type =~ /float|double|decimal/) {
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast<float>(atof(row[%s]));\n", $column_name, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast<float>(atof(row[%s]));\n", $column_name, $index);
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast<float>(atof(row[%s]));\n", $column_name_formatted, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast<float>(atof(row[%s]));\n", $column_name_formatted, $index);
|
||||
}
|
||||
else {
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index);
|
||||
$all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name_formatted, $index, $index);
|
||||
$find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name_formatted, $index, $index);
|
||||
}
|
||||
|
||||
# print $column_name . "\n";
|
||||
@ -468,8 +479,7 @@ sub translate_mysql_data_type_to_c {
|
||||
$struct_data_type = 'int';
|
||||
}
|
||||
elsif ($mysql_data_type =~ /bigint/) {
|
||||
$struct_data_type = 'int';
|
||||
# Use regular int for now until we have 64 support
|
||||
$struct_data_type = 'int64';
|
||||
}
|
||||
elsif ($mysql_data_type =~ /int/) {
|
||||
$struct_data_type = 'int';
|
||||
@ -480,3 +490,34 @@ sub translate_mysql_data_type_to_c {
|
||||
|
||||
return $struct_data_type;
|
||||
}
|
||||
|
||||
# This is so we can change reserved words on the cpp side to something that will continue be functional in the compilers
|
||||
sub get_reserved_cpp_variable_names {
|
||||
return (
|
||||
"class",
|
||||
"int"
|
||||
);
|
||||
}
|
||||
|
||||
sub format_column_name_for_cpp_var {
|
||||
my $column_name = $_[0];
|
||||
|
||||
for my $word (get_reserved_cpp_variable_names()) {
|
||||
if ($word eq $column_name) {
|
||||
return $column_name . "_";
|
||||
}
|
||||
}
|
||||
|
||||
return $column_name;
|
||||
}
|
||||
|
||||
sub format_column_name_for_mysql {
|
||||
my $column_name = $_[0];
|
||||
for my $word (get_reserved_cpp_variable_names()) {
|
||||
if ($word eq $column_name) {
|
||||
return "`" . $column_name . "`";
|
||||
}
|
||||
}
|
||||
|
||||
return $column_name;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user