#!/usr/bin/perl use strict; use warnings; use lib './lib'; use TEST::Schema; my $schema = TEST::Schema->connect( 'dbi:mysql:database=test;host=192.168.15.222', 'user', 'pass'); my $main = $schema->resultset( 'Main' ); $schema->txn_do( sub { $main->find_or_create( { data => { some_dat => 'blah', more_dat => 'more blah' }, info1 => { info1_1 => 'unique blah 1', info1_2 => 'unique blah 2' }, info2 => { info2_1 => 'more ublah 1', info2_2 => 'more ublah 2' } } ); } ); #### swilson@swilson-mbp-vdebian:~/perl/test$ ./test.pl DBIx::Class::ResultSet::find_or_create(): DBI Exception: DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MORE_DAT 'more blah' AND me.data SOME_DAT 'blah' ) AND me.pk IS NULL ) )' at line 1 [for Statement "SELECT me.pk, me.data_fk FROM main me WHERE ( ( ( me.data MORE_DAT ? AND me.data SOME_DAT ? ) AND me.pk IS NULL ) )" with ParamValues: 0='more blah', 1='blah'] at ./test.pl line 16 #### mysql> show create table main; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------+ | main | CREATE TABLE `main` ( `pk` int(10) unsigned NOT NULL AUTO_INCREMENT, `data_fk` int(10) unsigned NOT NULL, PRIMARY KEY (`pk`), KEY `main_data` (`data_fk`), CONSTRAINT `main_info2` FOREIGN KEY (`pk`) REFERENCES `info2` (`info2_pk`), CONSTRAINT `main_data` FOREIGN KEY (`data_fk`) REFERENCES `data` (`d_pk`), CONSTRAINT `main_info1` FOREIGN KEY (`pk`) REFERENCES `info1` (`info1_pk`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show create table data; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------+ | Table | Create Table |+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------+ | data | CREATE TABLE `data` ( `d_pk` int(10) unsigned NOT NULL AUTO_INCREMENT, `some_dat` varchar(20) DEFAULT NULL, `more_dat` varchar(20) DEFAULT NULL, PRIMARY KEY (`d_pk`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) #### mysql> show create table info1; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | info1 | CREATE TABLE `info1` ( `info1_pk` int(10) unsigned NOT NULL, `info1_1` varchar(20) DEFAULT NULL, `info1_2` varchar(20) DEFAULT NULL, PRIMARY KEY (`info1_pk`), CONSTRAINT `info1_main` FOREIGN KEY (`info1_pk`) REFERENCES `main` (`pk`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show create table info2; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | info2 | CREATE TABLE `info2` ( `info2_pk` int(10) unsigned NOT NULL, `info2_1` varchar(20) DEFAULT NULL, `info2_2` varchar(20) DEFAULT NULL, PRIMARY KEY (`info2_pk`), CONSTRAINT `info2_main` FOREIGN KEY (`info2_pk`) REFERENCES `main` (`pk`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)