Подобно ответу Merlyn, но это также относится к этим случаям:
Вот он:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
Из документации DBIx:: Класс:: устройство хранения данных
, Если DBIC_TRACE установлен затем трассировочная информация, производится (как тогда, когда метод отладки установлен).
...отладка
трассировочная информация Причин, которая будет испускаться на объекте debugobj. (или STDERR, если debugobj не был конкретно установлен).Наборы debugobj
или получает объект, используемый для метрического набора. Значения по умолчанию к экземпляру DBIx:: Класс:: устройство хранения данных:: Статистика, которая совместима с исходным методом использования coderef как обратный вызов. Посмотрите вышеупомянутый класс Статистики для получения дополнительной информации.
, Другими словами, необходимо установить debugobj
в том классе к объекту, который разделяет на подклассы DBIx:: Класс:: устройство хранения данных:: Статистика . В Вашем подклассе можно переформатировать запрос путем, Вы хотите, чтобы он был.
Во-первых, спасибо за указатели! Частичный ответ следует....
, Что у меня есть до сих пор... сначала некоторые леса:
# Connect to our db through DBIx::Class
my $schema = My::Schema->connect('dbi:SQLite:/home/me/accounts.db');
# See also BEGIN { $ENV{DBIC_TRACE} = 1 }
$schema->storage->debug(1);
# Create an instance of our subclassed (see below)
# DBIx::Class::Storage::Statistics class
my $stats = My::DBIx::Class::Storage::Statistics->new();
# Set the debugobj object on our schema's storage
$schema->storage->debugobj($stats);
И определение Моего:: DBIx:: Класс:: устройство хранения данных:: Статистика быть:
package My::DBIx::Class::Storage::Statistics;
use base qw<DBIx::Class::Storage::Statistics>;
use Data::Dumper qw<Dumper>;
use SQL::Statement;
use SQL::Parser;
sub query_start {
my ($self, $sql_query, @params) = @_;
print "The original sql query is\n$sql_query\n\n";
my $parser = SQL::Parser->new();
my $stmt = SQL::Statement->new($sql_query, $parser);
#printf "%s\n", $stmt->command;
print "The parameters for this query are:";
print Dumper \@params;
}
, Который решает проблему о том, как сцепиться в получить SQL-запрос для меня к "симпатичному-ify".
Затем я выполняю запрос:
my $rs = $schema->resultset('SomeTable')->search(
{
'email' => $email,
'others.some_col' => 1,
},
{ join => 'others' }
);
$rs->count;
Однако SQL:: Синтаксический анализатор блюет на SQL, сгенерированном DBIx:: Класс:
The original sql query is
SELECT COUNT( * ) FROM some_table me LEFT JOIN others other_table ON ( others.some_col_id = me.id ) WHERE ( others.some_col_id = ? AND email = ? )
SQL ERROR: Bad table or column name '(others' has chars not alphanumeric or underscore!
SQL ERROR: No equijoin condition in WHERE or ON clause
Так... там лучший синтаксический анализатор, чем SQL:: Синтаксический анализатор для задания?