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
92fe7e47
Commit
92fe7e47
authored
Aug 31, 2011
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
w
parent
3e18a7a6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
252 additions
and
199 deletions
+252
-199
ColumnSchema.php
framework/db/dao/ColumnSchema.php
+32
-61
QueryBuilder.php
framework/db/dao/QueryBuilder.php
+5
-5
Schema.php
framework/db/dao/Schema.php
+35
-72
TableSchema.php
framework/db/dao/TableSchema.php
+10
-2
ColumnSchema.php
framework/db/dao/mysql/ColumnSchema.php
+77
-35
QueryBuilder.php
framework/db/dao/mysql/QueryBuilder.php
+93
-0
Schema.php
framework/db/dao/mysql/Schema.php
+0
-0
TableSchema.php
framework/db/dao/mysql/TableSchema.php
+0
-24
No files found.
framework/db/dao/ColumnSchema.php
View file @
92fe7e47
...
@@ -8,13 +8,15 @@
...
@@ -8,13 +8,15 @@
* @license http://www.yiiframework.com/license/
* @license http://www.yiiframework.com/license/
*/
*/
namespace
yii\db\dao
;
/**
/**
* ColumnSchema class describes the column meta data of a database table.
* ColumnSchema class describes the column meta data of a database table.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
* @since 2.0
*/
*/
class
ColumnSchema
extends
C
Component
class
ColumnSchema
extends
\yii\base\
Component
{
{
/**
/**
* @var string name of this column (without quotes).
* @var string name of this column (without quotes).
...
@@ -30,7 +32,7 @@ class ColumnSchema extends CComponent
...
@@ -30,7 +32,7 @@ class ColumnSchema extends CComponent
public
$allowNull
;
public
$allowNull
;
/**
/**
* @var string logical type of this column. Possible logic types include:
* @var string logical type of this column. Possible logic types include:
* string, text, boolean,
integer
, float, decimal, datetime, timestamp, time, date, binary
* string, text, boolean,
smallint, integer, bigint
, float, decimal, datetime, timestamp, time, date, binary
*/
*/
public
$type
;
public
$type
;
/**
/**
...
@@ -47,6 +49,10 @@ class ColumnSchema extends CComponent
...
@@ -47,6 +49,10 @@ class ColumnSchema extends CComponent
*/
*/
public
$defaultValue
;
public
$defaultValue
;
/**
/**
* @var array enumerable values
*/
public
$enumValues
;
/**
* @var integer size of the column.
* @var integer size of the column.
*/
*/
public
$size
;
public
$size
;
...
@@ -63,69 +69,37 @@ class ColumnSchema extends CComponent
...
@@ -63,69 +69,37 @@ class ColumnSchema extends CComponent
*/
*/
public
$isPrimaryKey
;
public
$isPrimaryKey
;
/**
/**
* @var boolean whether this column is a foreign key
*/
public
$isForeignKey
;
/**
* @var boolean whether this column is auto-incremental
* @var boolean whether this column is auto-incremental
*/
*/
public
$autoIncrement
=
false
;
public
$autoIncrement
=
false
;
/**
/**
* Initializes the column with its DB type and default value.
* @var boolean whether this column is unsigned. This is only meaningful
* This sets up the column's PHP type, size, precision, scale as well as default value.
* when [[type]] is `integer` or `bigint`.
* @param string $dbType the column's DB type
* @param mixed $defaultValue the default value
*/
*/
public
function
init
(
$dbType
,
$defaultValue
)
public
$unsigned
;
{
$this
->
dbType
=
$dbType
;
$this
->
extractType
(
$dbType
);
$this
->
extractLimit
(
$dbType
);
if
(
$defaultValue
!==
null
)
$this
->
extractDefault
(
$defaultValue
);
}
/**
/**
* Extracts the PHP type from DB type.
* Extracts the PHP type from DB type.
* @param string $dbType DB type
*/
protected
function
extractType
(
$dbType
)
{
if
(
stripos
(
$dbType
,
'int'
)
!==
false
&&
stripos
(
$dbType
,
'unsigned int'
)
===
false
)
$this
->
type
=
'integer'
;
elseif
(
stripos
(
$dbType
,
'bool'
)
!==
false
)
$this
->
type
=
'boolean'
;
elseif
(
preg_match
(
'/(real|floa|doub)/i'
,
$dbType
))
$this
->
type
=
'double'
;
else
$this
->
type
=
'string'
;
}
/**
* Extracts size, precision and scale information from column's DB type.
* @param string $dbType the column's DB type
*/
*/
protected
function
extractLimit
(
$dbType
)
protected
function
getPhpType
(
)
{
{
if
(
strpos
(
$dbType
,
'('
)
&&
preg_match
(
'/\((.*)\)/'
,
$dbType
,
$matches
))
static
$typeMap
=
array
(
// logical type => php type
{
'smallint'
=>
'integer'
,
$values
=
explode
(
','
,
$matches
[
1
]);
'integer'
=>
'integer'
,
$this
->
size
=
$this
->
precision
=
(
int
)
$values
[
0
];
'bigint'
=>
'integer'
,
if
(
isset
(
$values
[
1
]))
'boolean'
=>
'boolean'
,
$this
->
scale
=
(
int
)
$values
[
1
];
'float'
=>
'double'
,
);
if
(
isset
(
$typeMap
[
$this
->
type
]))
{
if
(
$this
->
type
===
'bigint'
)
{
return
PHP_INT_SIZE
==
8
&&
!
$this
->
unsigned
?
'integer'
:
'string'
;
}
elseif
(
$this
->
type
===
'integer'
)
{
return
PHP_INT_SIZE
==
4
&&
$this
->
unsigned
?
'string'
:
'integer'
;
}
return
$typeMap
[
$this
->
type
];
}
}
}
return
'string'
;
/**
* Extracts the default value for the column.
* The value is typecasted to correct PHP type.
* @param mixed $defaultValue the default value obtained from metadata
*/
protected
function
extractDefault
(
$defaultValue
)
{
$this
->
defaultValue
=
$this
->
typecast
(
$defaultValue
);
}
}
/**
/**
...
@@ -135,17 +109,14 @@ class ColumnSchema extends CComponent
...
@@ -135,17 +109,14 @@ class ColumnSchema extends CComponent
*/
*/
public
function
typecast
(
$value
)
public
function
typecast
(
$value
)
{
{
if
(
gettype
(
$value
)
===
$this
->
type
||
$value
===
null
||
$value
instanceof
CDbExpression
)
if
(
$value
===
null
||
gettype
(
$value
)
===
$this
->
phpType
||
$value
instanceof
Expression
)
{
return
$value
;
return
$value
;
if
(
$value
===
''
)
}
return
$this
->
type
===
'string'
?
''
:
null
;
switch
(
$this
->
phpType
)
{
switch
(
$this
->
type
)
{
case
'string'
:
return
(
string
)
$value
;
case
'string'
:
return
(
string
)
$value
;
case
'integer'
:
return
(
integer
)
$value
;
case
'integer'
:
return
(
integer
)
$value
;
case
'boolean'
:
return
(
boolean
)
$value
;
case
'boolean'
:
return
(
boolean
)
$value
;
case
'double'
:
default
:
return
$value
;
}
}
return
$value
;
}
}
}
}
framework/db/dao/QueryBuilder.php
View file @
92fe7e47
...
@@ -151,7 +151,7 @@ class QueryBuilder extends \yii\base\Component
...
@@ -151,7 +151,7 @@ class QueryBuilder extends \yii\base\Component
public
function
dropColumn
(
$table
,
$column
)
public
function
dropColumn
(
$table
,
$column
)
{
{
return
"ALTER TABLE "
.
$this
->
quoteTableName
(
$table
)
return
"ALTER TABLE "
.
$this
->
quoteTableName
(
$table
)
.
" DROP COLUMN "
.
$this
->
quoteColumnName
(
$column
);
.
" DROP COLUMN "
.
$this
->
quote
Simple
ColumnName
(
$column
);
}
}
/**
/**
...
@@ -165,8 +165,8 @@ class QueryBuilder extends \yii\base\Component
...
@@ -165,8 +165,8 @@ class QueryBuilder extends \yii\base\Component
public
function
renameColumn
(
$table
,
$name
,
$newName
)
public
function
renameColumn
(
$table
,
$name
,
$newName
)
{
{
return
"ALTER TABLE "
.
$this
->
quoteTableName
(
$table
)
return
"ALTER TABLE "
.
$this
->
quoteTableName
(
$table
)
.
" RENAME COLUMN "
.
$this
->
quoteColumnName
(
$name
)
.
" RENAME COLUMN "
.
$this
->
quote
Simple
ColumnName
(
$name
)
.
" TO "
.
$this
->
quoteColumnName
(
$newName
);
.
" TO "
.
$this
->
quote
Simple
ColumnName
(
$newName
);
}
}
/**
/**
...
@@ -181,8 +181,8 @@ class QueryBuilder extends \yii\base\Component
...
@@ -181,8 +181,8 @@ class QueryBuilder extends \yii\base\Component
public
function
alterColumn
(
$table
,
$column
,
$type
)
public
function
alterColumn
(
$table
,
$column
,
$type
)
{
{
return
'ALTER TABLE '
.
$this
->
quoteTableName
(
$table
)
.
' CHANGE '
return
'ALTER TABLE '
.
$this
->
quoteTableName
(
$table
)
.
' CHANGE '
.
$this
->
quoteColumnName
(
$column
)
.
' '
.
$this
->
quote
Simple
ColumnName
(
$column
)
.
' '
.
$this
->
quoteColumnName
(
$column
)
.
' '
.
$this
->
quote
Simple
ColumnName
(
$column
)
.
' '
.
$this
->
getColumnType
(
$type
);
.
$this
->
getColumnType
(
$type
);
}
}
...
...
framework/db/dao/Schema.php
View file @
92fe7e47
...
@@ -18,18 +18,18 @@ namespace yii\db\dao;
...
@@ -18,18 +18,18 @@ namespace yii\db\dao;
*/
*/
abstract
class
Schema
extends
\yii\base\Component
abstract
class
Schema
extends
\yii\base\Component
{
{
public
$connection
;
private
$_tableNames
=
array
();
private
$_tableNames
=
array
();
private
$_tables
=
array
();
private
$_tables
=
array
();
private
$_connection
;
private
$_builder
;
private
$_builder
;
private
$_cacheExclude
=
array
();
/**
/**
* Loads the metadata for the specified table.
* Loads the metadata for the specified table.
* @param string $name table name
* @param string $name table name
* @return
CDb
TableSchema driver dependent table metadata, null if the table does not exist.
* @return TableSchema driver dependent table metadata, null if the table does not exist.
*/
*/
abstract
protected
function
loadTable
(
$name
);
abstract
protected
function
loadTable
Schema
(
$name
);
/**
/**
* Constructor.
* Constructor.
...
@@ -37,17 +37,7 @@ abstract class Schema extends \yii\base\Component
...
@@ -37,17 +37,7 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
__construct
(
$connection
)
public
function
__construct
(
$connection
)
{
{
$this
->
_connection
=
$connection
;
$this
->
connection
=
$connection
;
foreach
(
$connection
->
schemaCachingExclude
as
$name
)
$this
->
_cacheExclude
[
$name
]
=
true
;
}
/**
* @return Connection database connection. The connection is active.
*/
public
function
getConnection
()
{
return
$this
->
_connection
;
}
}
/**
/**
...
@@ -62,13 +52,13 @@ abstract class Schema extends \yii\base\Component
...
@@ -62,13 +52,13 @@ abstract class Schema extends \yii\base\Component
}
}
if
(
strpos
(
$name
,
'{{'
)
!==
false
)
{
if
(
strpos
(
$name
,
'{{'
)
!==
false
)
{
$realName
=
preg_replace
(
'/\{\{(.*?)\}\}/'
,
$this
->
_
connection
->
tablePrefix
.
'$1'
,
$name
);
$realName
=
preg_replace
(
'/\{\{(.*?)\}\}/'
,
$this
->
connection
->
tablePrefix
.
'$1'
,
$name
);
}
}
else
{
else
{
$realName
=
$name
;
$realName
=
$name
;
}
}
$db
=
$this
->
_
connection
;
$db
=
$this
->
connection
;
// temporarily disable query caching
// temporarily disable query caching
if
(
$db
->
queryCachingDuration
>=
0
)
{
if
(
$db
->
queryCachingDuration
>=
0
)
{
...
@@ -77,7 +67,7 @@ abstract class Schema extends \yii\base\Component
...
@@ -77,7 +67,7 @@ abstract class Schema extends \yii\base\Component
}
}
if
(
!
in_array
(
$name
,
$db
->
schemaCachingExclude
)
&&
$db
->
schemaCachingDuration
>=
0
&&
(
$cache
=
\Yii
::
app
()
->
getComponent
(
$db
->
schemaCacheID
))
!==
null
)
{
if
(
!
in_array
(
$name
,
$db
->
schemaCachingExclude
)
&&
$db
->
schemaCachingDuration
>=
0
&&
(
$cache
=
\Yii
::
app
()
->
getComponent
(
$db
->
schemaCacheID
))
!==
null
)
{
$key
=
__CLASS__
.
"
:
{
$db
->
dsn
}
/
{
$db
->
username
}
/
{
$name
}
"
;
$key
=
__CLASS__
.
"
/
{
$db
->
dsn
}
/
{
$db
->
username
}
/
{
$name
}
"
;
if
((
$table
=
$cache
->
get
(
$key
))
===
false
)
{
if
((
$table
=
$cache
->
get
(
$key
))
===
false
)
{
$table
=
$this
->
loadTableSchema
(
$realName
);
$table
=
$this
->
loadTableSchema
(
$realName
);
if
(
$table
!==
null
)
{
if
(
$table
!==
null
)
{
...
@@ -102,15 +92,14 @@ abstract class Schema extends \yii\base\Component
...
@@ -102,15 +92,14 @@ abstract class Schema extends \yii\base\Component
* @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 the metadata for all tables in the database.
* @return array the metadata for all tables in the database.
* Each array element is an instance of {@link CDbTableSchema} (or its child class).
* Each array element is an instance of {@link CDbTableSchema} (or its child class).
* The array keys are table names.
*/
*/
public
function
getTables
(
$schema
=
''
)
public
function
getTable
Schema
s
(
$schema
=
''
)
{
{
$tables
=
array
();
$tables
=
array
();
foreach
(
$this
->
getTableNames
(
$schema
)
as
$name
)
foreach
(
$this
->
getTableNames
(
$schema
)
as
$name
)
{
{
if
((
$table
=
$this
->
getTableSchema
(
$name
))
!==
null
)
{
if
((
$table
=
$this
->
getTable
(
$name
))
!==
null
)
$tables
[]
=
$table
;
$tables
[
$name
]
=
$table
;
}
}
}
return
$tables
;
return
$tables
;
}
}
...
@@ -123,20 +112,21 @@ abstract class Schema extends \yii\base\Component
...
@@ -123,20 +112,21 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
getTableNames
(
$schema
=
''
)
public
function
getTableNames
(
$schema
=
''
)
{
{
if
(
!
isset
(
$this
->
_tableNames
[
$schema
]))
if
(
!
isset
(
$this
->
_tableNames
[
$schema
]))
{
$this
->
_tableNames
[
$schema
]
=
$this
->
findTableNames
(
$schema
);
$this
->
_tableNames
[
$schema
]
=
$this
->
findTableNames
(
$schema
);
}
return
$this
->
_tableNames
[
$schema
];
return
$this
->
_tableNames
[
$schema
];
}
}
/**
/**
* @return
CDbCommandBuilder the SQL command
builder for this connection.
* @return
QueryBuilder the query
builder for this connection.
*/
*/
public
function
get
Command
Builder
()
public
function
get
Query
Builder
()
{
{
if
(
$this
->
_builder
!==
null
)
if
(
$this
->
_builder
===
null
)
{
return
$this
->
_builder
;
$this
->
_builder
=
$this
->
createQueryBuilder
()
;
else
}
return
$this
->
_builder
=
$this
->
createCommandBuilder
()
;
return
$this
->
_builder
;
}
}
/**
/**
...
@@ -146,7 +136,7 @@ abstract class Schema extends \yii\base\Component
...
@@ -146,7 +136,7 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
refresh
()
public
function
refresh
()
{
{
$db
=
$this
->
_
connection
;
$db
=
$this
->
connection
;
if
(
$db
->
schemaCachingDuration
>=
0
&&
(
$cache
=
\Yii
::
app
()
->
getComponent
(
$db
->
schemaCacheID
))
!==
null
)
{
if
(
$db
->
schemaCachingDuration
>=
0
&&
(
$cache
=
\Yii
::
app
()
->
getComponent
(
$db
->
schemaCacheID
))
!==
null
)
{
foreach
(
$this
->
_tables
as
$name
=>
$table
)
{
foreach
(
$this
->
_tables
as
$name
=>
$table
)
{
$key
=
__CLASS__
.
":
{
$db
->
dsn
}
/
{
$db
->
username
}
/
{
$name
}
"
;
$key
=
__CLASS__
.
":
{
$db
->
dsn
}
/
{
$db
->
username
}
/
{
$name
}
"
;
...
@@ -155,7 +145,6 @@ abstract class Schema extends \yii\base\Component
...
@@ -155,7 +145,6 @@ abstract class Schema extends \yii\base\Component
}
}
$this
->
_tables
=
array
();
$this
->
_tables
=
array
();
$this
->
_tableNames
=
array
();
$this
->
_tableNames
=
array
();
$this
->
_builder
=
null
;
}
}
/**
/**
...
@@ -167,11 +156,13 @@ abstract class Schema extends \yii\base\Component
...
@@ -167,11 +156,13 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
quoteTableName
(
$name
)
public
function
quoteTableName
(
$name
)
{
{
if
(
strpos
(
$name
,
'.'
)
===
false
)
if
(
strpos
(
$name
,
'.'
)
===
false
)
{
return
$this
->
quoteSimpleTableName
(
$name
);
return
$this
->
quoteSimpleTableName
(
$name
);
}
$parts
=
explode
(
'.'
,
$name
);
$parts
=
explode
(
'.'
,
$name
);
foreach
(
$parts
as
$i
=>
$part
)
foreach
(
$parts
as
$i
=>
$part
)
{
$parts
[
$i
]
=
$this
->
quoteSimpleTableName
(
$part
);
$parts
[
$i
]
=
$this
->
quoteSimpleTableName
(
$part
);
}
return
implode
(
'.'
,
$parts
);
return
implode
(
'.'
,
$parts
);
}
}
...
@@ -184,7 +175,7 @@ abstract class Schema extends \yii\base\Component
...
@@ -184,7 +175,7 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
quoteSimpleTableName
(
$name
)
public
function
quoteSimpleTableName
(
$name
)
{
{
return
"'"
.
$name
.
"'"
;
return
strpos
(
$name
,
"'"
)
!==
false
?
$name
:
"'"
.
$name
.
"'"
;
}
}
/**
/**
...
@@ -196,14 +187,13 @@ abstract class Schema extends \yii\base\Component
...
@@ -196,14 +187,13 @@ abstract class Schema extends \yii\base\Component
*/
*/
public
function
quoteColumnName
(
$name
)
public
function
quoteColumnName
(
$name
)
{
{
if
((
$pos
=
strrpos
(
$name
,
'.'
))
!==
false
)
if
((
$pos
=
strrpos
(
$name
,
'.'
))
!==
false
)
{
{
$prefix
=
$this
->
quoteTableName
(
substr
(
$name
,
0
,
$pos
))
.
'.'
;
$prefix
=
$this
->
quoteTableName
(
substr
(
$name
,
0
,
$pos
))
.
'.'
;
$name
=
substr
(
$name
,
$pos
+
1
);
$name
=
substr
(
$name
,
$pos
+
1
);
}
}
else
else
$prefix
=
''
;
$prefix
=
''
;
return
$prefix
.
(
$name
===
'*'
?
$name
:
$this
->
quoteSimpleColumnName
(
$name
)
);
return
$prefix
.
$this
->
quoteSimpleColumnName
(
$name
);
}
}
/**
/**
...
@@ -211,45 +201,18 @@ abstract class Schema extends \yii\base\Component
...
@@ -211,45 +201,18 @@ abstract class Schema extends \yii\base\Component
* A simple column name does not contain prefix.
* A simple column name does not contain prefix.
* @param string $name column name
* @param string $name column name
* @return string the properly quoted column name
* @return string the properly quoted column name
* @since 1.1.6
*/
*/
public
function
quoteSimpleColumnName
(
$name
)
public
function
quoteSimpleColumnName
(
$name
)
{
{
return
'"'
.
$name
.
'"'
;
return
strpos
(
$name
,
'"'
)
!==
false
||
$name
===
'*'
?
$name
:
'"'
.
$name
.
'"'
;
}
/**
* Compares two table names.
* The table names can be either quoted or unquoted. This method
* will consider both cases.
* @param string $name1 table name 1
* @param string $name2 table name 2
* @return boolean whether the two table names refer to the same table.
*/
public
function
compareTableNames
(
$name1
,
$name2
)
{
$name1
=
str_replace
(
array
(
'"'
,
'`'
,
"'"
),
''
,
$name1
);
$name2
=
str_replace
(
array
(
'"'
,
'`'
,
"'"
),
''
,
$name2
);
if
((
$pos
=
strrpos
(
$name1
,
'.'
))
!==
false
)
$name1
=
substr
(
$name1
,
$pos
+
1
);
if
((
$pos
=
strrpos
(
$name2
,
'.'
))
!==
false
)
$name2
=
substr
(
$name2
,
$pos
+
1
);
if
(
$this
->
_connection
->
tablePrefix
!==
null
)
{
if
(
strpos
(
$name1
,
'{'
)
!==
false
)
$name1
=
$this
->
_connection
->
tablePrefix
.
str_replace
(
array
(
'{'
,
'}'
),
''
,
$name1
);
if
(
strpos
(
$name2
,
'{'
)
!==
false
)
$name2
=
$this
->
_connection
->
tablePrefix
.
str_replace
(
array
(
'{'
,
'}'
),
''
,
$name2
);
}
return
$name1
===
$name2
;
}
}
/**
/**
* Creates a
command
builder for the database.
* Creates a
query
builder for the database.
* This method may be overridden by child classes to create a DBMS-specific
command
builder.
* This method may be overridden by child classes to create a DBMS-specific
query
builder.
* @return
CDbCommandBuilder command
builder instance
* @return
QueryBuilder query
builder instance
*/
*/
p
rotected
function
createQueryBuilder
()
p
ublic
function
createQueryBuilder
()
{
{
return
new
QueryBuilder
(
$this
);
return
new
QueryBuilder
(
$this
);
}
}
...
...
framework/db/dao/TableSchema.php
View file @
92fe7e47
...
@@ -39,7 +39,7 @@ class TableSchema extends \yii\base\Component
...
@@ -39,7 +39,7 @@ class TableSchema extends \yii\base\Component
*/
*/
public
$name
;
public
$name
;
/**
/**
* @var string quoted name of this table. This
may
include [[schemaName]] if it is not empty.
* @var string quoted name of this table. This
will
include [[schemaName]] if it is not empty.
*/
*/
public
$quotedName
;
public
$quotedName
;
/**
/**
...
@@ -51,7 +51,15 @@ class TableSchema extends \yii\base\Component
...
@@ -51,7 +51,15 @@ class TableSchema extends \yii\base\Component
*/
*/
public
$sequenceName
;
public
$sequenceName
;
/**
/**
* @var array foreign keys of this table. The array is indexed by column name. Each value is an array of foreign table name and foreign column name.
* @var array foreign keys of this table. Each array element is of the following structure:
*
* ~~~
* array(
* 'ForeignTableName',
* 'fk1' => 'pk1', // pk1 is in foreign table
* 'fk2' => 'pk2', // if composite foreign key
* )
* ~~~
*/
*/
public
$foreignKeys
=
array
();
public
$foreignKeys
=
array
();
/**
/**
...
...
framework/db/dao/mysql/ColumnSchema.php
View file @
92fe7e47
...
@@ -8,6 +8,8 @@
...
@@ -8,6 +8,8 @@
* @license http://www.yiiframework.com/license/
* @license http://www.yiiframework.com/license/
*/
*/
namespace
yii\db\dao\mysql
;
/**
/**
* ColumnSchema class describes the column meta data of a MySQL table.
* ColumnSchema class describes the column meta data of a MySQL table.
*
*
...
@@ -20,18 +22,76 @@ class ColumnSchema extends \yii\db\dao\ColumnSchema
...
@@ -20,18 +22,76 @@ class ColumnSchema extends \yii\db\dao\ColumnSchema
* Extracts the PHP type from DB type.
* Extracts the PHP type from DB type.
* @param string $dbType DB type
* @param string $dbType DB type
*/
*/
p
rotected
function
extractType
(
$dbType
)
p
ublic
function
initTypes
(
$dbType
)
{
{
if
(
strncmp
(
$dbType
,
'enum'
,
4
)
===
0
)
static
$typeMap
=
array
(
// dbType => type
$this
->
type
=
'string'
;
'tinyint'
=>
'smallint'
,
elseif
(
strpos
(
$dbType
,
'float'
)
!==
false
||
strpos
(
$dbType
,
'double'
)
!==
false
)
'bit'
=>
'smallint'
,
$this
->
type
=
'double'
;
'smallint'
=>
'smallint'
,
elseif
(
strpos
(
$dbType
,
'bool'
)
!==
false
)
'mediumint'
=>
'integer'
,
$this
->
type
=
'boolean'
;
'int'
=>
'integer'
,
elseif
(
strpos
(
$dbType
,
'int'
)
===
0
&&
strpos
(
$dbType
,
'unsigned'
)
===
false
||
preg_match
(
'/(bit|tinyint|smallint|mediumint)/'
,
$dbType
))
'integer'
=>
'integer'
,
$this
->
type
=
'integer'
;
'bigint'
=>
'bigint'
,
else
'float'
=>
'float'
,
$this
->
type
=
'string'
;
'double'
=>
'float'
,
'real'
=>
'float'
,
'decimal'
=>
'decimal'
,
'numeric'
=>
'decimal'
,
'tinytext'
=>
'text'
,
'mediumtext'
=>
'text'
,
'longtext'
=>
'text'
,
'text'
=>
'text'
,
'varchar'
=>
'string'
,
'string'
=>
'string'
,
'char'
=>
'string'
,
'datetime'
=>
'datetime'
,
'year'
=>
'date'
,
'date'
=>
'date'
,
'time'
=>
'time'
,
'timestamp'
=>
'timestamp'
,
'enum'
=>
'enum'
,
);
$this
->
dbType
=
$dbType
;
$this
->
type
=
'string'
;
$this
->
unsigned
=
strpos
(
$this
->
dbType
,
'unsigned'
)
!==
false
;
if
(
preg_match
(
'/^(\w+)(?:\(([^\)]+)\))?/'
,
$this
->
dbType
,
$matches
))
{
$type
=
$matches
[
1
];
if
(
isset
(
$typeMap
[
$type
]))
{
$this
->
type
=
$typeMap
[
$type
];
}
if
(
!
empty
(
$matches
[
2
]))
{
if
(
$this
->
type
===
'enum'
)
{
$values
=
explode
(
','
,
$matches
[
2
]);
foreach
(
$values
as
$i
=>
$value
)
{
$values
[
$i
]
=
trim
(
$value
,
"'"
);
}
$this
->
enumValues
=
$values
;
}
else
{
$values
=
explode
(
','
,
$matches
[
2
]);
$this
->
size
=
$this
->
precision
=
(
int
)
$values
[
0
];
if
(
isset
(
$values
[
1
]))
{
$this
->
scale
=
(
int
)
$values
[
1
];
}
if
(
$this
->
size
===
1
&&
(
$type
===
'tinyint'
||
$type
===
'bit'
))
{
$this
->
type
=
'boolean'
;
}
elseif
(
$type
===
'bit'
)
{
if
(
$this
->
size
>
32
)
{
$this
->
type
=
'bigint'
;
}
elseif
(
$this
->
size
===
32
)
{
$this
->
type
=
'integer'
;
}
}
}
}
}
$this
->
phpType
=
$this
->
getPhpType
();
}
}
/**
/**
...
@@ -39,32 +99,13 @@ class ColumnSchema extends \yii\db\dao\ColumnSchema
...
@@ -39,32 +99,13 @@ class ColumnSchema extends \yii\db\dao\ColumnSchema
* The value is typecasted to correct PHP type.
* The value is typecasted to correct PHP type.
* @param mixed $defaultValue the default value obtained from metadata
* @param mixed $defaultValue the default value obtained from metadata
*/
*/
p
rotected
function
extractDefault
(
$defaultValue
)
p
ublic
function
initDefaultValue
(
$defaultValue
)
{
{
if
(
$this
->
dbType
===
'timestamp'
&&
$defaultValue
===
'CURRENT_TIMESTAMP'
)
if
(
$this
->
type
===
'timestamp'
&&
$defaultValue
===
'CURRENT_TIMESTAMP'
)
{
$this
->
defaultValue
=
null
;
$this
->
defaultValue
=
null
;
else
parent
::
extractDefault
(
$defaultValue
);
}
/**
* Extracts size, precision and scale information from column's DB type.
* @param string $dbType the column's DB type
*/
protected
function
extractLimit
(
$dbType
)
{
if
(
strncmp
(
$dbType
,
'enum'
,
4
)
===
0
&&
preg_match
(
'/\((.*)\)/'
,
$dbType
,
$matches
))
{
$values
=
explode
(
','
,
$matches
[
1
]);
$size
=
0
;
foreach
(
$values
as
$value
)
{
if
((
$n
=
strlen
(
$value
))
>
$size
)
$size
=
$n
;
}
$this
->
size
=
$this
->
precision
=
$size
-
2
;
}
}
else
else
{
parent
::
extractLimit
(
$dbType
);
$this
->
defaultValue
=
$this
->
typecast
(
$defaultValue
);
}
}
}
}
}
\ No newline at end of file
framework/db/dao/mysql/QueryBuilder.php
0 → 100644
View file @
92fe7e47
<?php
/**
* QueryBuilder class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-2012 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
yii\db\dao\mysql
;
/**
* QueryBuilder builds a SQL statement based on the specification given as a [[Query]] object.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class
QueryBuilder
extends
\yii\db\dao\QueryBuilder
{
/**
* @var array the abstract column types mapped to physical column types.
*/
public
$columnTypes
=
array
(
'pk'
=>
'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'
,
'string'
=>
'varchar(255)'
,
'text'
=>
'text'
,
'smallint'
=>
'smallint'
,
'integer'
=>
'int(11)'
,
'bigint'
=>
'bigint'
,
'boolean'
=>
'tinyint(1)'
,
'float'
=>
'float'
,
'decimal'
=>
'decimal'
,
'money'
=>
'decimal(19,4)'
,
'datetime'
=>
'datetime'
,
'timestamp'
=>
'timestamp'
,
'time'
=>
'time'
,
'date'
=>
'date'
,
'binary'
=>
'blob'
,
);
/**
* Builds a SQL statement for renaming a column.
* @param string $table the table whose column is to be renamed. The name will be properly quoted by the method.
* @param string $name the old name of the column. The name will be properly quoted by the method.
* @param string $newName the new name of the column. The name will be properly quoted by the method.
* @return string the SQL statement for renaming a DB column.
* @since 1.1.6
*/
public
function
renameColumn
(
$table
,
$name
,
$newName
)
{
$db
=
$this
->
getDbConnection
();
$row
=
$db
->
createCommand
(
'SHOW CREATE TABLE '
.
$db
->
quoteTableName
(
$table
))
->
queryRow
();
if
(
$row
===
false
)
throw
new
CDbException
(
Yii
::
t
(
'yii'
,
'Unable to find "{column}" in table "{table}".'
,
array
(
'{column}'
=>
$name
,
'{table}'
=>
$table
)));
if
(
isset
(
$row
[
'Create Table'
]))
$sql
=
$row
[
'Create Table'
];
else
{
$row
=
array_values
(
$row
);
$sql
=
$row
[
1
];
}
if
(
preg_match_all
(
'/^\s*`(.*?)`\s+(.*?),?$/m'
,
$sql
,
$matches
))
{
foreach
(
$matches
[
1
]
as
$i
=>
$c
)
{
if
(
$c
===
$name
)
{
return
"ALTER TABLE "
.
$db
->
quoteTableName
(
$table
)
.
" CHANGE "
.
$db
->
quoteColumnName
(
$name
)
.
' '
.
$db
->
quoteColumnName
(
$newName
)
.
' '
.
$matches
[
2
][
$i
];
}
}
}
// try to give back a SQL anyway
return
"ALTER TABLE "
.
$db
->
quoteTableName
(
$table
)
.
" CHANGE "
.
$db
->
quoteColumnName
(
$name
)
.
' '
.
$newName
;
}
/**
* Builds a SQL statement for dropping a foreign key constraint.
* @param string $name the name of the foreign key constraint to be dropped. The name will be properly quoted by the method.
* @param string $table the table whose foreign is to be dropped. The name will be properly quoted by the method.
* @return string the SQL statement for dropping a foreign key constraint.
* @since 1.1.6
*/
public
function
dropForeignKey
(
$name
,
$table
)
{
return
'ALTER TABLE '
.
$this
->
quoteTableName
(
$table
)
.
' DROP FOREIGN KEY '
.
$this
->
quoteColumnName
(
$name
);
}
}
framework/db/dao/mysql/Schema.php
View file @
92fe7e47
This diff is collapsed.
Click to expand it.
framework/db/dao/mysql/TableSchema.php
deleted
100644 → 0
View file @
3e18a7a6
<?php
/**
* TableSchema class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-2012 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* TableSchema represents the metadata for a MySQL table.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class
TableSchema
extends
CDbTableSchema
{
/**
* @var string name of the schema (database) that this table belongs to.
* Defaults to null, meaning no schema (or the current database).
*/
public
$schemaName
;
}
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