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 )