use File::Spec::Functions qw/catfile catdir/;
use File::Find;
use Config;
+use DBI;
plan skip_all => 'Enable this optional test with $ENV{C_M_DBIC_SCHEMA_TESTAPP}'
unless $ENV{C_M_DBIC_SCHEMA_TESTAPP};
my $schema_dir = catdir ($catlib_dir, 'TestSchemaDSN');
my $creator = catfile($cat_dir, 'script', 'testapp_create.pl');
my $model_dir = catdir ($catlib_dir, 'TestApp', 'Model');
-my $db = catdir ($cat_dir, 'testdb.db');
+my $db = catfile($cat_dir, 'testdb.db');
my $catalyst_pl;
chdir($cat_dir);
# create test db
-open my $sql, '|-', "sqlite3 $db" or die $!;
-print $sql <<'EOF';
+my $dbh = DBI->connect("dbi:SQLite:$db", '', '', {
+ RaiseError => 1, PrintError => 0
+});
+$dbh->do(<<'EOF');
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT,
last_name TEXT,
active INTEGER
);
+EOF
+$dbh->do(<<'EOF');
CREATE TABLE roles (
id INTEGER PRIMARY KEY,
role TEXT
);
EOF
-close $sql;
+$dbh->disconnect;
foreach my $tparam (@$test_params) {
my ($model, $helper, @args) = @$tparam;
ok(($m = instance(schema_class => 'AnotherSchemaClass')), 'instance');
-is $m->resultset('Users')->rs_config_option, 'configured rs value',
+is $m->resultset('User')->rs_config_option, 'configured rs value',
'ResultSet option passed from config';
done_testing;
package MyApp;
use Catalyst;
__PACKAGE__->config({
- 'Model::DB::Users' => {
+ 'Model::DB::User' => {
rs_config_option => 'configured rs value',
},
});
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+use Test::Exception;
+use FindBin;
+use lib "$FindBin::Bin/lib";
+use File::Spec::Functions 'catfile';
+use DBI;
+
+my $test_dir = $FindBin::Bin;
+my $db = catfile($test_dir, 'testdb.db');
+
+my $dbh = DBI->connect("dbi:SQLite:$db", '', '', {
+ RaiseError => 1, PrintError => 0
+});
+
+$dbh->do(<<'EOF');
+create table users (
+ id integer primary key,
+ first_name varchar(100),
+ middle_name varchar(100),
+ last_name varchar(100),
+ email_address varchar(100)
+)
+EOF
+$dbh->disconnect;
+
+my $model = instance();
+my $rs = $model->resultset('User');
+
+my $row = $rs->create({ first_name => 'Foo', last_name => 'Bar' });
+
+$row->first_name(\['last_name']);
+
+lives_ok {
+ $row->update;
+} 'update survived';
+
+$row->discard_changes;
+
+is $row->first_name, 'Bar',
+ 'row updated with literal SQL through accessor';
+
+done_testing;
+
+sub instance {
+ MyApp::Model::DB->COMPONENT('MyApp', {
+ schema_class => 'ASchemaClass',
+ connect_info => ["dbi:SQLite:$db", '', ''],
+ @_,
+ })
+}
+
+{
+ package MyApp;
+ use Catalyst;
+}
+{
+ package MyApp::Model::DB;
+ use base 'Catalyst::Model::DBIC::Schema';
+}
+
+END {
+ $model->storage->disconnect if $model;
+ unlink $db or die "Could not delete $db: $!";
+}
--- /dev/null
+package ASchemaClass::User;
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table("users");
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "first_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "middle_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "last_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "email_address",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+);
+__PACKAGE__->set_primary_key("id");
+
+1;
+++ /dev/null
-package ASchemaClass::Users;
-
-# empty schemas no longer work
-
-use strict;
-use warnings;
-
-use base 'DBIx::Class';
-
-__PACKAGE__->load_components("Core");
-__PACKAGE__->table("users");
-
-1;
--- /dev/null
+package AnotherSchemaClass::Result::User;
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table("users");
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "first_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "middle_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "last_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "email_address",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+);
+__PACKAGE__->set_primary_key("id");
+
+1;
+++ /dev/null
-package AnotherSchemaClass::Result::Users;
-
-# empty schemas no longer work
-
-use strict;
-use warnings;
-
-use base 'DBIx::Class';
-
-__PACKAGE__->load_components("Core");
-__PACKAGE__->table("users");
-
-1;
-package AnotherSchemaClass::ResultSet::Users;
+package AnotherSchemaClass::ResultSet::User;
use strict;
use warnings;
--- /dev/null
+package TestAppC3Fail::Schema::DB::User;
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table("users");
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "first_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "middle_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "last_name",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+ "email_address",
+ { data_type => "varchar", is_nullable => 1, size => 100 },
+);
+__PACKAGE__->set_primary_key("id");
+
+1;
+++ /dev/null
-package TestAppC3Fail::Schema::DB::Users;
-
-# empty schemas no longer work
-
-use strict;
-use warnings;
-
-use base 'DBIx::Class';
-
-__PACKAGE__->load_components("Core");
-__PACKAGE__->table("users");
-
-1;