⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.pm

📁 codestriker is a develop useful tool to review code on web user interface.
💻 PM
字号:
################################################################################ Codestriker: Copyright (c) 2001, 2002 David Sitsky.  All rights reserved.# sits@users.sourceforge.net## This program is free software; you can redistribute it and modify it under# the terms of the GPL.# Model object for handling topic file data.package Codestriker::Model::File;use strict;use Codestriker::Model::Delta;# Create the appropriate delta rows for this review.  Note this gets called# from Topic::create(), which controls the transaction commit/rollback.sub create($$$$) {    my ($type, $dbh, $topicid, $deltas_ref) = @_;    # Create the appropriate prepared statements.    my $insert_file =      $dbh->prepare_cached('INSERT INTO topicfile ' .                           '(topicid, sequence, filename,' .                           ' topicoffset, revision, diff, binaryfile) ' .                           'VALUES (?, ?, ?, ?, ?, ?, ?)');    my $success = defined $insert_file;    my $insert_delta =      $dbh->prepare_cached('INSERT INTO delta (topicid, file_sequence, ' .                           'delta_sequence, old_linenumber, ' .                           'new_linenumber, deltatext, ' .                           'description, repmatch) ' .                           'VALUES (?, ?, ?, ?, ?, ?, ?, ?)');    $success &&= defined $insert_delta;    my @deltas = @$deltas_ref;    my $last_filename = "";    my $file_sequence = -1;    my $delta_sequence = -1;    for (my $i = 0; $i <= $#deltas; $i++) {        my $delta = $deltas[$i];        if ($last_filename ne $delta->{filename}) {            # Create new file entry.            $success &&= $insert_file->execute($topicid,                                               ++$file_sequence,                                               $delta->{filename}, -1,                                               $delta->{revision}, "",                                               $delta->{binary});            $last_filename = $delta->{filename};        }        # Add the new delta entry.        $success &&= $insert_delta->execute($topicid, $file_sequence,                                            ++$delta_sequence,                                            $delta->{old_linenumber},                                            $delta->{new_linenumber},                                            $delta->{text},                                            $delta->{description},                                            $delta->{repmatch});    }    die $dbh->errstr unless $success;}# Retrieve the details of a file for a specific topicid and filenumber.sub get($$$$$$) {    my ($type, $topicid, $filenumber,        $offset_ref, $revision_ref, $diff_ref) = @_;    # Obtain a database connection.    my $dbh = Codestriker::DB::DBI->get_connection();    # Retrieve the file information.    my $select_file =      $dbh->prepare_cached('SELECT topicoffset, revision, diff ' .                           'FROM topicfile ' .                           'WHERE topicid = ? AND sequence = ?');    my $success = defined $select_file;    $success &&= $select_file->execute($topicid, $filenumber);    if ($success) {        my ($offset, $revision, $diff) = $select_file->fetchrow_array();        # Store the results in the reference variables and return.        $$offset_ref = $offset;        $$revision_ref = $revision;        $$diff_ref = $diff;        $select_file->finish();    }    Codestriker::DB::DBI->release_connection($dbh, $success);    die $dbh->errstr unless $success;}# Retrieve the details of which files, revisions and offsets are present for# a specific topic.sub get_filetable($$$$$$$) {    my ($type, $topicid, $filename_array_ref, $revision_array_ref,        $offset_array_ref, $binary_array_ref, $numchanges_array_ref) = @_;    # Obtain a database connection.    my $dbh = Codestriker::DB::DBI->get_connection();    # Setup the appropriate statement and execute it.    my $select_file =      $dbh->prepare_cached('SELECT filename, revision, topicoffset, ' .                           'binaryfile, sequence FROM topicfile ' .                           'WHERE topicid = ? ' .                           'ORDER BY sequence');    my $success = defined $select_file;    $success &&= $select_file->execute($topicid);    # Store the results in the referenced arrays.    if ($success) {        my @data;        my @sequence;        while (@data = $select_file->fetchrow_array()) {            push @$filename_array_ref, $data[0];            push @$revision_array_ref, $data[1];            push @$offset_array_ref, $data[2];            push @$binary_array_ref, $data[3];            push @sequence, $data[4];        }        $select_file->finish();        # This has to be called outside the loop above, as SQL Server        # doesn't allow nested selects... gggrrrr.        foreach my $file_id (@sequence) {            # Now get the number of lines affected in this file            my $numchanges = Codestriker::Model::Delta->get_delta_size($topicid, $file_id);            push @$numchanges_array_ref, $numchanges;        }    }    Codestriker::DB::DBI->release_connection($dbh, $success);    die $dbh->errstr unless $success;}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -