1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-08 14:48:32 -04:00

applied a fix by Kenneth Kroenlein to support named primary key (RT 95511), and added some tests

This commit is contained in:
Kenichi Ishigaki 2014-05-12 10:18:13 +09:00
parent ff8699f4f7
commit 354d07f61f
2 changed files with 34 additions and 3 deletions

View file

@ -459,6 +459,7 @@ sub primary_key_info {
}
}
my $key_name = $row->{sql} =~ /\bCONSTRAINT\s+(\S+|"[^"]+")\s+PRIMARY\s+KEY\s*\(/i ? $1 : 'PRIMARY KEY';
my $key_seq = 0;
foreach my $pk_field (@pk) {
push @pk_info, {
@ -466,7 +467,7 @@ sub primary_key_info {
TABLE_NAME => $tbname,
COLUMN_NAME => $pk_field,
KEY_SEQ => ++$key_seq,
PK_NAME => 'PRIMARY KEY',
PK_NAME => $key_name,
};
}
}

View file

@ -10,7 +10,7 @@ use t::lib::Test qw/connect_ok/;
use Test::More;
use Test::NoWarnings;
plan tests => (5 * 5) + (3 * 6 + 1) + 1;
plan tests => (5 * 5) + (3 * 6 + 1) + (5 * 2) + 1;
for my $quote ('', qw/' " ` []/) {
my ($begin_quote, $end_quote) = (substr($quote, 0, 1), substr($quote, -1, 1));
@ -87,4 +87,34 @@ for my $quote ('', qw/' " ` []/) {
is $pk_info[0]{TABLE_SCHEM} => 'temp', "scheme is correct";
is $pk_info[0]{COLUMN_NAME} => 'tmp', "pk name is correct";
}
}
}
{
my $dbh = connect_ok();
$dbh->do("create table foo (id integer, text text, primary key (id))");
{
my $sth = $dbh->primary_key_info(undef, undef, 'foo');
my @pk_info;
while(my $row = $sth->fetchrow_hashref) { push @pk_info, $row };
is @pk_info => 1, "found 1 pk in a table";
is $pk_info[0]{TABLE_SCHEM} => 'main', "scheme is correct";
is $pk_info[0]{COLUMN_NAME} => 'id', "pk name is correct";
is $pk_info[0]{PK_NAME} => 'PRIMARY KEY', "pk name is correct";
}
}
{
my $dbh = connect_ok();
$dbh->do("create table foo (id integer, text text, constraint bar primary key (id))");
{
my $sth = $dbh->primary_key_info(undef, undef, 'foo');
my @pk_info;
while(my $row = $sth->fetchrow_hashref) { push @pk_info, $row };
is @pk_info => 1, "found 1 pk in a table";
is $pk_info[0]{TABLE_SCHEM} => 'main', "scheme is correct";
is $pk_info[0]{COLUMN_NAME} => 'id', "pk name is correct";
is $pk_info[0]{PK_NAME} => 'bar', "pk name is correct";
}
}