class PG::Connection

def self::parse_connect_args( *args )

## for valid arguments.
## Parse the connection +args+ into a connection-parameter string. See PG::Connection.new
def self::parse_connect_args( *args )
	return '' if args.empty?
	# This will be swapped soon for code that makes options like those required for
	# PQconnectdbParams()/PQconnectStartParams(). For now, stick to an options string for
	# PQconnectdb()/PQconnectStart().
	# Parameter 'fallback_application_name' was introduced in PostgreSQL 9.0
	# together with PQescapeLiteral().
	if PG::Connection.instance_methods.find{|m| m.to_sym == :escape_literal }
		appname = $0.sub(/^(.{30}).{4,}(.{30})$/){ $1+"..."+$2 }
		appname = PG::Connection.quote_connstr( appname )
		connopts = ["fallback_application_name=#{appname}"]
	else
		connopts = []
	end
	# Handle an options hash first
	if args.last.is_a?( Hash )
		opthash = args.pop
		opthash.each do |key, val|
			connopts.push( "%s=%s" % [key, PG::Connection.quote_connstr(val)] )
		end
	end
	# Option string style
	if args.length == 1 && args.first.to_s.index( '=' )
		connopts.unshift( args.first )
	# Append positional parameters
	else
		args.each_with_index do |val, i|
			next unless val # Skip nil placeholders
			key = CONNECT_ARGUMENT_ORDER[ i ] or
				raise ArgumentError, "Extra positional parameter %d: %p" % [ i+1, val ]
			connopts.push( "%s=%s" % [key, PG::Connection.quote_connstr(val.to_s)] )
		end
	end
	return connopts.join(' ')
end