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
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
e23f869c
Commit
e23f869c
authored
Dec 27, 2013
by
Mark
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added postgresql features to reset seq/check integrity
parent
6eb6e226
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
2 deletions
+63
-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
No files found.
framework/yii/db/mysql/Schema.php
View file @
e23f869c
...
...
@@ -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.
* @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'
;
if
(
$schema
!==
''
)
{
...
...
framework/yii/db/pgsql/QueryBuilder.php
View file @
e23f869c
...
...
@@ -7,6 +7,7 @@
*/
namespace
yii\db\pgsql
;
use
yii\base\InvalidParamException
;
/**
* QueryBuilder is the query builder for PostgreSQL databases.
...
...
@@ -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 $table the table name. Meaningless for MySQL.
* @param string $schema the schema of the tables. Meaningless for MySQL.
* @return string the SQL statement for checking integrity
*/
public
function
checkIntegrity
(
$check
=
true
,
$schema
=
''
,
$table
=
''
)
{
$enable
=
$check
?
'ENABLE'
:
'DISABLE'
;
$tableNames
=
$this
->
db
->
schema
->
findTableNames
(
$schema
);
$command
=
''
;
foreach
(
$tableNames
as
$tableName
)
{
$tableName
=
'"'
.
$tableName
.
'"'
;
if
(
strpos
(
$tableName
,
'.'
)
!==
false
)
$tableName
=
str_replace
(
'.'
,
'"."'
,
$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.
* @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.
...
...
framework/yii/db/pgsql/Schema.php
View file @
e23f869c
...
...
@@ -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.
* @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
===
''
)
{
$schema
=
$this
->
defaultSchema
;
...
...
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