Maypole Segfaults

ajt on 2005-05-26T10:28:08

I'm again trying to use Maypole. After battling with it for some time, I decided to give up and start from a clean slate. I created the first table, and that was okay, then I added a second, and linked them, and that was okay. Any additional tables cause a segfault in the Apache/mod_perl process when I try to view them. I'm sure it's something stupid, but I can't see it, and it is driving me mad!

Here is how the SQLite tables are created:

create table asset (
        id integer primary key,
        name varchar(50),
        department integer,
        language integer,
        qpnumber integer,
        conumber integer,
        country integer,
        user integer,
        projectid varchar(30),
        category varchar(30),
        datecreated varchar(30),
        dateapproved varchar(30),
        description text
);


INSERT INTO asset
        (id, projectid, name,  department, language, qpnumber, conumber, category, description, user, datecreated, dateapproved, country) VALUES
        (1,  1,         "Foo", 1,          2,        1,        1,       "drawing", "Foo",       1,    "today",     "tomorrow",   1);

INSERT INTO asset
        (id, projectid, name,  department, language, qpnumber, conumber, category, description, user, datecreated, dateapproved, country) VALUES
        (2,  2,         "Bar", 1,          1,        2,        2,       "drawing", "Bar",       1,    "today",     "tomorrow",   1);

#
#       The Department table
#

create table department (
    id integer primary key,
    name varchar(30),
    notes text
);

INSERT INTO department
        (id, name, notes) VALUES
        (1,  "Marketing", "The spenders of money");
INSERT INTO department
        (id, name, notes) VALUES
        (2,  "SAP/IT", "The unsung heroes");

#
#       The Language table
#

create table language (
        id primary key,
        name varchar(30),
        iso varchar(8),
        notes text
);

INSERT INTO language
        (id, name,      iso,  notes) VALUES
        (1,  "English", "en", "English Language");
INSERT INTO language
        (id, name,                iso,  notes) VALUES
        (2,  'English (British)', "en-GB", "British English");
INSERT INTO language
        (id, name,                 iso,  notes) VALUES
        (3,  'English (American)', "en-US", "American English");
INSERT INTO language
        (id, name,     iso,  notes) VALUES
        (4,  'French', "fr", "French");
#
#       The conumber table
#

create table conumber (
        id primary key,
        name varchar(30),
        datecreated varchar(10),
        user integer,
        department integer,
        notes text
);

INSERT INTO conumber
        (id, name,    datecreated, user, department, notes) VALUES
        (1,  "CO567", "today",    1,    2,          "Womble");
INSERT INTO conumber
        (id, name,    datecreated, user, department, notes) VALUES
        (2,  "CO767", "today",    2,    1,          "Burp");
INSERT INTO conumber
        (id, name,    datecreated, user, department, notes) VALUES
        (3,  "CO5h7", "tomorrow", 1,    1,          "humble");


#
#       The country table
#

create table country (
        id primary key,
        name varchar(30),
        operation varchar(30),
        notes text
);

INSERT INTO country
        (id, name,             operation, notes) VALUES
        (1,  "United Kingdom", "UK",      "UK Sales company");
INSERT INTO country
        (id, name,             operation, notes) VALUES
        (2,  "United Kingdom", "IHQ",      "International Headquarters");
INSERT INTO country
        (id, name,     operation, notes) VALUES
        (3,  "France", "FR",      "French Sales company");

That creates a tiny sqlite db, that we then access via Maypole. Here is the Maypole code.

package Ibudb;


#
#       Load modules
#

use strict;
use Maypole::Application;
use Class::DBI::Loader::Relationship;


#
#       Base configuration
#


Ibudb->setup("dbi:SQLite:/home/web/vhost/alarisibu/ibu/ibu.db");
Ibudb->config->uri_base("http://dev.alarisibu.int.alarismed.com/ibudb/");
Ibudb->config->template_root("/home/web/vhost/alarisibu/ibu/factory");
Ibudb->config->rows_per_page(10);


#
#       Define the tables to Display
#


Ibudb->config->display_tables([qw[asset department language conumber country]]);


#       asset table
Ibudb::Asset->untaint_columns(
        printable => [qw/name category dateapproved datecreated qpnumber projectid description/],
        integer   => [qw/user/] );


#       department table
Ibudb::Department->untaint_columns( printable => [qw/name notes/] );


#       language table
Ibudb::Language->untaint_columns( printable => [qw/name iso notes/] );


#       conumber table
Ibudb::Conumber->untaint_columns( printable => [qw/name datecreated notes/] );

#       country table
Ibudb::Country->untaint_columns( printable => [qw/name operation notes/] );

#
#       Define the table-table relationships
#

Ibudb->config->{loader}->relationship($_) for (
        "a department defines assets",
        "a department defines conumbers",
        "a language defines assets",
        "a conumber defines assets",
        "a country defines assets",
        "a country defines conumbers",
);

1;

I can view the asset table okay, and the department page, any other table causes a segfault...