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:
parent
ff8699f4f7
commit
354d07f61f
2 changed files with 34 additions and 3 deletions
|
@ -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;
|
my $key_seq = 0;
|
||||||
foreach my $pk_field (@pk) {
|
foreach my $pk_field (@pk) {
|
||||||
push @pk_info, {
|
push @pk_info, {
|
||||||
|
@ -466,7 +467,7 @@ sub primary_key_info {
|
||||||
TABLE_NAME => $tbname,
|
TABLE_NAME => $tbname,
|
||||||
COLUMN_NAME => $pk_field,
|
COLUMN_NAME => $pk_field,
|
||||||
KEY_SEQ => ++$key_seq,
|
KEY_SEQ => ++$key_seq,
|
||||||
PK_NAME => 'PRIMARY KEY',
|
PK_NAME => $key_name,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ use t::lib::Test qw/connect_ok/;
|
||||||
use Test::More;
|
use Test::More;
|
||||||
use Test::NoWarnings;
|
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/' " ` []/) {
|
for my $quote ('', qw/' " ` []/) {
|
||||||
my ($begin_quote, $end_quote) = (substr($quote, 0, 1), substr($quote, -1, 1));
|
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]{TABLE_SCHEM} => 'temp', "scheme is correct";
|
||||||
is $pk_info[0]{COLUMN_NAME} => 'tmp', "pk name 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";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue