6 use Wikimedia\ScopedCallback;
7 use Wikimedia\TestingAccessWrapper;
16 $reset =
new ScopedCallback(
function ()
use (
$fname ) {
17 if ( $this->db->explicitTrxActive() ) {
18 $this->db->rollback(
$fname );
20 $this->db->query(
'DROP TABLE IF EXISTS ' . $this->db->tableName(
'foo' ),
$fname );
24 "CREATE TEMPORARY TABLE {$this->db->tableName( 'foo' )} (i INTEGER NOT NULL PRIMARY KEY)",
27 $this->db->insert(
'foo', [ [
'i' => 1 ], [
'i' => 2 ] ], __METHOD__ );
30 $this->db->begin( __METHOD__ );
32 'foo', [ [
'i' => 3 ], [
'i' => 2 ], [
'i' => 5 ] ], __METHOD__, [
'IGNORE' ]
34 $this->assertSame( 2, $this->db->affectedRows() );
36 [
'1',
'2',
'3',
'5' ],
37 $this->db->selectFieldValues(
'foo',
'i', [], __METHOD__, [
'ORDER BY' =>
'i' ] )
39 $this->db->rollback( __METHOD__ );
42 $this->db->begin( __METHOD__ );
43 $this->db->startAtomic( __METHOD__, IDatabase::ATOMIC_CANCELABLE );
46 'foo', [ [
'i' => 7 ], [
'i' =>
null ] ], __METHOD__, [
'IGNORE' ]
48 $this->db->endAtomic( __METHOD__ );
49 $this->fail(
'Expected exception not thrown' );
50 }
catch ( DBQueryError
$e ) {
51 $this->assertSame( 0, $this->db->affectedRows() );
52 $this->db->cancelAtomic( __METHOD__ );
56 $this->db->selectFieldValues(
'foo',
'i', [], __METHOD__, [
'ORDER BY' =>
'i' ] )
58 $this->db->rollback( __METHOD__ );
66 $this->markTestSkipped(
'Not PostgreSQL' );
68 if ( $this->db->getServerVersion() < 9.5 ) {
72 $w = TestingAccessWrapper::newFromObject( $this->db );
73 $oldVer = $w->numericVersion;
74 $w->numericVersion = 9.4;
78 $w->numericVersion = $oldVer;
88 $this->markTestSkipped(
'Not PostgreSQL' );
90 if ( $this->db->getServerVersion() < 9.5 ) {
91 $this->markTestSkipped(
'PostgreSQL version is ' . $this->db->getServerVersion() );
99 $reset =
new ScopedCallback(
function ()
use (
$fname ) {
100 if ( $this->db->explicitTrxActive() ) {
101 $this->db->rollback(
$fname );
103 $this->db->query(
'DROP TABLE IF EXISTS ' . $this->db->tableName(
'foo' ),
$fname );
104 $this->db->query(
'DROP TABLE IF EXISTS ' . $this->db->tableName(
'bar' ),
$fname );
108 "CREATE TEMPORARY TABLE {$this->db->tableName( 'foo' )} (i INTEGER)",
112 "CREATE TEMPORARY TABLE {$this->db->tableName( 'bar' )} (i INTEGER NOT NULL PRIMARY KEY)",
115 $this->db->insert(
'bar', [ [
'i' => 1 ], [
'i' => 2 ] ], __METHOD__ );
118 $this->db->begin( __METHOD__ );
119 $this->db->insert(
'foo', [ [
'i' => 3 ], [
'i' => 2 ], [
'i' => 5 ] ], __METHOD__ );
120 $this->db->insertSelect(
'bar',
'foo', [
'i' =>
'i' ], [], __METHOD__, [
'IGNORE' ] );
121 $this->assertSame( 2, $this->db->affectedRows() );
123 [
'1',
'2',
'3',
'5' ],
124 $this->db->selectFieldValues(
'bar',
'i', [], __METHOD__, [
'ORDER BY' =>
'i' ] )
126 $this->db->rollback( __METHOD__ );
129 $this->db->begin( __METHOD__ );
130 $this->db->insert(
'foo', [ [
'i' => 7 ], [
'i' =>
null ] ], __METHOD__ );
131 $this->db->startAtomic( __METHOD__, IDatabase::ATOMIC_CANCELABLE );
133 $this->db->insertSelect(
'bar',
'foo', [
'i' =>
'i' ], [], __METHOD__, [
'IGNORE' ] );
134 $this->db->endAtomic( __METHOD__ );
135 $this->fail(
'Expected exception not thrown' );
136 }
catch ( DBQueryError
$e ) {
137 $this->assertSame( 0, $this->db->affectedRows() );
138 $this->db->cancelAtomic( __METHOD__ );
142 $this->db->selectFieldValues(
'bar',
'i', [], __METHOD__, [
'ORDER BY' =>
'i' ] )
144 $this->db->rollback( __METHOD__ );
152 $this->markTestSkipped(
'Not PostgreSQL' );
154 if ( $this->db->getServerVersion() < 9.5 ) {
158 $w = TestingAccessWrapper::newFromObject( $this->db );
159 $oldVer = $w->numericVersion;
160 $w->numericVersion = 9.4;
164 $w->numericVersion = $oldVer;
174 $this->markTestSkipped(
'Not PostgreSQL' );
176 if ( $this->db->getServerVersion() < 9.5 ) {
177 $this->markTestSkipped(
'PostgreSQL version is ' . $this->db->getServerVersion() );
187 $this->assertTrue( DatabasePostgres::getAttributes()[Database::ATTR_SCHEMAS_AS_TABLE_GROUPS] );