Merge pull request #52 from open-sausages/pulls/namespace

Update for namespaced changes
This commit is contained in:
Sam Minnée 2016-07-04 15:46:24 +12:00 committed by GitHub
commit eadb7ac352
15 changed files with 262 additions and 338 deletions

View File

@ -18,4 +18,4 @@ before_script:
- cd ~/builds/ss
script:
- phpunit framework/tests
- vendor/bin/phpunit framework/tests

7
.upgrade.yml Normal file
View File

@ -0,0 +1,7 @@
mappings:
PostgreSQLConnector: SilverStripe\PostgreSQL\PostgreSQLConnector
PostgreSQLDatabase: SilverStripe\PostgreSQL\PostgreSQLDatabase
PostgreSQLDatabaseConfigurationHelper: SilverStripe\PostgreSQL\PostgreSQLDatabaseConfigurationHelper
PostgreSQLQuery: SilverStripe\PostgreSQL\PostgreSQLQuery
PostgreSQLQueryBuilder: SilverStripe\PostgreSQL\PostgreSQLQueryBuilder
PostgreSQLSchemaManager: SilverStripe\PostgreSQL\PostgreSQLSchemaManager

View File

@ -1 +0,0 @@
<?php

View File

@ -3,14 +3,21 @@ name: postgresqlconnectors
---
Injector:
PostgrePDODatabase:
class: 'PostgreSQLDatabase'
class: 'SilverStripe\PostgreSQL\PostgreSQLDatabase'
properties:
connector: %$PDOConnector
schemaManager: %$PostgreSQLSchemaManager
queryBuilder: %$PostgreSQLQueryBuilder
PostgreSQLDatabase:
class: 'PostgreSQLDatabase'
class: 'SilverStripe\PostgreSQL\PostgreSQLDatabase'
properties:
connector: %$PostgreSQLConnector
schemaManager: %$PostgreSQLSchemaManager
queryBuilder: %$PostgreSQLQueryBuilder
PostgreSQLConnector:
class: 'SilverStripe\PostgreSQL\PostgreSQLConnector'
type: prototype
PostgreSQLSchemaManager:
class: 'SilverStripe\PostgreSQL\PostgreSQLSchemaManager'
PostgreSQLQueryBuilder:
class: 'SilverStripe\PostgreSQL\PostgreSQLQueryBuilder'

View File

@ -1,32 +0,0 @@
PostgreSQLDatabase:
# Determines whether to check a database exists on the host by
# querying the 'postgres' database and running createDatabase.
#
# Some locked down systems prevent access to the 'postgres' table in
# which case you need to set this to false.
#
# If allow_query_master_postgres is false, and model_schema_as_database is also false,
# then attempts to create or check databases beyond the initial connection will
# result in a runtime error.
allow_query_master_postgres: true
# For instances where multiple databases are used beyond the initial connection
# you may set this option to true to force database switches to switch schemas
# instead of using databases. This may be useful if the database user does not
# have cross-database permissions, and in cases where multiple databases are used
# (such as in running test cases).
#
# If this is true then the database will only be set during the initial connection,
# and attempts to change to this database will use the 'public' schema instead
#
# If this is false then errors may be generated during some cross database operations.
model_schema_as_database: true
# Override the language that tsearch uses. By default it is 'english, but
# could be any of the supported languages that can be found in the
# pg_catalog.pg_ts_config table.
search_language: 'english'
# These two values describe how T-search will work.
# You can use either GiST or GIN, and '@@' (gist) or '@@@' (gin)
# Combinations of these two will also work, so you'll need to pick
# one which works best for you
default_fts_cluster_method: 'GIN'
default_fts_search_method: '@@@'

View File

@ -2,6 +2,7 @@
// PDO Postgre database
DatabaseAdapterRegistry::register(array(
/** @skipUpgrade */
'class' => 'PostgrePDODatabase',
'title' => 'PostgreSQL 8.3+ (using PDO)',
'helperPath' => dirname(__FILE__).'/code/PostgreSQLDatabaseConfigurationHelper.php',
@ -15,6 +16,7 @@ DatabaseAdapterRegistry::register(array(
// PDO Postgre database
DatabaseAdapterRegistry::register(array(
/** @skipUpgrade */
'class' => 'PostgreSQLDatabase',
'title' => 'PostgreSQL 8.3+ (using pg_connect)',
'helperPath' => dirname(__FILE__).'/code/PostgreSQLDatabaseConfigurationHelper.php',

View File

@ -1,5 +1,10 @@
<?php
namespace SilverStripe\PostgreSQL;
use SilverStripe\ORM\Connect\DBConnector;
use ErrorException;
/**
* PostgreSQL connector class using the PostgreSQL specific api
*
@ -216,14 +221,16 @@ class PostgreSQLConnector extends DBConnector
}
// Execute query
// Unfortunately error-suppression is required in order to handle sql errors elegantly.
// Please use PDO if you can help it
if (!empty($parameters)) {
$result = pg_query_params($this->dbConn, $sql, $parameters);
$result = @pg_query_params($this->dbConn, $sql, $parameters);
} else {
$result = pg_query($this->dbConn, $sql);
$result = @pg_query($this->dbConn, $sql);
}
// Handle error
if ($result === false) {
if (!$result) {
$this->databaseError($this->getLastError(), $errorLevel, $sql, $parameters);
return null;
}
@ -253,16 +260,6 @@ class PostgreSQLConnector extends DBConnector
return pg_escape_string($this->dbConn, $value);
}
public function escapeIdentifier($value, $separator = '.')
{
if (empty($separator) && function_exists('pg_escape_identifier')) {
return pg_escape_identifier($this->dbConn, $value);
}
// Let parent function handle recursive calls
return parent::escapeIdentifier($value, $separator);
}
public function selectDatabase($name)
{
if ($name !== $this->databaseName) {

View File

@ -1,5 +1,17 @@
<?php
namespace SilverStripe\PostgreSQL;
use SilverStripe\Framework\Core\Configurable;
use SilverStripe\ORM\DB;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\Connect\SS_Database;
use Config;
use ErrorException;
use Exception;
use PaginatedList;
/**
* PostgreSQL connector class.
*
@ -8,6 +20,8 @@
*/
class PostgreSQLDatabase extends SS_Database
{
use Configurable;
/**
* Database schema manager object
*
@ -22,8 +36,66 @@ class PostgreSQLDatabase extends SS_Database
*/
protected $schema;
/**
* Toggle if transactions are supported. Defaults to true.
*
* @var bool
*/
protected $supportsTransactions = true;
/**
* Determines whether to check a database exists on the host by
* querying the 'postgres' database and running createDatabase.
*
* Some locked down systems prevent access to the 'postgres' table in
* which case you need to set this to false.
*
* If allow_query_master_postgres is false, and model_schema_as_database is also false,
* then attempts to create or check databases beyond the initial connection will
* result in a runtime error.
*
* @config
* @var bool
*/
private static $allow_query_master_postgres = true;
/**
* For instances where multiple databases are used beyond the initial connection
* you may set this option to true to force database switches to switch schemas
* instead of using databases. This may be useful if the database user does not
* have cross-database permissions, and in cases where multiple databases are used
* (such as in running test cases).
*
* If this is true then the database will only be set during the initial connection,
* and attempts to change to this database will use the 'public' schema instead
*
* If this is false then errors may be generated during some cross database operations.
*/
private static $model_schema_as_database = true;
/**
* Override the language that tsearch uses. By default it is 'english, but
* could be any of the supported languages that can be found in the
* pg_catalog.pg_ts_config table.
*/
private static $search_language = 'english';
/*
* Describe how T-search will work.
* You can use either GiST or GIN, and '@@' (gist) or '@@@' (gin)
* Combinations of these two will also work, so you'll need to pick
* one which works best for you
*/
private static $default_fts_cluster_method = 'GIN';
/*
* Describe how T-search will work.
* You can use either GiST or GIN, and '@@' (gist) or '@@@' (gin)
* Combinations of these two will also work, so you'll need to pick
* one which works best for you
*/
private static $default_fts_search_method = '@@@';
const MASTER_DATABASE = 'postgres';
const MASTER_SCHEMA = 'public';
@ -35,7 +107,7 @@ class PostgreSQLDatabase extends SS_Database
*/
public static function default_fts_cluster_method()
{
return Config::inst()->get('PostgreSQLDatabase', 'default_fts_cluster_method');
return static::config()->default_fts_cluster_method;
}
/**
@ -45,7 +117,7 @@ class PostgreSQLDatabase extends SS_Database
*/
public static function default_fts_search_method()
{
return Config::inst()->get('PostgreSQLDatabase', 'default_fts_search_method');
return static::config()->default_fts_search_method;
}
/**
@ -58,10 +130,12 @@ class PostgreSQLDatabase extends SS_Database
* If allow_query_master_postgres is false, and model_schema_as_database is also false,
* then attempts to create or check databases beyond the initial connection will
* result in a runtime error.
*
* @return bool
*/
public static function allow_query_master_postgres()
{
return Config::inst()->get('PostgreSQLDatabase', 'allow_query_master_postgres');
return static::config()->allow_query_master_postgres;
}
/**
@ -73,10 +147,12 @@ class PostgreSQLDatabase extends SS_Database
*
* If this is true then the database will only be set during the initial connection,
* and attempts to change to this database will use the 'public' schema instead
*
* @return bool
*/
public static function model_schema_as_database()
{
return Config::inst()->get('PostgreSQLDatabase', 'model_schema_as_database');
return static::config()->model_schema_as_database;
}
/**
@ -84,11 +160,11 @@ class PostgreSQLDatabase extends SS_Database
* could be any of the supported languages that can be found in the
* pg_catalog.pg_ts_config table.
*
* @var string
* @return string
*/
public static function search_language()
{
return Config::inst()->get('PostgreSQLDatabase', 'search_language');
return static::config()->search_language;
}
/**
@ -223,7 +299,7 @@ class PostgreSQLDatabase extends SS_Database
* Utility method to manually set the schema to an alternative
* Check existance & sets search path to the supplied schema name
*
* @param string $name Name of the schema
* @param string $schema Name of the schema
* @param boolean $create Flag indicating whether the schema should be created
* if it doesn't exist. If $create is false and the schema doesn't exist
* then an error will be raised
@ -257,13 +333,11 @@ class PostgreSQLDatabase extends SS_Database
* SQL queries. Sapphire cannot search for datamodel tables in alternate
* schemas, so be wary of using alternate schemas within the ORM environment.
*
* @param string $arg1 First schema to use
* @param string $arg2 Second schema to use
* @param string $argN Nth schema to use
* @param string ...$arg Schema name to use. Add additional schema names as extra arguments.
*/
public function setSchemaSearchPath()
public function setSchemaSearchPath($arg = null)
{
if (func_num_args() == 0) {
if (!$arg) {
user_error('At least one Schema must be supplied to set a search path.', E_USER_ERROR);
}
$schemas = array_values(func_get_args());
@ -274,8 +348,17 @@ class PostgreSQLDatabase extends SS_Database
* The core search engine configuration.
* @todo Properly extract the search functions out of the core.
*
* @param array $classesToSearch
* @param string $keywords Keywords as a space separated string
* @return object DataObjectSet of result pages
* @param int $start
* @param int $pageLength
* @param string $sortBy
* @param string $extraFilter
* @param bool $booleanSearch
* @param string $alternativeFileFilter
* @param bool $invertedMatch
* @return PaginatedList List of result pages
* @throws Exception
*/
public function searchEngine($classesToSearch, $keywords, $start, $pageLength, $sortBy = "ts_rank DESC", $extraFilter = "", $booleanSearch = false, $alternativeFileFilter = "", $invertedMatch = false)
{
@ -613,7 +696,7 @@ class PostgreSQLDatabase extends SS_Database
// Check current schema is valid
$oldSchema = $this->schema;
if (empty($oldSchema)) {
return true;
return;
} // Nothing selected to drop
// Select another schema
@ -667,6 +750,7 @@ class PostgreSQLDatabase extends SS_Database
// New connection made here, treating the new database name as the new original
$this->databaseOriginal = $name;
$this->connectDefault();
return true;
}
/**

View File

@ -1,4 +1,12 @@
<?php
namespace SilverStripe\PostgreSQL;
use DatabaseConfigurationHelper;
use PDO;
use Exception;
use DatabaseAdapterRegistry;
/**
* This is a helper class for the SS installer.
*
@ -120,24 +128,6 @@ class PostgreSQLDatabaseConfigurationHelper implements DatabaseConfigurationHelp
);
}
/**
* Helper function to quote a string value
*
* @param mixed $conn Connection object/resource
* @param string $value Value to quote
* @return string Quoted strieng
*/
protected function quote($conn, $value)
{
if ($conn instanceof PDO) {
return $conn->quote($value);
} elseif (is_resource($conn)) {
return "'".pg_escape_string($conn, $value)."'";
} else {
user_error('Invalid database connection', E_USER_ERROR);
}
}
/**
* Helper function to execute a query
*

View File

@ -1,5 +1,9 @@
<?php
namespace SilverStripe\PostgreSQL;
use SilverStripe\ORM\Connect\SS_Query;
/**
* A result-set from a PostgreSQL database.
*
@ -16,8 +20,7 @@ class PostgreSQLQuery extends SS_Query
/**
* Hook the result-set given into a Query class, suitable for use by sapphire.
* @param database The database object that created this query.
* @param handle the internal Postgres handle that is points to the resultset.
* @param resource $handle the internal Postgres handle that is points to the resultset.
*/
public function __construct($handle)
{

View File

@ -1,5 +1,11 @@
<?php
namespace SilverStripe\PostgreSQL;
use SilverStripe\ORM\Queries\SQLSelect;
use SilverStripe\ORM\Connect\DBQueryBuilder;
use InvalidArgumentException;
class PostgreSQLQueryBuilder extends DBQueryBuilder
{
/**

View File

@ -1,5 +1,11 @@
<?php
namespace SilverStripe\PostgreSQL;
use SilverStripe\ORM\Connect\DBSchemaManager;
use SilverStripe\ORM\DB;
use Deprecation;
/**
* PostgreSQL schema manager
*
@ -122,7 +128,8 @@ class PostgreSQLSchemaManager extends DBSchemaManager
{
if (PostgreSQLDatabase::model_schema_as_database()) {
$schemaName = $this->database->databaseToSchemaName($name);
return $this->dropSchema($schemaName);
$this->dropSchema($schemaName);
return;
}
$this->dropPostgresDatabase($name);
}
@ -232,11 +239,11 @@ class PostgreSQLSchemaManager extends DBSchemaManager
$tableSpace = '';
}
$this->query("CREATE TABLE \"$table\" (
$fieldSchemas
$fulltexts
primary key (\"ID\")
)$tableSpace; $indexSchemas $addOptions");
$this->query("CREATE TABLE \"$table\" (
$fieldSchemas
$fulltexts
primary key (\"ID\")
)$tableSpace; $indexSchemas $addOptions");
if ($triggers!='') {
$this->query($triggers);
@ -400,7 +407,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
if ($alteredOptions && isset($this->class) && isset($alteredOptions[$this->class])) {
$this->query(sprintf("ALTER TABLE \"%s\" %s", $table, $alteredOptions[$this->class]));
Database::alteration_message(
DB::alteration_message(
sprintf("Table %s options changed: %s", $table, $alteredOptions[$this->class]),
"changed"
);
@ -710,37 +717,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
}
}
/*
* @todo - factor out? Is DBSchemaManager::convertIndexSpec sufficient?
public function convertIndexSpec($indexSpec, $asDbValue=false, $table=''){
if(!$asDbValue){
if(is_array($indexSpec)){
//Here we create a db-specific version of whatever index we need to create.
switch($indexSpec['type']){
case 'fulltext':
$indexSpec='fulltext (' . $indexSpec['value'] . ')';
break;
case 'unique':
$indexSpec='unique (' . $indexSpec['value'] . ')';
break;
case 'hash':
$indexSpec='using hash (' . $indexSpec['value'] . ')';
break;
case 'index':
//The default index is 'btree', which we'll use by default (below):
default:
$indexSpec='using btree (' . $indexSpec['value'] . ')';
break;
}
}
} else {
$indexSpec = $this->buildPostgresIndexName($table, $indexSpec);
}
return $indexSpec;
}*/
protected function getIndexSqlDefinition($tableName, $indexName, $indexSpec, $asDbValue=false)
protected function getIndexSqlDefinition($tableName, $indexName, $indexSpec)
{
//TODO: create table partition support
@ -750,12 +727,6 @@ class PostgreSQLSchemaManager extends DBSchemaManager
//Therefore, we now check for the existance of indexes before we create them.
//This is techically a bug, since new tables will not be indexed.
// If requesting the definition rather than the DDL
if ($asDbValue) {
$indexName=trim($indexName, '()');
return $indexName;
}
// Determine index name
$tableCol = $this->buildPostgresIndexName($tableName, $indexName);
@ -808,6 +779,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
if ($indexSpec[0] != '(') {
list($indexType, $indexFields) = explode(' ', $indexSpec, 2);
} else {
$indexType = null;
$indexFields = $indexSpec;
}
@ -1045,28 +1017,12 @@ class PostgreSQLSchemaManager extends DBSchemaManager
* Return a boolean type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function boolean($values, $asDbValue=false)
public function boolean($values)
{
//Annoyingly, we need to do a good ol' fashioned switch here:
$default = $values['default'] ? '1' : '0';
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($asDbValue) {
return array('data_type'=>'smallint');
}
if ($values['arrayValue'] != '') {
$default = '';
} else {
$default = ' default ' . (int)$values['default'];
}
return "smallint{$values['arrayValue']}" . $default;
return "smallint default {$default}";
}
/**
@ -1077,26 +1033,17 @@ class PostgreSQLSchemaManager extends DBSchemaManager
*/
public function date($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
return "date{$values['arrayValue']}";
return "date";
}
/**
* Return a decimal type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function decimal($values, $asDbValue=false)
public function decimal($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
// Avoid empty strings being put in the db
if ($values['precision'] == '') {
$precision = 1;
@ -1109,11 +1056,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
$defaultValue = ' default ' . floatval($values['default']);
}
if ($asDbValue) {
return array('data_type' => 'numeric', 'precision' => $precision);
} else {
return "decimal($precision){$values['arrayValue']}$defaultValue";
}
return "decimal($precision)$defaultValue";
}
/**
@ -1124,103 +1067,52 @@ class PostgreSQLSchemaManager extends DBSchemaManager
*/
public function enum($values)
{
//Enums are a bit different. We'll be creating a varchar(255) with a constraint of all the usual enum options.
//NOTE: In this one instance, we are including the table name in the values array
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($values['arrayValue']!='') {
$default = '';
} else {
$default = " default '{$values['default']}'";
}
return "varchar(255){$values['arrayValue']}" . $default . " check (\"" . $values['name'] . "\" in ('" . implode('\', \'', $values['enums']) . "'))";
$default = " default '{$values['default']}'";
return "varchar(255)" . $default . " check (\"" . $values['name'] . "\" in ('" . implode('\', \'', $values['enums']) . "'))";
}
/**
* Return a float type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function float($values, $asDbValue = false)
public function float($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($asDbValue) {
return array('data_type' => 'double precision');
} else {
return "float{$values['arrayValue']}";
}
return "float";
}
/**
* Return a float type-formatted string cause double is not supported
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function double($values, $asDbValue=false)
public function double($values)
{
return $this->float($values, $asDbValue);
return $this->float($values);
}
/**
* Return a int type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function int($values, $asDbValue = false)
public function int($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($asDbValue) {
return array('data_type'=>'integer', 'precision'=>'32');
}
if ($values['arrayValue']!='') {
$default='';
} else {
$default=' default ' . (int)$values['default'];
}
return "integer{$values['arrayValue']}" . $default;
return "integer default " . (int)$values['default'];
}
/**
* Return a bigint type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function bigint($values, $asDbValue = false)
public function bigint($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($asDbValue) {
return array('data_type'=>'bigint', 'precision'=>'64');
}
if ($values['arrayValue']!='') {
$default='';
} else {
$default=' default ' . (int)$values['default'];
}
return "bigint{$values['arrayValue']}" . $default;
return "bigint default" . (int)$values['default'];
}
/**
@ -1228,40 +1120,22 @@ class PostgreSQLSchemaManager extends DBSchemaManager
* For PostgreSQL, we simply return the word 'timestamp', no other parameters are necessary
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function SS_Datetime($values, $asDbValue = false)
public function datetime($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue']='';
}
if ($asDbValue) {
return array('data_type'=>'timestamp without time zone');
} else {
return "timestamp{$values['arrayValue']}";
}
return "timestamp";
}
/**
* Return a text type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function text($values, $asDbValue = false)
public function text($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue'] = '';
}
if ($asDbValue) {
return array('data_type'=>'text');
} else {
return "text{$values['arrayValue']}";
}
return "text";
}
/**
@ -1272,35 +1146,22 @@ class PostgreSQLSchemaManager extends DBSchemaManager
*/
public function time($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue'] = '';
}
return "time{$values['arrayValue']}";
return "time";
}
/**
* Return a varchar type-formatted string
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function varchar($values, $asDbValue=false)
public function varchar($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue'] = '';
}
if (!isset($values['precision'])) {
$values['precision'] = 255;
}
if ($asDbValue) {
return array('data_type'=>'varchar', 'precision'=>$values['precision']);
} else {
return "varchar({$values['precision']}){$values['arrayValue']}";
}
return "varchar({$values['precision']})";
}
/*
@ -1308,21 +1169,11 @@ class PostgreSQLSchemaManager extends DBSchemaManager
* For Postgres, we'll use a 4 digit numeric
*
* @param array $values Contains a tokenised list of info about this data type
* @param boolean $asDbValue
* @return string
*/
public function year($values, $asDbValue = false)
public function year($values)
{
if (!isset($values['arrayValue'])) {
$values['arrayValue'] = '';
}
//TODO: the DbValue result does not include the numeric_scale option (ie, the ,0 value in 4,0)
if ($asDbValue) {
return array('data_type'=>'decimal', 'precision'=>'4');
} else {
return "decimal(4,0){$values['arrayValue']}";
}
return "decimal(4,0)";
}
/**
@ -1334,7 +1185,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
* @param array $this_index Index specification for the fulltext index
* @param string $tableName
* @param string $name
* @param array $spec
* @return array
*/
protected function fulltext($this_index, $tableName, $name)
{
@ -1462,7 +1313,7 @@ class PostgreSQLSchemaManager extends DBSchemaManager
* @param array $indexes
* @param array $extensions
*/
public function createOrReplacePartition($tableName, $partitions, $indexes, $extensions)
public function createOrReplacePartition($tableName, $partitions, $indexes = [], $extensions = [])
{
//We need the plpgsql language to be installed for this to work:

View File

@ -12,6 +12,9 @@
"require": {
"silverstripe/framework": "~4.0"
},
"require-dev": {
"phpunit/PHPUnit": "~4.8"
},
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"

View File

@ -1,5 +1,7 @@
<?php
use SilverStripe\PostgreSQL\PostgreSQLConnector;
/**
* Description of PostgreSQLConnectorTest
*

View File

@ -1,4 +1,9 @@
<?php
use SilverStripe\ORM\DB;
use SilverStripe\ORM\DataObject;
use SilverStripe\PostgreSQL\PostgreSQLDatabase;
/**
* @package postgresql
* @subpackage tests