CGI-Application-Demo-Basic

 view release on metacpan or  search on metacpan

lib/CGI/Application/Demo/Basic/Util/Create.pm  view on Meta::CPAN

package CGI::Application::Demo::Basic::Util::Create;

# Note:
#	o tab = 4 spaces || die
#
# Author:
#	Ron Savage <ron@savage.net.au>
#	Home page: http://savage.net.au/index.html

use strict;
use warnings;

use CGI::Application::Demo::Basic::Util::Config;

use DBI;

use DBIx::Admin::CreateTable;

use File::Slurp; # For read_file.

use FindBin::Real;

use Hash::FieldHash qw(:all);

fieldhash my %config           => 'config';
fieldhash my %config_file_name => 'config_file_name';
fieldhash my %creator          => 'creator';
fieldhash my %db_vendor        => 'db_vendor';
fieldhash my %dbh              => 'dbh';
fieldhash my %sequence         => 'sequence';

our $VERSION = '1.06';

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

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

	$self -> create_faculty_table;
	$self -> create_log_table;
	$self -> create_sessions_table;

	my($config) = CGI::Application::Demo::Basic::Util::Config -> new($self -> config_file_name) -> config;
	my($dsn)    = $$config{dsn};
	$dsn        =~ s/.+dbname=(.+)/$1/;

	if ($self -> db_vendor eq 'SQLITE')
	{
		`chmod a+w $dsn`;
	}

}	# End of create_all_tables.

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

sub create_faculty_table
{
	my($self)        = @_;
	my($table_name)  = 'faculty';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($result)      = $self -> creator -> create_table(<<SQL);
create table faculty
(
faculty_id $primary_key,
faculty_name varchar(255) not null
)
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_faculty_table.

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

sub create_log_table
{
	my($self)          = @_;
	my($table_name)    = 'log';
	my($primary_key) = $self -> creator -> generate_primary_key_sql($table_name);
	my($result)      = $self -> creator -> create_table(<<SQL);
create table log
(
id $primary_key,
timestamp timestamp,
lvl varchar(9),
message varchar(255)
)
SQL
	$self -> report($table_name, 'created', $result);

}	# End of create_log_table.

# --------------------------------------------------
# Note: The sessions table is a special case.

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



( run in 2.344 seconds using v1.01-cache-2.11-cpan-56fb94df46f )