Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
f9c5d876
Commit
f9c5d876
authored
Dec 27, 2013
by
Qiang Xue
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1648 from Ragazzo/postgresql_features
added postgresql features to reset seq/check integrity
parents
9623c129
79ef473a
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
69 additions
and
6 deletions
+69
-6
Command.php
extensions/yii/sphinx/Command.php
+1
-1
CHANGELOG.md
framework/CHANGELOG.md
+1
-0
Command.php
framework/yii/db/Command.php
+3
-2
Schema.php
framework/yii/db/mysql/Schema.php
+1
-1
QueryBuilder.php
framework/yii/db/pgsql/QueryBuilder.php
+61
-0
Schema.php
framework/yii/db/pgsql/Schema.php
+1
-1
Schema.php
framework/yii/db/sqlite/Schema.php
+1
-1
No files found.
extensions/yii/sphinx/Command.php
View file @
f9c5d876
...
@@ -319,7 +319,7 @@ class Command extends \yii\db\Command
...
@@ -319,7 +319,7 @@ class Command extends \yii\db\Command
/**
/**
* @inheritdoc
* @inheritdoc
*/
*/
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
)
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
,
$table
=
''
)
{
{
throw
new
NotSupportedException
(
'"'
.
__METHOD__
.
'" is not supported.'
);
throw
new
NotSupportedException
(
'"'
.
__METHOD__
.
'" is not supported.'
);
}
}
...
...
framework/CHANGELOG.md
View file @
f9c5d876
...
@@ -34,6 +34,7 @@ Yii Framework 2 Change Log
...
@@ -34,6 +34,7 @@ Yii Framework 2 Change Log
-
Enh #1611: Added
`BaseActiveRecord::markAttributeDirty()`
(qiangxue)
-
Enh #1611: Added
`BaseActiveRecord::markAttributeDirty()`
(qiangxue)
-
Enh #1634: Use masked CSRF tokens to prevent BREACH exploits (qiangxue)
-
Enh #1634: Use masked CSRF tokens to prevent BREACH exploits (qiangxue)
-
Enh #1641: Added
`BaseActiveRecord::updateAttributes()`
(qiangxue)
-
Enh #1641: Added
`BaseActiveRecord::updateAttributes()`
(qiangxue)
-
Enh #1646: Added postgresql
`QueryBuilder::checkIntegrity`
and
`QueryBuilder::resetSequence`
(Ragazzo)
-
Enh: Added
`favicon.ico`
and
`robots.txt`
to defauly application templates (samdark)
-
Enh: Added
`favicon.ico`
and
`robots.txt`
to defauly application templates (samdark)
-
Enh: Added
`Widget::autoIdPrefix`
to support prefixing automatically generated widget IDs (qiangxue)
-
Enh: Added
`Widget::autoIdPrefix`
to support prefixing automatically generated widget IDs (qiangxue)
-
Enh: Support for file aliases in console command 'message' (omnilight)
-
Enh: Support for file aliases in console command 'message' (omnilight)
...
...
framework/yii/db/Command.php
View file @
f9c5d876
...
@@ -743,12 +743,13 @@ class Command extends \yii\base\Component
...
@@ -743,12 +743,13 @@ class Command extends \yii\base\Component
* @param boolean $check whether to turn on or off the integrity check.
* @param boolean $check whether to turn on or off the integrity check.
* @param string $schema the schema name of the tables. Defaults to empty string, meaning the current
* @param string $schema the schema name of the tables. Defaults to empty string, meaning the current
* or default schema.
* or default schema.
* @param string $table the table name.
* @return Command the command object itself
* @return Command the command object itself
* @throws NotSupportedException if this is not supported by the underlying DBMS
* @throws NotSupportedException if this is not supported by the underlying DBMS
*/
*/
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
)
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
,
$table
=
''
)
{
{
$sql
=
$this
->
db
->
getQueryBuilder
()
->
checkIntegrity
(
$check
,
$schema
);
$sql
=
$this
->
db
->
getQueryBuilder
()
->
checkIntegrity
(
$check
,
$schema
,
$table
);
return
$this
->
setSql
(
$sql
);
return
$this
->
setSql
(
$sql
);
}
}
}
}
framework/yii/db/mysql/Schema.php
View file @
f9c5d876
...
@@ -280,7 +280,7 @@ class Schema extends \yii\db\Schema
...
@@ -280,7 +280,7 @@ class Schema extends \yii\db\Schema
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
* @return array all table names in the database. The names have NO schema name prefix.
* @return array all table names in the database. The names have NO schema name prefix.
*/
*/
p
rotected
function
findTableNames
(
$schema
=
''
)
p
ublic
function
findTableNames
(
$schema
=
''
)
{
{
$sql
=
'SHOW TABLES'
;
$sql
=
'SHOW TABLES'
;
if
(
$schema
!==
''
)
{
if
(
$schema
!==
''
)
{
...
...
framework/yii/db/pgsql/QueryBuilder.php
View file @
f9c5d876
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
*/
*/
namespace
yii\db\pgsql
;
namespace
yii\db\pgsql
;
use
yii\base\InvalidParamException
;
/**
/**
* QueryBuilder is the query builder for PostgreSQL databases.
* QueryBuilder is the query builder for PostgreSQL databases.
...
@@ -62,6 +63,66 @@ class QueryBuilder extends \yii\db\QueryBuilder
...
@@ -62,6 +63,66 @@ class QueryBuilder extends \yii\db\QueryBuilder
}
}
/**
/**
* Creates a SQL statement for resetting the sequence value of a table's primary key.
* The sequence will be reset such that the primary key of the next new row inserted
* will have the specified value or 1.
* @param string $tableName the name of the table whose primary key sequence will be reset
* @param mixed $value the value for the primary key of the next new row inserted. If this is not set,
* the next new row's primary key will have a value 1.
* @return string the SQL statement for resetting sequence
* @throws InvalidParamException if the table does not exist or there is no sequence associated with the table.
*/
public
function
resetSequence
(
$tableName
,
$value
=
null
)
{
$table
=
$this
->
db
->
getTableSchema
(
$tableName
);
if
(
$table
!==
null
&&
$table
->
sequenceName
!==
null
)
{
$sequence
=
'"'
.
$table
->
sequenceName
.
'"'
;
if
(
strpos
(
$sequence
,
'.'
)
!==
false
)
{
$sequence
=
str_replace
(
'.'
,
'"."'
,
$sequence
);
}
$tableName
=
$this
->
db
->
quoteTableName
(
$tableName
);
if
(
$value
===
null
)
{
$key
=
reset
(
$table
->
primaryKey
);
$value
=
"(SELECT COALESCE(MAX(
\"
{
$key
}
\"
),0) FROM
{
$tableName
}
)+1"
;
}
else
{
$value
=
(
int
)
$value
;
}
return
"SELECT SETVAL('
$sequence
',
$value
,false)"
;
}
elseif
(
$table
===
null
)
{
throw
new
InvalidParamException
(
"Table not found:
$tableName
"
);
}
else
{
throw
new
InvalidParamException
(
"There is not sequence associated with table '
$tableName
'."
);
}
}
/**
* Builds a SQL statement for enabling or disabling integrity check.
* @param boolean $check whether to turn on or off the integrity check.
* @param string $schema the schema of the tables.
* @param string $table the table name.
* @return string the SQL statement for checking integrity
*/
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
,
$table
=
''
)
{
$enable
=
$check
?
'ENABLE'
:
'DISABLE'
;
$schema
=
$schema
?
$schema
:
$this
->
db
->
schema
->
defaultSchema
;
$tableNames
=
$table
?
[
$table
]
:
$this
->
db
->
schema
->
findTableNames
(
$schema
);
$command
=
''
;
foreach
(
$tableNames
as
$tableName
)
{
$tableName
=
'"'
.
$schema
.
'"."'
.
$tableName
.
'"'
;
$command
.=
"ALTER TABLE
$tableName
$enable
TRIGGER ALL; "
;
}
#enable to have ability to alter several tables
$this
->
db
->
pdo
->
setAttribute
(
\PDO
::
ATTR_EMULATE_PREPARES
,
true
);
return
$command
;
}
/**
* Builds a SQL statement for changing the definition of a column.
* Builds a SQL statement for changing the definition of a column.
* @param string $table the table whose column is to be changed. The table name will be properly quoted by the method.
* @param string $table the table whose column is to be changed. The table name will be properly quoted by the method.
* @param string $column the name of the column to be changed. The name will be properly quoted by the method.
* @param string $column the name of the column to be changed. The name will be properly quoted by the method.
...
...
framework/yii/db/pgsql/Schema.php
View file @
f9c5d876
...
@@ -158,7 +158,7 @@ class Schema extends \yii\db\Schema
...
@@ -158,7 +158,7 @@ class Schema extends \yii\db\Schema
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema.
* @return array all table names in the database. The names have NO schema name prefix.
* @return array all table names in the database. The names have NO schema name prefix.
*/
*/
p
rotected
function
findTableNames
(
$schema
=
''
)
p
ublic
function
findTableNames
(
$schema
=
''
)
{
{
if
(
$schema
===
''
)
{
if
(
$schema
===
''
)
{
$schema
=
$this
->
defaultSchema
;
$schema
=
$this
->
defaultSchema
;
...
...
framework/yii/db/sqlite/Schema.php
View file @
f9c5d876
...
@@ -87,7 +87,7 @@ class Schema extends \yii\db\Schema
...
@@ -87,7 +87,7 @@ class Schema extends \yii\db\Schema
* If not empty, the returned table names will be prefixed with the schema name.
* If not empty, the returned table names will be prefixed with the schema name.
* @return array all table names in the database.
* @return array all table names in the database.
*/
*/
p
rotected
function
findTableNames
(
$schema
=
''
)
p
ublic
function
findTableNames
(
$schema
=
''
)
{
{
$sql
=
"SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name<>'sqlite_sequence'"
;
$sql
=
"SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name<>'sqlite_sequence'"
;
return
$this
->
db
->
createCommand
(
$sql
)
->
queryColumn
();
return
$this
->
db
->
createCommand
(
$sql
)
->
queryColumn
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment