use Data::Dumper;
use SQL::Translator::Schema::Constants;
use SQL::Translator::Utils qw(debug header_comment parse_dbms_version);
+use SQL::Translator::ProducerUtils;
+my $util = SQL::Translator::ProducerUtils->new( quote_chars => q(') );
our ( $DEBUG, $WARN );
-
our $VERSION = '1.59';
$DEBUG = 0 unless defined $DEBUG;
$WARN = 0 unless defined $WARN;
}
$scope->{ $name }++;
- return $name;
+ return $util->quote($name);
}
sub create_view {
my ($view, $options) = @_;
my $add_drop_view = $options->{add_drop_view};
- my $view_name = $view->name;
- $global_names{$view_name} = 1;
+ my $view_name = $util->quote($view->name);
+ $global_names{$view->name} = 1;
debug("PKG: Looking at view '${view_name}'\n");
{
my ($table, $options) = @_;
- my $table_name = $table->name;
- $global_names{$table_name} = 1;
+ my $table_name = $util->quote($table->name);
+ $global_names{$table->name} = 1;
my $no_comments = $options->{no_comments};
my $add_drop_table = $options->{add_drop_table};
||
( @pk_fields && !grep /INTEGER PRIMARY KEY/, @field_defs )
) {
- push @field_defs, 'PRIMARY KEY (' . join(', ', @pk_fields ) . ')';
+ push @field_defs, 'PRIMARY KEY (' . join(', ', map $util->quote($_), @pk_fields ) . ')';
}
#
sub create_foreignkey {
my $c = shift;
- my $fk_sql = "FOREIGN KEY($c->{fields}[0]) REFERENCES ";
- $fk_sql .= ( $c->{reference_table} || '' )."(".( $c->{reference_fields}[0] || '' ).")";
+ my $field = $util->quote($c->{fields}[0]);
+ my $table = $c->{reference_table} ? $util->quote($c->{reference_table}) : '';
+ my $ref = $c->{reference_fields}[0] ? $util->quote($c->{reference_fields}[0]) : '';
+ my $fk_sql = "FOREIGN KEY($field) REFERENCES ";
+ $fk_sql .= "$table($ref)";
return $fk_sql;
}
{
my ($field, $options) = @_;
- my $field_name = $field->name;
+ my $field_name = $util->quote($field->name);
debug("PKG: Looking at field '$field_name'\n");
my $field_comments = $field->comments
? "-- " . $field->comments . "\n "
my $type = $index->type eq 'UNIQUE' ? "UNIQUE " : '';
# strip any field size qualifiers as SQLite doesn't like these
- my @fields = map { s/\(\d+\)$//; $_ } $index->fields;
+ my @fields = map { s/\(\d+\)$//; $util->quote($_) } $index->fields;
(my $index_table_name = $index->table->name) =~ s/^.+?\.//; # table name may not specify schema
+ $index_table_name = $util->quote($index_table_name);
warn "removing schema name from '" . $index->table->name . "' to make '$index_table_name'\n" if $WARN;
my $index_def =
"CREATE ${type}INDEX $name ON " . $index_table_name .
my $name = $c->name;
$name = mk_name($name);
- my @fields = $c->fields;
+ my @fields = map $util->quote($_), $c->fields;
(my $index_table_name = $c->table->name) =~ s/^.+?\.//; # table name may not specify schema
+ $index_table_name = $util->quote($index_table_name);
warn "removing schema name from '" . $c->table->name . "' to make '$index_table_name'\n" if $WARN;
my $c_def =
"creating trigger '$trig_name' for the '$evt' event.\n" if $WARN;
}
+ $trig_name = $util->quote($trig_name);
push @statements, "DROP TRIGGER IF EXISTS $trig_name" if $add_drop;
$trig_name,
$trigger->perform_action_when,
$evt,
- $trigger->on_table,
+ $util->quote($trigger->on_table),
$action
);
}
my ($field) = @_;
return sprintf("ALTER TABLE %s ADD COLUMN %s",
- $field->table->name, create_field($field))
+ $util->quote($field->table->name), create_field($field))
}
sub alter_create_index {
my ($constraint) = @_;
return sprintf("DROP INDEX %s",
- $constraint->name);
+ $util->quote($constraint->name));
}
sub batch_alter_table {
push @sql,$table_sql;
};
- push @sql, "INSERT INTO @{[$table_name]}_temp_alter SELECT @{[ join(', ', $old_table->get_fields)]} FROM @{[$old_table]}",
- "DROP TABLE @{[$old_table]}",
+ push @sql, "INSERT INTO @{[$util->quote($table_name.'_temp_alter')]} SELECT @{[ join(', ', map $util->quote($_), $old_table->get_fields)]} FROM @{[$util->quote($old_table)]}",
+ "DROP TABLE @{[$util->quote($old_table)]}",
create_table($table, { no_comments => 1 }),
- "INSERT INTO @{[$table_name]} SELECT @{[ join(', ', $old_table->get_fields)]} FROM @{[$table_name]}_temp_alter",
- "DROP TABLE @{[$table_name]}_temp_alter";
+ "INSERT INTO @{[$util->quote($table_name)]} SELECT @{[ join(', ', map $util->quote($_), $old_table->get_fields)]} FROM @{[$util->quote($table_name.'_temp_alter')]}",
+ "DROP TABLE @{[$util->quote($table_name.'_temp_alter')]}";
return @sql;
# return join("", @sql, "");
sub drop_table {
my ($table) = @_;
+ $table = $util->quote($table);
return "DROP TABLE $table";
}
sub rename_table {
my ($old_table, $new_table, $options) = @_;
- my $qt = $options->{quote_table_names} || '';
+ $old_table = $util->quote($old_table);
+ $new_table = $util->quote($new_table);
- return "ALTER TABLE $qt$old_table$qt RENAME TO $qt$new_table$qt";
+ return "ALTER TABLE $old_table RENAME TO $new_table";
}