DBIx-MyParse
view release on metacpan or search on metacpan
lib/DBIx/MyParse/Query.pm view on Meta::CPAN
} elsif ($command eq 'SQLCOM_RENAME_TABLE') {
return $query->_printRename();
} elsif ($command eq 'SQLCOM_TRUNCATE') {
return "TRUNCATE TABLE ".$query->getTables()->[0]->_printTable(0);
} elsif ($command eq 'SQLCOM_BEGIN') {
if ($command->getOption("WITH_CONSISTENT_SNAPSHOT")) {
return "START TRANSACTION WITH CONSISTENT SNAPSHOT";
} else {
return "START TRANSACTION";
}
} elsif (
($command eq 'SQLCOM_COMMIT') ||
($command eq 'SQLCOM_ROLLBACK')
) {
my $chain = $query->getOption("CHAIN") ? "AND CHAIN " : "";
my $no_chain = $query->getOption("NO_CHAIN") ? "AND NO CHAIN " : "";
my $release = $query->getOption("RELEASE") ? "RELEASE " : "";
my $no_release = $query->getOption("NO_RELEASE") ? "NO RELEASE " : "";
if ($command eq 'SQLCOM_ROLLBACK') {
return "ROLLBACK ".$chain.$no_chain.$release.$no_release;
} else {
return "COMMIT ".$chain.$no_chain.$release.$no_release;
}
} elsif ($command eq 'SQLCOM_SAVEPOINT') {
return "SAVEPOINT ".$query->getSavepoint();
} elsif ($command eq 'SQLCOM_ROLLBACK_TO_SAVEPOINT') {
return "ROLLBACK TO SAVEPOINT ".$query->getSavepoint();
} elsif ($command eq 'SQLCOM_RELEASE_SAVEPOINT') {
return "RELEASE SAVEPOINT ".$query->getSavepoint();
} else {
warn("DBIx::MyParse::Query::print() called, but command eq '$command'");
return undef;
}
}
sub _printRename {
my $query = shift;
my $command = $query->getCommand();
if ($command eq 'SQLCOM_RENAME_TABLE') {
my @tables = @{$query->getTables()};
my @tables_printed;
while (my ($table1, $table2) = splice(@tables,0,2)) {
push @tables_printed, $table1->_printTable(0)." TO ".$table2->_printTable(0);
}
return "RENAME TABLE ".join(', ', @tables_printed);
}
}
sub _printDrop {
my $query = shift;
my $command = $query->getCommand();
if ($command eq 'SQLCOM_DROP_DB') {
my $drop_if_exists = $query->getOption("DROP_IF_EXISTS") ? "IF EXISTS " : "";
return "DROP DATABASE ".$drop_if_exists.$query->getSchemaSelect()->print();
} elsif ($command eq 'SQLCOM_DROP_TABLE') {
my $drop_if_exists = $query->getOption("DROP_IF_EXISTS") ? "IF EXISTS " : "";
my $drop_temporary = $query->getOption("DROP_TEMPORARY") ? "TEMPORARY " : "";
my $drop_restrict = $query->getOption("DROP_RESTRICT") ? " RESTRICT" : "";
my $drop_cascade = $query->getOption("DROP_CASCADE") ? " CASCADE" : "";
return "DROP ".$drop_temporary."TABLE ".$drop_if_exists.join(', ', map { $_->_printTable(0) } @{$query->getTables()}).$drop_restrict.$drop_cascade;
}
}
sub _printCreate {
my $query = shift;
my $command = $query->getCommand();
if ($command eq 'SQLCOM_CREATE_DB') {
my $create_if_not_exists = $query->getOption("CREATE_IF_NOT_EXISTS") ? "IF NOT EXISTS " : "";
return "CREATE DATABASE ".$create_if_not_exists.$query->getSchemaSelect()->print();
}
}
sub _printSelect {
my $query = shift;
my $describe = "";
$describe = 'EXPLAIN ' if $query->getOption('DESCRIBE_NORMAL');
$describe = 'EXPLAIN EXTENDED ' if $query->getOption('DESCRIBE_EXTENDED');
my $distinct = $query->getOption('SELECT_DISTINCT') ? "DISTINCT " : "";
my $high_priority = $query->getOption('TL_READ_HIGH_PRIORITY') ? "HIGH_PRIORITY " : "";
my $straight_join = $query->getOption('SELECT_STRAIGHT_JOIN') ? "STRAIGHT_JOIN " : "";
my $small_result = $query->getOption('SELECT_SMALL_RESULT') ? "SQL_SMALL_RESULT " : "";
my $big_result = $query->getOption('SELECT_BIG_RESULT') ? "SQL_BIG_RESULT " : "";
my $buffer_result = $query->getOption('OPTION_BUFFER_RESULT') ? "SQL_BUFFER_RESULT " : "";
my $query_cache = "";
$query_cache = 'SQL_NO_CACHE ' if $query->getOption('SQL_NO_CACHE');
$query_cache = 'SQL_CACHE ' if $query->getOption('OPTION_TO_QUERY_CACHE');
my $found_rows = $query->getOption("OPTION_FOUND_ROWS") ? "SQL_CALC_FOUND_ROWS ": "";
my $for_update = $query->getOption("TL_WRITE") ? " FOR UPDATE" : "";
my $share_mode = $query->getOption("TL_READ_WITH_SHARED_LOCKS") ? " LOCK IN SHARE MODE": "";
my $with_cube = $query->getOption("WITH_CUBE") ? " WITH CUBE " : "";
my $with_rollup = $query->getOption("WITH_ROLLUP") ? " WITH ROLLUP ": "";
my $select_items_str;
my $select_items = $query->getSelectItems();
if (defined $select_items) {
$select_items_str = join(', ', map { $_->print(1) } @{$select_items} );
}
return $describe.'SELECT '.$distinct.$high_priority.$straight_join.$small_result.$big_result.$buffer_result.
$query_cache.$found_rows.$select_items_str." ".
(defined $query->getTables() ? "FROM ".$query->_printFrom() : "").
$query->_printWhere().
$query->_printGroupBy().$with_rollup.$with_cube.
$query->_printHaving().
$query->_printOrderBy().
$query->_printLimit().
$for_update.$share_mode
;
}
sub _printInsertReplace {
my $query = shift;
( run in 1.447 second using v1.01-cache-2.11-cpan-524268b4103 )