Dang. In addition to not noticing the slightly odd insert into X set field=value, field2=value2 syntax (as opposed to the 'insert' method's more standard insert into (fields) values (values)), I didn't realize there's weirdness with question marks:
my %data = ( url => "http://foo/bar?baz", asdf => 1, thing => \'now()'
+ );
$_ = (ref) ? $_ : $dbh->quote($_) for values %data;
print scalar $sqlgen->generate('insert into',\'atable',\%data);
__END__
Use of uninitialized value in substitution iterator at /usr/lib/perl5/
+vendor_perl/5.10.0/SQL/Abstract.pm line 1290.
INSERT INTO atable SET asdf = '1', thing = now(), url = 'http://foo/ba
+rbaz'
Seems this simply isn't the general use-case for 'generate'.