The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use DBI;

my $dbfile = $ENV{'TESTAPP_DB_FILE'};

if (-e $dbfile) {
	unlink($dbfile);
}

my $dbh = DBI->connect("dbi:SQLite:$dbfile") or die($DBI::errstr);

my $sql = <<'EOSQL';
CREATE TABLE user (
  id integer not null,
  name text not null,
  password text not null,
  active integer not null,
  CONSTRAINT pk_user PRIMARY KEY (id)
);
CREATE UNIQUE INDEX idx_user_name
  ON user (name);

CREATE TABLE role (
  id integer not null,
  name text not null,
  CONSTRAINT pk_role PRIMARY KEY (id)
);
CREATE UNIQUE INDEX idx_role_name
  ON role (name);

CREATE TABLE userrole (
  user integer not null,
  role integer not null,
  CONSTRAINT pk_userrole PRIMARY KEY (user, role)
);

INSERT INTO user VALUES (1, 'joe', 'x', 1);
INSERT INTO user VALUES (2, 'bob', 'y', 1);
INSERT INTO user VALUES (3, 'martin', 'z', 0);

INSERT INTO role VALUES (1, 'admin');
INSERT INTO role VALUES (2, 'user');

INSERT INTO userrole VALUES (1, 1);
INSERT INTO userrole VALUES (1, 2);
INSERT INTO userrole VALUES (2, 1);
INSERT INTO userrole VALUES (3, 2);
EOSQL

for (split(m/;\s*/, $sql)) {
	$dbh->do($_) or die($dbh->errstr);
}
$dbh->disconnect();