Могу я структурная распечатка программы вывод DBIC_TRACE в DBIx:: Класс?

Подобно ответу 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.
)
20
задан brian d foy 17 February 2009 в 17:34
поделиться

2 ответа

Из документации DBIx:: Класс:: устройство хранения данных

, Если DBIC_TRACE установлен затем трассировочная информация, производится (как тогда, когда метод отладки установлен).

...

отладка
трассировочная информация Причин, которая будет испускаться на объекте debugobj. (или STDERR, если debugobj не был конкретно установлен).

Наборы debugobj
или получает объект, используемый для метрического набора. Значения по умолчанию к экземпляру DBIx:: Класс:: устройство хранения данных:: Статистика, которая совместима с исходным методом использования coderef как обратный вызов. Посмотрите вышеупомянутый класс Статистики для получения дополнительной информации.

, Другими словами, необходимо установить debugobj в том классе к объекту, который разделяет на подклассы DBIx:: Класс:: устройство хранения данных:: Статистика . В Вашем подклассе можно переформатировать запрос путем, Вы хотите, чтобы он был.

10
ответ дан 29 November 2019 в 21:06
поделиться

Во-первых, спасибо за указатели! Частичный ответ следует....

, Что у меня есть до сих пор... сначала некоторые леса:

# 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:: Синтаксический анализатор для задания?

3
ответ дан 29 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: