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 )