__PACKAGE__->sql_maker_class(
'DBIx::Class::SQLMaker::MySQL'
);
__PACKAGE__->sql_limit_dialect (
'LimitXY'
);
__PACKAGE__->sql_quote_char (
'`'
);
__PACKAGE__->_use_multicolumn_in (1);
sub
with_deferred_fk_checks {
my
(
$self
,
$sub
) =
@_
;
$self
->_do_query(
'SET FOREIGN_KEY_CHECKS = 0'
);
$sub
->();
$self
->_do_query(
'SET FOREIGN_KEY_CHECKS = 1'
);
}
sub
connect_call_set_strict_mode {
my
$self
=
shift
;
$self
->_do_query(
q|SET SQL_MODE = CONCAT('ANSI,TRADITIONAL,ONLY_FULL_GROUP_BY,', @@sql_mode)|
);
$self
->_do_query(
q|SET SQL_AUTO_IS_NULL = 0|
);
}
sub
_dbh_last_insert_id {
my
(
$self
,
$dbh
,
$source
,
$col
) =
@_
;
$dbh
->{mysql_insertid};
}
sub
_run_connection_actions {
my
$self
=
shift
;
if
(
$self
->_dbh->{mysql_auto_reconnect}
and
!
exists
$self
->_dbic_connect_attributes->{mysql_auto_reconnect}
) {
$self
->_dbh->{mysql_auto_reconnect} = 0;
}
$self
->
next
::method(
@_
);
}
sub
sql_maker {
my
$self
=
shift
;
unless
(
$self
->_sql_maker) {
my
$maker
=
$self
->
next
::method (
@_
);
my
$mysql_ver
=
$self
->_dbh_get_info(
'SQL_DBMS_VER'
);
$maker
->{_default_jointype} =
'INNER'
if
$mysql_ver
=~ /^3/;
}
return
$self
->_sql_maker;
}
sub
sqlt_type {
return
'MySQL'
;
}
sub
deployment_statements {
my
$self
=
shift
;
my
(
$schema
,
$type
,
$version
,
$dir
,
$sqltargs
,
@rest
) =
@_
;
$sqltargs
||= {};
if
(
!
exists
$sqltargs
->{producer_args}{mysql_version}
and
my
$dver
=
$self
->_server_info->{normalized_dbms_version}
) {
$sqltargs
->{producer_args}{mysql_version} =
$dver
;
}
$self
->
next
::method(
$schema
,
$type
,
$version
,
$dir
,
$sqltargs
,
@rest
);
}
sub
_exec_svp_begin {
my
(
$self
,
$name
) =
@_
;
$self
->_dbh->
do
(
"SAVEPOINT $name"
);
}
sub
_exec_svp_release {
my
(
$self
,
$name
) =
@_
;
$self
->_dbh->
do
(
"RELEASE SAVEPOINT $name"
);
}
sub
_exec_svp_rollback {
my
(
$self
,
$name
) =
@_
;
$self
->_dbh->
do
(
"ROLLBACK TO SAVEPOINT $name"
)
}
sub
is_replicating {
my
$status
=
shift
->_get_dbh->selectrow_hashref(
'show slave status'
);
return
(
$status
->{Slave_IO_Running} eq
'Yes'
) && (
$status
->{Slave_SQL_Running} eq
'Yes'
);
}
sub
lag_behind_master {
return
shift
->_get_dbh->selectrow_hashref(
'show slave status'
)->{Seconds_Behind_Master};
}
1;