view Lib/IMPL/SQL/Schema/Traits/MysqlFormatter.pm @ 269:dacfe7c0311a

SQL schema updated (unstable)
author sergey
date Thu, 24 Jan 2013 20:00:27 +0400
parents
children
line wrap: on
line source

package IMPL::SQL::Schema::Traits::MysqlFormatter;
use strict;

sub quote{
	my $self = shift;
	
    if (wantarray) {
        return map { my $str=$_; $str=~ s/'/''/g; "'$str'"; } @_;
    } else {
        return join '',map { my $str=$_; $str=~ s/'/''/g; "'$str'"; } @_;
    }
}

sub quote_names {
	my $self = shift;
	
    if (wantarray) {
        return map { my $str=$_; $str=~ s/`/``/g; "`$str`"; } @_;
    } else {
        return join '',map { my $str=$_; $str=~ s/`/``/g; "`$str`"; } @_;
    }
}

sub FormatTypeName {
	my ($self,$type) = @_;
	
}

sub FormatValue {
	my ($self,$value,$type) = @_;
}

sub FormatColumn {
	my ($self, $column) = @_;
	
	my @parts = (
	   $self->quote_names($column->{name}),
	   $self->FormatTypeName($column->{type}),
	   $column->isNullable ? 'NULL' : 'NOT NULL'
    );
    
    push @parts, $self->FormatValue( $column->{defaultValue}, $column->{type} )
        if $column->{defaultValue};
        
    push @parts, 'AUTO_INCREMENT'
        if $column->{tag} and $column->{tag}->{auto_increment};
	
	return join ' ', @parts;
}

sub FormatCreateTable {
	my ($self,$op) = @_;
	
	my $table = $op->table;
	
	my @lines;
	
	push @lines, "CREATE TABLE (";
	
	push @lines, map { "  " . $self->FormatColumn($_) } @{$table->{columns}}
	   if $table->{columns};
	
	push @lines, ");";
	
	return join "\n",@lines;
}

sub FormatDropTable {
	my ($self,$op) = @_;
	
	return join ' ',
	   'DROP TABLE',
	   $self->quote_names($op->{tableName}),
	   ';';
}

sub FormatRenameTable {
	my ($self,$op) = @_;
	
	return join ' ',
	   'ALTER TABLE',
	   $self->quote_names($op->{tableName}),
	   'RENAME TO',
	   $self->quote_names($op->{tableNewName}),
	   ';';	
}

sub FormatAlterTableAddColumn {
	my ($this,$op,$schema) = @_;
	
	my @parts;
	
	$schema->GetTable($op->{tableName})
}

1;