App-Office-CMS

 view release on metacpan or  search on metacpan

lib/App/Office/CMS/Util/Create.pm  view on Meta::CPAN

	$self -> db(App::Office::CMS::Database -> new(config => $config) );
	$self -> creator(DBIx::Admin::CreateTable -> new(dbh => $self -> db -> dbh, verbose => 0) );
	$self -> engine($self -> creator -> db_vendor =~ /(?:Mysql)/i ? 'engine=innodb' : '');
	$self -> time_option($self -> creator -> db_vendor =~ /(?:Postgres)/i ? '(0) without time zone' : '');

}	# End of BUILD.

# -----------------------------------------------
# Well, all tables except the log table.

sub create_all_tables
{
	my($self) = @_;

	# Warning: The order is important.

	my($method);
	my($table_name);

	for $table_name (qw/
sessions
event_types
events
menu_orientations
os_types
sites
designs
asset_types
pages
menus
contents
assets
/)
	{
		$method = "create_${table_name}_table";

		$self -> $method;
	}

	return 0;

}	# End of create_all_tables.

# --------------------------------------------------

sub create_assets_table
{
	my($self)          = @_;
	my($table_name)    = 'assets';
	my($primary_key)   = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)        = $self -> engine;
	my($foreign_key_1) = $engine ? ', index (asset_type_id), foreign key (asset_type_id)' : '';
	my($foreign_key_2) = $engine ? ', index (design_id), foreign key (design_id)' : '';
	my($foreign_key_3) = $engine ? ', index (page_id), foreign key (page_id)' : '';
	my($foreign_key_4) = $engine ? ', index (site_id), foreign key (site_id)' : '';
	my($result)        = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
asset_type_id integer not null $foreign_key_1 references asset_types(id),
design_id integer not null $foreign_key_2 references designs(id) on delete cascade,
page_id integer not null $foreign_key_3 references pages(id) on delete cascade,
site_id integer not null $foreign_key_4 references sites(id) on delete cascade
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_assets_table.

# --------------------------------------------------

sub create_asset_types_table
{
	my($self)        = @_;
	my($table_name)  = 'asset_types';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
file_name varchar(255) not null,
file_path varchar(255) not null,
name varchar(255) not null,
upper_name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_asset_types_table.

# --------------------------------------------------

sub create_contents_table
{
	my($self)          = @_;
	my($table_name)    = 'contents';
	my($primary_key)   = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)        = $self -> engine;
	my($foreign_key_1) = $engine ? ', index (design_id), foreign key (design_id)' : '';
	my($foreign_key_2) = $engine ? ', index (page_id), foreign key (page_id)' : '';
	my($foreign_key_3) = $engine ? ', index (site_id), foreign key (site_id)' : '';
	my($result)        = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
design_id integer not null $foreign_key_1 references designs(id) on delete cascade,
page_id integer not null $foreign_key_2 references pages(id) on delete cascade,
site_id integer not null $foreign_key_3 references sites(id) on delete cascade,
body_text text not null,
head_text text not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_contents_table.

# --------------------------------------------------

sub create_designs_table
{
	my($self)          = @_;
	my($table_name)    = 'designs';
	my($primary_key)   = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)        = $self -> engine;
	my($foreign_key_1) = $engine ? ', index (menu_orientation_id), foreign key (menu_orientation_id)' : '';
	my($foreign_key_2) = $engine ? ', index (os_type_id), foreign key (os_type_id)' : '';
	my($foreign_key_3) = $engine ? ', index (site_id), foreign key (site_id)' : '';
	my($result)        = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
menu_orientation_id integer not null $foreign_key_1 references menu_orientations(id),
os_type_id integer not null $foreign_key_2 references os_types(id) on delete cascade,
site_id integer not null $foreign_key_3 references sites(id) on delete cascade,
name varchar(255) not null,
output_directory varchar(255) not null,
output_doc_root varchar(255) not null,
upper_name varchar(255) not null,
unique (site_id, upper_name)
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_designs_table.

# --------------------------------------------------

sub create_event_types_table
{
	my($self)        = @_;
	my($table_name)  = 'event_types';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
name varchar(255) not null,
upper_name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_event_types_table.

# --------------------------------------------------

sub create_events_table
{
	my($self)        = @_;
	my($table_name)  = 'events';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($time_option) = $self -> time_option;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
id_list varchar(255) not null,
timestamp timestamp $time_option not null default current_timestamp
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_events_table.

# --------------------------------------------------

sub create_log_table
{
	my($self)        = @_;
	my($table_name)  = 'log';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($type)        = $self -> creator -> db_vendor eq 'ORACLE' ? 'long' : 'text';

lib/App/Office/CMS/Util/Create.pm  view on Meta::CPAN

context varchar(255) not null,
name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_menus_table.

# --------------------------------------------------

sub create_menu_orientations_table
{
	my($self)        = @_;
	my($table_name)  = 'menu_orientations';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_menu_orientations_table.

# --------------------------------------------------

sub create_os_types_table
{
	my($self)        = @_;
	my($table_name)  = 'os_types';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_os_types_table.

# --------------------------------------------------

sub create_pages_table
{
	my($self)          = @_;
	my($table_name)    = 'pages';
	my($primary_key)   = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)        = $self -> engine;
	my($foreign_key_1) = $engine ? ', index (design_id), foreign key (design_id)' : '';
	my($foreign_key_2) = $engine ? ', index (site_id), foreign key (site_id)' : '';
	my($result)        = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
design_id integer not null $foreign_key_1 references designs(id) on delete cascade,
site_id integer not null $foreign_key_2 references sites(id) on delete cascade,
context varchar(255) not null,
homepage varchar(3) not null,
name varchar(255) not null,
upper_name varchar(255) not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_pages_table.

# -----------------------------------------------

sub create_sessions_table
{
	my($self)       = @_;
	my($table_name) = 'sessions';
	my($engine)     = $self -> engine;
	my($type)       = $self -> creator -> db_vendor eq 'ORACLE' ? 'long' : 'text';
	my($result)     = $self -> creator -> create_table(<<SQL, {no_sequence => 1});
create table $table_name
(
id char(32) not null primary key,
a_session $type not null
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_sessions_table.

# --------------------------------------------------

sub create_sites_table
{
	my($self)        = @_;
	my($table_name)  = 'sites';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($engine)      = $self -> engine;
	my($result)      = $self -> creator -> create_table(<<SQL);
create table $table_name
(
id $primary_key,
name varchar(255) not null,
upper_name varchar(255) not null,
unique (upper_name)
) $engine
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_sites_table.

# -----------------------------------------------

sub drop_table
{
	my($self, $table_name) = @_;

	$self -> creator -> drop_table($table_name);

} # End of drop_table.



( run in 0.893 second using v1.01-cache-2.11-cpan-524268b4103 )