SQL-YASP

 view release on metacpan or  search on metacpan

lib/SQL/YASP.pm  view on Meta::CPAN

	# 
	$i = 0;
	$dtokens = $self->{'double_word_tokens'};
	
	while ($i < $#rv) {
		my $el = $rv[$i];
		
		# if this is a double_word token
		unless (ref $el) {
			if ($dtokens->{$el}) {
				if ( (! ref($rv[$i+1])) && exists $dtokens->{$el}->{$rv[$i+1]} )
					{$rv[$i] = $rv[$i] . ' ' . splice(@rv, $i+1, 1)}
			}
		}
		
		$i++;
	}
	# 
	# compact double word tokens
	#-------------------------------------------------
	
	
	# unquote if necessary
	#if ($opts{'unquote'}) {
	#	foreach my $el (@rv)
	#		{$el = unquote($el)}
	#}
	
	# remove empty elements
	@rv = grep {length($_)} @rv;
	
	
	return @rv;
}
# 
# sql_split
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
# misc short subs
# 
sub joinfield {
	my($val) = join('', @_);
	$val =~ s|^\s+||s;
	$val =~ s|\s+$||s;
	return $val;
}

# this could probably be done a lot more efficiently
sub unquote {
	my ($rv) = @_;
	
	# remove outer quotes
	if ($rv =~ s|^'(.*)'$|$1|s)
		{$rv =~ s|''|'|sg}
	elsif ($rv =~ s|^"(.*)"$|$1|s)
		{$rv =~ s|""|"|sg}
	
	# escapes
	my @sets = split m|(\\.)|, $rv;
	
	grep {
		s|\\0|$nullchar|o;
		s|\\z|$wineof|o;
		s|\\t|\t|;
		s|\\r|\r|;
		s|\\n|\n|;
		s|\\b|\b|;
		s|\\(.)|$1|;
		} @sets;	
	
	return join('', @sets);
}

sub count_ops {
	return
		keys(%SQL::YASP::Expr::bin) + 
		keys(%SQL::YASP::Expr::functions);
}

sub default_ops {
	return [@SQL::YASP::Expr::dbin];
}

sub default_functions {
	return {%SQL::YASP::Expr::dfuncs};
}


# 
# misc short subs
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
# arr_split
# 
# splits an array into an array of arrays
# 
sub arr_split {
	my ($del_arr, $outer, %opts) = @_;
	my (@current, @rv, %dels, $firstdone);
	ref($outer) or return $outer;
	$opts{'max'} and $opts{'max'}--;
	@dels{@$del_arr} = ();
	
	foreach my $el (@$outer) {

		if (  (! ref $el) && exists($dels{$el}) && ($opts{'max'} ? @rv<$opts{'max'} : 1)  ) {
			if ($opts{'keep_del_back'})
				{push @current, $el}
			
			if ($firstdone || @current)
				{push @rv, [@current]}
			$firstdone = 1;
			
			@current = ();
			
			if ($opts{'keep_del_front'})
				{push @current, $el}



( run in 0.545 second using v1.01-cache-2.11-cpan-5511b514fd6 )