Browse Source

Correct the state of PostgreSQL serial sequence during tests

microsub
J. King 5 years ago
parent
commit
4a2efd9987
  1. 23
      tests/cases/Db/PostgreSQL/TestDatabase.php

23
tests/cases/Db/PostgreSQL/TestDatabase.php

@ -14,6 +14,27 @@ class TestDatabase extends \JKingWeb\Arsse\TestCase\Database\Base {
protected static $implementation = "PDO PostgreSQL";
protected function nextID(string $table): int {
return (int) static::$drv->query("SELECT cast(last_value as bigint) + 1 from pg_sequences where sequencename = '{$table}_id_seq'")->getValue();
return ((int) static::$drv->query("SELECT last_value from pg_sequences where sequencename = '{$table}_id_seq'")->getValue()) + 1;
}
public function setUp() {
parent::setUp();
$seqList =
"select
replace(substring(column_default, 10), right(column_default, 12), '') as seq,
table_name as table,
column_name as col
from information_schema.columns
where table_name like 'arsse_%'
and column_default like 'nextval(%'
";
foreach(static::$drv->query($seqList) as $r) {
$num = static::$drv->query("SELECT max({$r['col']}) from {$r['table']}")->getValue();
if (!$num) {
continue;
}
$num++;
static::$drv->exec("ALTER SEQUENCE {$r['seq']} RESTART WITH $num");
}
}
}

Loading…
Cancel
Save