DBIO-MySQL
view release on metacpan or search on metacpan
t/20-sqlmaker-mysql.t view on Meta::CPAN
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => 'share'})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE
)',
[],
'FOR SHARE (new share syntax) works correctly'
);
# Test hash-based locking configuration
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'update'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR UPDATE
)',
[],
'Hash-based FOR UPDATE works correctly'
);
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'share'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE
)',
[],
'Hash-based FOR SHARE works correctly'
);
# Test NOWAIT modifier
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'update', modifier => 'nowait'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR UPDATE NOWAIT
)',
[],
'FOR UPDATE NOWAIT works correctly'
);
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'share', modifier => 'nowait'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE NOWAIT
)',
[],
'FOR SHARE NOWAIT works correctly'
);
# Test SKIP LOCKED modifier
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'update', modifier => 'skip_locked'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR UPDATE SKIP LOCKED
)',
[],
'FOR UPDATE SKIP LOCKED works correctly'
);
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'share', modifier => 'skip_locked'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE SKIP LOCKED
)',
[],
'FOR SHARE SKIP LOCKED works correctly'
);
# Test OF clause
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'update', of => 'artist'}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR UPDATE OF `artist`
)',
[],
'FOR UPDATE OF table works correctly'
);
# Test OF clause with multiple tables
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {for => {type => 'share', of => ['artist', 'cd']}})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE OF `artist`, `cd`
)',
[],
'FOR SHARE OF multiple tables works correctly'
);
# Test combination of OF clause and modifier
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {
for => {
type => 'update',
of => 'artist',
modifier => 'nowait'
}
})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR UPDATE OF `artist` NOWAIT
)',
[],
'FOR UPDATE OF table NOWAIT works correctly'
);
is_same_sql_bind(
$schema->resultset('Artist')->search({}, {
for => {
type => 'share',
of => ['artist', 'cd'],
modifier => 'skip_locked'
}
})->as_query,
'(
SELECT `me`.`artistid`, `me`.`name`, `me`.`rank`, `me`.`charfield`
FROM `artist` `me`
FOR SHARE OF `artist`, `cd` SKIP LOCKED
)',
[],
'FOR SHARE OF multiple tables SKIP LOCKED works correctly'
);
}
done_testing;
( run in 0.940 second using v1.01-cache-2.11-cpan-800906f7e73 )